Помогите описать пересечение MA в MQL4!!! - страница 2

 

Спасибо за материал, помог, вроде бы сделал. А как проверить, тестирую

c оветника, а Alert все равно не выводит… значит не правильно сделал?

 
Понятно, т.е. я смогу проверить только в реальности, когда моё условие в советники выполнится?
 
А можете мне кто нибуть сказать правильно или нет написал, только СИЛЬНО не ругайте меня... сообразил как смог... ни разу не программил. .. :
//--------------------------------------------------------------------
// Signal.mq4
//--------------------------------------------------------------------
extern int Period_MA1=13;             
extern int Period_MA2=34;
//--------------------------------------------------------------------
int start()                          
  {
   double MA1; 
   double MA2;                           
//--------------------------------------------------------------------
   
   MA1=iMA(NULL,0,Period_MA1,0,MODE_SMA,PRICE_CLOSE,0);
   MA2=iMA(NULL,0,Period_MA2,0,MODE_SMA,PRICE_CLOSE,0);
   
//--------------------------------------------------------------------
   if (MA1 == MA2 && MA1 > MA2)   //Вот это меня больше заботит правильно или нет
     {
           Alert("Покупка пары (" ,Symbol(), ").");
     }
//--------------------------------------------------------------------
   if (MA1 == MA2 && MA1 < MA2)   //Вот это меня больше заботит правильно или нет
     {
          Alert("Продажа пары (" ,Symbol(), ").");
     }
//--------------------------------------------------------------------
   return;                            // Выход из start()
 
zax:
А можете мне кто нибуть сказать правильно или нет написал, только СИЛЬНО не ругайте меня... сообразил как смог... ни разу не программил. ..

Нет, неправильно. Условие, стоящее в скобках оператора if(), означает следующее:

MA1 == MA2 ( MA1 равно MA2 на нулевом баре ) && ( и одновременно с этим) MA1 > MA2 ( MA1 больше MA2 на том же нулевом баре ).

Понятно, что этого не может быть. Иными словами, это логическая ошибка, которая не может быть выявлена редактором МЕ на этапе компиляции, т.к. с точки зрения синтаксиса всё написано правильно.
------------

Общий смысл вычислений, обнаруживающих пересечение линий, состоит в том, чтобы сравнивать значения этих линий на некотором (например, нулевом) баре и предыдущем баре (первом). Посмотрите здесь Учебник по MQL4 Простые программы на MQL4 Использование технических индикаторов (Стохастический Осциллятор (Stochastic Oscillator)) - внизу параграфа.

 
а сейчас правильно? будет работать? ... :
//--------------------------------------------------------------------
// Signal.mq4
//--------------------------------------------------------------------
extern int Period_MA1=13;             // Период расчётной МА
extern int Period_MA2=34;
//--------------------------------------------------------------------
int start()                          
  {
   double MA1_0, MA2_0, MA1_1, MA2_1;                           
//--------------------------------------------------------------------
   
   MA1_0=iMA(NULL,0,Period_MA1,0,MODE_SMA,PRICE_CLOSE,0);
   MA2_0=iMA(NULL,0,Period_MA2,0,MODE_SMA,PRICE_CLOSE,0);
   MA1_1=iMA(NULL,0,Period_MA1,0,MODE_SMA,PRICE_CLOSE,1);
   MA2_1=iMA(NULL,0,Period_MA2,0,MODE_SMA,PRICE_CLOSE,1);
   
//--------------------------------------------------------------------
   if (MA1_0 == MA2_0 && MA1_1 > MA2_1)   
     {
           Alert("Покупка пары (" ,Symbol(), ").");// Сообщение 
     }
//--------------------------------------------------------------------
   if (MA1_0 == MA2_0 && MA1_1 < MA2_1)   
     {
          Alert("Продажа пары (" ,Symbol(), ").");// Сообщение 
     }
//--------------------------------------------------------------------
   return;                            // Выход из start()
  }
//--------------------------------------------------------------------
 

Так будет. Но есть два замечания.

1. На текущем баре совсем не обязательно всегда будет равенство, если на на предыдущем баре одна линия выше (или ниже) другой. Это лишь частный случай пересечения. А в значительной части случаев окажется, что пересечение произошло "между" барами. Иными словами, на нулевом баре MA1_0 может оказаться и меньше MA2_0. (в MQL4 допускается использование знака операции <= т.е. меньше оли равно) Программирование, как никакая другая область деятельности, требует максимальной чёткости и скурпулёзности.

2. Если Вы хотите писать программы (на любом языке), то лучше всего последовательно овладеть всеми понятиями и навыками. Ведь на форуме Вы не сможете выяснить всю логику собственной программы, придётся понимать самому.. Поэтому лучше всего начать изучать учебник по MQL4 с самого начала.

 
Все понятно. Огромное спасибо за помощь.