Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Создавай темы на форуме и увеличивай рейтинг!
Виталий
30
Виталий 2011.04.20 11:49 

Здравсвтуйте!

Написал в функции такой код

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 в журнале выдатся стабильно кроме некоторых дат. Вот как раз именно в те моменты, где и происходит пересечение. Подскажите, как нормально отследить пересечение.

Файлы:
forum.txt 5 kb
techno
1226
techno 2011.04.20 12:01  
Могу сделать чтобы всякий раз после пересечения средних звучала сигнальная мелодия, но не бесплатно
Роман
7939
Роман 2011.04.20 12:02  
GreenDo:

Здравсвтуйте!

Написал в функции такой код

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 
Левитин Сергей В.
5155
Левитин Сергей В. 2011.04.20 12:23  
GreenDo:

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);
Ошибка с указанием периода мне кажется...
Vladyslav Goshkov
1958
Vladyslav Goshkov 2011.04.20 12:33  

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);
}
можно так, например.
Виктор
Модератор
6560
Виктор 2011.04.20 13:00  
Владислав, а не напишете в FAQ (в Субботник) ответ на очень распространенный вопрос "Как описать пересечение МА?". Может, еще что-нибудь приметили из повторяющихся наиболее часто?
Vladyslav Goshkov
1958
Vladyslav Goshkov 2011.04.20 19:00  
granit77:
Владислав, а не напишете в FAQ (в Субботник) ответ на очень распространенный вопрос "Как описать пересечение МА?". Может, еще что-нибудь приметили из повторяющихся наиболее часто?
Запросто - будет время посмотрю. Этот вариант, в принципе, можно брать за основу для определения пересечания - я бы для универсальности еще порог добавил ....
Виктор
Модератор
6560
Виктор 2011.04.20 20:42  
VladislavVG:
Запросто - будет время посмотрю. Этот вариант, в принципе, можно брать за основу для определения пересечания - я бы для универсальтности еще порог добавил ....
Это радует, а то уже снится это пересечение. :))
Vladyslav Goshkov
1958
Vladyslav Goshkov 2011.04.21 07:24  
granit77:
Это радует, а то уже снится это пересечение. :))

Функция и индикатор с примером использования в FAQ . https://www.mql5.com/ru/forum/132894/page12

Виктор
Модератор
6560
Виктор 2011.04.21 15:11  
VladislavVG:

Функция и индикатор с примером использования в FAQ . https://www.mql5.com/ru/forum/132894/page12

Спасибо! Уже в основном FAQ'е. Давайте еще!
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий