Суббота, 13 Декабрь 2008 08:05

Для чего необходим параметр MaxBarsBack?

Автор 
Оцените материал
(0 голосов)

Параметр MaxBarsBack определяет, на какую глубину в прошлое вы можете ссылаться в своем коде. Например, если параметр MaxBarsBack = 50, то вы можете обратиться к значению переменной 50 баров назад:

Value1[50]
Close[50]

Для организации такой возможности будут сохранены 50 последних значений переменных. Так же с начала графика будет пропущено 50 баров.

Параметр MaxBarsBack устанавливается в окне свойств индикатора/стратегии, в папке Properties. Если этот параметр установлен в положении Auto-detect, то при каждом запуске индикатора или функции система  запускает программу с малым количеством значений. Это делается для того, чтобы определить минимальное подходящее для работы значение. Если выясняется, что пробуемого значения не хватает, система увеличивает значение MaxBarsBack и повторяет весь процесс с самого начала. Так будет повторяться до тех пор, пока величина MaxBarsBack не достигнет подходящего минимального значения. Этот процесс требует некоторое время, поэтому для увеличения скорости загрузки рабочих листов можно установить требуемое значение вручную.

Если вам необходимо ссылаться в своем коде на большое число предыдущих значений и вы не хотите терять часть истории, отступая на нужное значение MaxBarsBack, то вы можете самостоятельно организовать массив предыдущих значений:

Arrays: State[1000](0);

State[0] = MyFunction(c, 24);

{Сохраняем предыдущие значения}
For Value1 = 1000 downto 1 begin
State[Value1] = State[Value1 - 1];   
end;

if State[900] < 25 then begin

End;

В языке EasyLanguage есть возможность обращаться к прошлым значениям элементов массива. Например, State[150][50]. Однако надо помнить, что такое обращение требует резервирования дополнительного объема памяти. Это сильно замедляет работу вашей программы. Кроме того, если обращение к значениям массива на прошлых барах отсуствует — память не резервируется, программа работет быстро и эффективно.

При той организации данных, которая предложена выше, лучше произвести следующую адекватную замену:
State[150 + 50] = State[150][50]; {в пределах 1000}

 



В подготовке материала принял участие Герман Брюханов (Leader).

 


Прочитано 3591 раз Последнее изменение Среда, 04 Май 2011 14:14
Gelium

Автор сайта.




Перепечатка авторских материалов сайта без указания ссылки на
сайт Gelium.net запрещена.

Pavel Gelium 2000-2017 © All rights reserved.