Здравсвтуйте!
Написал в функции такой код
double dLongMA1 = iMA(sFinInstr, 0, iLongPeriod1, 0, MODE_SMA, PRICE_CLOSE, 0);
double dLongMA2 = iMA(sFinInstr, 0, iLongPeriod2, 0, MODE_SMA, PRICE_CLOSE, 0);
double dLongMA1_1 = iMA(sFinInstr, 0, iLongPeriod1, 0, MODE_SMA, PRICE_CLOSE, 1);
double dLongMA2_2 = iMA(sFinInstr, 0, iLongPeriod2, 0, MODE_SMA, PRICE_CLOSE, 1);
Alert("Prosto long1 = ",dLongMA1, "long 2 = ", dLongMA2, "long3 = ", dLongMA1_1, "long4 = ", dLongMA2_2);
Запускаю тестирование.
Сообщение alert в журнале выдатся стабильно кроме некоторых дат. Вот как раз именно в те моменты, где и происходит пересечение. Подскажите, как нормально отследить пересечение.
Привожу свой пример, делайте аналогично у себя - все работает правильно.
double MA1_1 = iMA(Symbol(), trend_period, Period_MA1, 0, MODE_EMA, PRICE_CLOSE, 1); double MA1_2 = iMA(Symbol(), trend_period, Period_MA1, 0, MODE_EMA, PRICE_CLOSE, 2); double MA2_1 = iMA(Symbol(), trend_period, Period_MA2, 0, MODE_EMA, PRICE_CLOSE, 1); double MA2_2 = iMA(Symbol(), trend_period, Period_MA2, 0, MODE_EMA, PRICE_CLOSE, 2); //--------------------------------------------------------------- 5 -- // Вычисление торговых критериев if (MA2_2 - MA1_2 > 0 && MA1_1 - MA2_1 > 0) return(10); // Открытие Buy if (MA1_2 - MA2_2 > 0 && MA2_1 - MA1_1 > 0) return(20); // Открытие Sell
double dLongMA1 = iMA(sFinInstr, 0, iLongPeriod1, 0, MODE_SMA, PRICE_CLOSE, 0);
double dLongMA2 = iMA(sFinInstr, 0, iLongPeriod2, 0, MODE_SMA, PRICE_CLOSE, 0);
double dLongMA1_1 = iMA(sFinInstr, 0, iLongPeriod1, 0, MODE_SMA, PRICE_CLOSE, 1);
double dLongMA2_2 = iMA(sFinInstr, 0, iLongPeriod2, 0, MODE_SMA, PRICE_CLOSE, 1);
Вы осознано пытаетесь смотреть пересечение на нулевом баре? Цена Close[0] - это текущая цена, которая постоянно меняется, соответственно машка учитывающая ее будет постоянно меняться. Быстрая машка может пересечеть медленную потом вернуться обратно, и так почти бесконечное количество раз. Мне сложно придумать практическое применение такому пересечению....
И еще у Вас в коде:
// для коротких позиций double dShortMA1 = double iMA(sFinInstr, 0, iShortPeriod1, 0, MODE_SMA, PRICE_CLOSE, 0); double dShortMA2 = double iMA(sFinInstr, 0, iShortPeriod1, 0, MODE_SMA, PRICE_CLOSE, 0); double dShortMA1_1 = double iMA(sFinInstr, 0, iShortPeriod1, 0, MODE_SMA, PRICE_CLOSE, 1); double dShortMA2_2 = double iMA(sFinInstr, 0, iShortPeriod1, 0, MODE_SMA, PRICE_CLOSE, 1);Ошибка с указанием периода мне кажется...
double Check2MAsCrossingDirection(int PFast, int PSlow, int bn) { double dMA[] = {0,0}; dMA[0] = iMA(Symbol(), trend_period, PFast, 0, MODE_EMA, PRICE_CLOSE, bn) - iMA(Symbol(), trend_period, PSlow, 0, MODE_EMA, PRICE_CLOSE, bn); int k = bn+1; dMA[1] = iMA(Symbol(), trend_period, PFast, 0, MODE_EMA, PRICE_CLOSE, k) - iMA(Symbol(), trend_period, PSlow, 0, MODE_EMA, PRICE_CLOSE, k); if(dMA[0]*dMA[1]<0) return(dMA[0]); return(0); }можно так, например.
Владислав, а не напишете в FAQ (в Субботник) ответ на очень распространенный вопрос "Как описать пересечение МА?". Может, еще что-нибудь приметили из повторяющихся наиболее часто?
Запросто - будет время посмотрю. Этот вариант, в принципе, можно брать за основу для определения пересечания - я бы для универсальтности еще порог добавил ....
Это радует, а то уже снится это пересечение. :))
Функция и индикатор с примером использования в FAQ . https://www.mql5.com/ru/forum/132894/page12
Функция и индикатор с примером использования в FAQ . https://www.mql5.com/ru/forum/132894/page12
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравсвтуйте!
Написал в функции такой код
double dLongMA1 = iMA(sFinInstr, 0, iLongPeriod1, 0, MODE_SMA, PRICE_CLOSE, 0);
double dLongMA2 = iMA(sFinInstr, 0, iLongPeriod2, 0, MODE_SMA, PRICE_CLOSE, 0);
double dLongMA1_1 = iMA(sFinInstr, 0, iLongPeriod1, 0, MODE_SMA, PRICE_CLOSE, 1);
double dLongMA2_2 = iMA(sFinInstr, 0, iLongPeriod2, 0, MODE_SMA, PRICE_CLOSE, 1);
Alert("Prosto long1 = ",dLongMA1, "long 2 = ", dLongMA2, "long3 = ", dLongMA1_1, "long4 = ", dLongMA2_2);
Запускаю тестирование.
Сообщение alert в журнале выдатся стабильно кроме некоторых дат. Вот как раз именно в те моменты, где и происходит пересечение. Подскажите, как нормально отследить пересечение.