1) Сравнивать на нулевом баре некорректно, т.к. данные постоянно меняются, и получите кучу ложных сигналов.
2) Сравниватьнапрямую тоже не корректно, т.к. пересечение может быть между барами, или значения (МА), в данном случае будут близки, но не равны
3) алгоритм такой: если есть пересечение, то где то есть и расхождение после пересечения, т.е. предположим такую формулу: МА1,1>МА2,1&&MA2.1<MA2.2
4)Если учест что пересечение может произойти и на одном баре то результируюзая формула должна выглядеть так: ((МА1,1>МА2,1&&MA2.1<MA2.2)||(МА1,1>МА2,1&&MA2.1==MA2.2&&МА1,3<МА2,3)) так что пересечение надо искать где то на втором баре,
лучше всего, чтобы не обращаться все время к индикатору, занести значения интересующих баров его в массив, и потом работать с массивом
должно получиться что то вроде этого:
//+------------------------------------------------------------------+ void MACD(){ for(int i=0;i<10;i++){ MacdMain[i]=iMACD(Symbol(),0,Fast,Slow,Signal,0,MODE_MAIN,MacdShift+i);}} //+------------------------------------------------------------------+ bool MacdBuy(){ bool _MacdBuy=false; if( (MacdMain[3]>MacdMain[4]&& MacdMain[4]>MacdMain[5]&& MacdMain[5]==0&& MacdMain[5]>MacdMain[6]&& MacdMain[6]>MacdMain[7])|| (MacdMain[3]>MacdMain[4]&& MacdMain[4]>MacdMain[5]&& MacdMain[5]>=0&& MacdMain[6]<=0&& MacdMain[6]>MacdMain[7]&& MacdMain[7]>MacdMain[8])){_MacdBuy=true;} return(_MacdBuy);}
Никак не получается написать функцию для пересечения 2-х EMA. Подскажите как это сделать.
Пробывал так:
MA_1=iMA(NULL,0,4,0,MODE_EMA,PRICE_CLOSE,0);
MA_2=iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);
if (MA_1 == MA_2) // Проверка прохода
{
Alert("Пересечение.");// Сообщение
}
Но почемуто не получается, условие не выполняется. подскажите кто знает как найти это пересечение, буду благодарен.
Вы только должны понимать что работая с пересечением на 0-ом баре вы рискуете поймать пересечение
которого потом на истории не будет
т е на работающем баре вы получите пересечение! но бар мог сильно приседать или сильно взлетать
а потом вернуться - пересечение вы зафиксируете а в истории потом его не будет!
даже при работе на сформированных барах вы можете получить пересечение которое потом на истории не будет зафиксировано как пересечением
т к мувинги слегка перерисовываются :-)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Никак не получается написать функцию для пересечения 2-х EMA. Подскажите как это сделать.
Пробывал так:
MA_1=iMA(NULL,0,4,0,MODE_EMA,PRICE_CLOSE,0);
MA_2=iMA(NULL,0,8,0,MODE_EMA,PRICE_CLOSE,0);
if (MA_1 == MA_2) // Проверка прохода
{
Alert("Пересечение.");// Сообщение
}
Но почемуто не получается, условие не выполняется. подскажите кто знает как найти это пересечение, буду благодарен.