Ну если верить документации:
Неважно, какое свойство имеет приемный массив - as_series=true или as_series=false, данные будут скопированы таким образом, что самый старый по времени элемент будет в начале физической памяти, отведенной под массив. ...
.
и потом
ArraySetAsSeries
.....
Флаг AS_SERIES не может быть установлен у многомерных массивов и у статических массивов (то есть массивов, чей размер в квадратных скобках указан еще на этапе компиляции). Индексация в таймсерии отличается от обычного массива тем, что индексация элементов таймсерии производится от конца массива к началу (от самых свежих данных к самым старым).
Массив определен статически
double aStohastik_Signal[3];
Если я не ошибаюсь данные должные сдвигаться т.е. при каждом вызове события OnTick() буфер индикатора должен пополняться новым значением и это значение должно быть доступно в позиции [0].
Данные сдвигаются при появлении нового бара, пока нового бара нет - меняется только значение на текущем.
- 2010.10.04
- Konstantin Gruzdev
- www.mql5.com
Думал раз период задан 1 час то и тик столько-же похоже тик это тик.
OnTick
Событие NewTick генерируется только для экспертов при поступлении нового тика по символу, к графику которого прикреплен эксперт. Функцию OnTick() бесполезно определять в пользовательском индикаторе или скрипте, поскольку событие Tick для них не генерируется.
Событие Tick генерируется только для экспертов, но это не означает, что эксперты обязаны иметь функцию OnTick(), так как для экспертов генерируются не только события Tick, но и события Timer, BookEvent и ChartEvent. Должна быть объявлена с типом void, параметров не имеет:
Как говорится учите мат часть .... :)
Спасибо за помощь
попытаюсь разобраться по подробней что и как считается...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый день коллеги!
кто может подсказать что я не так делаю
В приведенном ниже коде есть такой фрагмент
CopyBuffer(H_Stohastic, SIGNAL_LINE, 0, 3, aStohastik_Signal);
Print(aStohastik_Signal[2],"|",aStohastik_Signal[1],"|",aStohastik_Signal[0]);
Почему этот код выдает одну и туже тройку значений
2011.02.12 15:20:57 Core 1 2011.02.10 23:59:59 23.34151915907678|37.41065496154604|57.88286899697894
2011.02.12 15:20:57 Core 1 2011.02.10 23:59:55 23.29303431059216|37.41065496154604|57.88286899697894
2011.02.12 15:20:57 Core 1 2011.02.10 23:59:53 23.26879188634958|37.41065496154604|57.88286899697894
2011.02.12 15:20:57 Core 1 2011.02.10 23:59:51 23.24454946210753|37.41065496154604|57.88286899697894
2011.02.12 15:20:57 Core 1 2011.02.10 23:59:50 23.22030703786495|37.41065496154604|57.88286899697894
2011.02.12 15:20:57 Core 1 2011.02.10 23:59:48 23.19606461362237|37.41065496154604|57.88286899697894
2011.02.12 15:20:57 Core 1 2011.02.10 23:59:47 23.17182218938032|37.41065496154604|57.88286899697894
2011.02.12 15:20:57 Core 1 2011.02.10 23:59:45 23.14757976513774|37.41065496154604|57.88286899697894
2011.02.12 15:20:57 Core 1 2011.02.10 23:59:43 23.12333734089515|37.41065496154604|57.88286899697894
2011.02.12 15:20:57 Core 1 2011.02.10 23:59:42 23.17182218938032|37.41065496154604|57.88286899697894
2011.02.12 15:20:57 Core 1 2011.02.10 23:59:40 23.19606461362237|37.41065496154604|57.88286899697894
2011.02.12 15:20:57 Core 1 2011.02.10 23:59:38 23.22030703786495|37.41065496154604|57.88286899697894
2011.02.12 15:20:57 Core 1 2011.02.10 23:59:37 23.09909491665257|37.41065496154604|57.88286899697894
Если я не ошибаюсь данные должные сдвигаться т.е. при каждом вызове события OnTick() буфер индикатора должен пополняться новым значением и это значение должно быть доступно в позиции [0].
Может нужно запускать расчет индикаторов каждый раз из программы явно? Только не пойму как это сделать.
полный листинг эксперта
int OnInit()
{
H_Stohastic = iStochastic(NULL,0, K_Period, D_Period, Slowing, MODE_SMA, STO_LOWHIGH);
if (H_Stohastic == INVALID_HANDLE){
Alert("Ошибка выделения буфера осцилятора!!!!!");
}
return(0);
}
void OnDeinit(const int reason)
{
//IndicatorRelease(H_Stohastic);
}
void OnTick()
{
double aStohastik_Main[3];
double aStohastik_Signal[3];
int main_total;
// Print("OnTick ....");
main_total = CopyBuffer(H_Stohastic, MAIN_LINE, 0, 3, aStohastik_Main);
if (main_total >= 3)
{
CopyBuffer(H_Stohastic, SIGNAL_LINE, 0, 3, aStohastik_Signal);
Print(aStohastik_Signal[2],"|",aStohastik_Signal[1],"|",aStohastik_Signal[0]);
if (((aStohastik_Signal[0]-aStohastik_Signal[1])*
(aStohastik_Signal[1]-aStohastik_Signal[2]))<0) {
Print("Перегиб !!!!!");
if (aStohastik_Signal[1]>Level_Hight){
Print("Покупаем");
} else if (aStohastik_Signal[1]<Level_Low){
Print("Продаем");
}
}
} else {
// Нам нужно не менее 3-х точек о чем и говорим
Print("Не достаточно данных ",main_total," нужно не менее 3");
}
}