Привет. Помогите новенькому. Задача состоит в том чтобы посчитать количество баров начиная от текущего момента(в обратную сторону) при выполнении условия. Например, быстрая МА выше медленной МА на протяжении Х баров после пересечения. Как такое можно реализовать в mql5?
Самый лучший алгоритм такой: проверяете пересечение на баре #1 (а не #0) - таким образом гарантируется что пересечение не перерисуется. Запоминаете дату этого бара. При новом пересечении запоминаете новую дату. Остаётся теперь каждый раз копировать бары от сохранённой даты до текущей - количество скопированных баров и будет количество баров с момента последнего пересечения.
double ma1[]; double ma2[]; int handle1, handle2; int OnInit() { handle1 = iMA(_Symbol,PERIOD_CURRENT,PEriod_Fast,0,MODE_EMA,PRICE_CLOSE); handle2 = iMA(_Symbol,PERIOD_CURRENT,PEriod_Slow,0,MODE_EMA,PRICE_CLOSE); ArraySetAsSeries(ma1,true); ArraySetAsSeries(ma2,true); ArrayResize(ma1,20); ArrayResize(ma2,20); } OnTick() { CopyBuffer(handle1,0,1,20,ma1); CopyBuffer(handle2,0,1,20,ma2); for (int i = 0 ;i<=20;i++); { if (ma1[i]>ma2[i]) continue; else break; } Print ("Персечение на " i+1 ," баре"); }
Примерно так.
Примерно так.
Спасибо Большое. Как раз то что нужно было. Хотя я столкнулся с проблемой. Посчитать количество баров мне нужно было для того чтоб полученное значение вбить в качестве " периода стохастика". Все получилось, но стохастик сам по себе не поддерживает динамические значения. Т.е. при изменении периода, открывается дополнительное подвальное окно с новым периодом. И сколько баров после пересечения проходит(сколько раз изменяется значение в стохастике) столько и окон открывается. Кто нить знает как обойти эту проблему?
void OnTick() { int L =0; int S =0; int period = 0; double MAY[]; double MAO[]; int MADefinition, MODefinition; MADefinition = iMA(_Symbol,PERIOD_CURRENT,6,0,MODE_EMA,PRICE_CLOSE); MODefinition = iMA(_Symbol,PERIOD_CURRENT,12,0,MODE_EMA,PRICE_CLOSE); ArraySetAsSeries(MAY,true); ArraySetAsSeries(MAO,true); ArrayResize(MAY,20); ArrayResize(MAO,20); CopyBuffer(MADefinition,0,1,20,MAY); CopyBuffer(MODefinition,0,1,20,MAO); for(int l = 0; l <= 20; l++ ) { if (MAY[l] > MAO[l]) { L=l+1; continue; } else break; } for(int s = 0; s <= 20; s++ ) { if (MAY[s] < MAO[s]) { S=s+1; continue; } else break; } if (MAY[0] > MAO[0]) period = L; if (MAY[0] < MAO[0]) period = S; int StochasticDefinitionH=iStochastic(_Symbol,PERIOD_H1,period,NormalizeDouble(period/2,0),NormalizeDouble(period/2,0),MODE_EMA,STO_LOWHIGH); }
Спасибо Большое. Как раз то что нужно было. Хотя я столкнулся с проблемой. Посчитать количество баров мне нужно было для того чтоб полученное значение вбить в качестве " периода стохастика". Все получилось, но стохастик сам по себе не поддерживает динамические значения. Т.е. при изменении периода, открывается дополнительное подвальное окно с новым периодом. И сколько баров после пересечения проходит(сколько раз изменяется значение в стохастике) столько и окон открывается. Кто нить знает как обойти эту проблему?
Неправильно. Запомните: в MQL5 хендл индикатора создаётся ОДИН РАЗ! И делается это в OnInit!!!
Неправильно. Запомните: в MQL5 хендл индикатора создаётся ОДИН РАЗ! И делается это в OnInit!!!
Т.е. вы хотите сказать, что нельзя сделать стохастик с динамическими значениями периода? Ведь в OnInit менять ничего нельзя. Или я ошибаюсь снова и есть обходные пути?
Никто не запрещает создать множество хендлов.
Замечание было по поводу частного случая: когда индикатор используется с одними и теми же параметрами в течение всей работы приложения. В этом случае нецелесообразно постоянное создание и удаление индикатора. А вот когда данные от индикатора нужны однократно, то можно и на лету создать его хендл, получить данные и освободить хендл.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Привет. Помогите новенькому. Задача состоит в том чтобы посчитать количество баров начиная от текущего момента(в обратную сторону) при выполнении условия. Например, быстрая МА выше медленной МА на протяжении Х баров после пересечения. Как такое можно реализовать в mql5?