[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 56

 
Доброго времени суток! Прошу помочь, есть простая задумка реализовать вызов Alert() при пересечении трех МА.
Описание пересечения в программе. Вроде все работает, но не так как нужно. Я делаю округление значений переменный до одного знака, чтобы
застать пересечение. И этот Alert() барабанит мне до тех пор пока средние будут находиться на одной позиции. Как сделать так, чтобы он вызывался один раз, ну или до 5 раз.
//+------------------------------------------------------------------+
//| Глобальные переменные                                  |
//+------------------------------------------------------------------+
   extern int Period_MA_Blue = 4;         // Период 4-х расчётной синей МА (4 часа)
   extern int Period_MA_Green = 13;       // Период 13-ти расчётной зеленой МА (13 часов)
   extern int Period_MA_Orange = 50;      // Период 50-ти расчётной оранжевой МА (2 дня 2 часа)
   double MA_Blue_EURUSD, MA_Green_EURUSD, MA_Orange_EURUSD;
   string SMA_Blue_EURUSD,SMA_Green_EURUSD,SMA_Orange_EURUSD;

//+------------------------------------------------------------------+
//| Начало программы                                  |
//+------------------------------------------------------------------+

int init(){return(0);}
int EURUSD()
      {
  
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD)
         {
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке.
          Alert("Cигнал на ПОКУПКУ паре EURUSD");
          return(11); // 11 - на первой паре сигнал на покупку.
         }
  
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD)
         {
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже.
          Alert("Cигнал на ПРОДАЖУ паре EURUSD");
          return(10); // 20 - на первой паре сигнал на продажу.
         }     
      }
int start()

   {

//+------------------------------------------------------------------+
//| Блок работы с EURUSD                               |
//+------------------------------------------------------------------+
   if(EURUSD() != 11 || EURUSD() != 10)
      {
         // Если функция EURUSD() не зафиксировала ни один из сигналов, обрабатываем данные дальше.
         MA_Blue_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Blue,0,MODE_EMA,PRICE_CLOSE,0);
         MA_Green_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Green,0,MODE_EMA,PRICE_CLOSE,0);
         MA_Orange_EURUSD = iMA("EURUSD",PERIOD_H1,Period_MA_Orange,0,MODE_EMA,PRICE_CLOSE,0);
  
         SMA_Blue_EURUSD = MA_Blue_EURUSD;
     // Преобразование int в string
         SMA_Blue_EURUSD = StringSetChar(SMA_Blue_EURUSD, 6, '');     // Округление до х.хххх
         SMA_Green_EURUSD = MA_Green_EURUSD;   // Преобразование int в string
         SMA_Green_EURUSD = StringSetChar(SMA_Green_EURUSD, 6, '');   // Округление до х.хххх
         SMA_Orange_EURUSD = MA_Orange_EURUSD; // Преобразование int в string
         SMA_Orange_EURUSD = StringSetChar(SMA_Orange_EURUSD, 6, ''); // Округление до х.хххх

      }

     }

int deinit(){return(0);}




Если все не правильно на корню, предложите методы отслеживания пересечения. Спасибо.
 
Zherart:
Доброго времени суток! Прошу помочь, есть простая задумка реализовать вызов Alert() при пересечении трех МА.
Описание пересечения в программе. Вроде все работает, но не так как нужно. Я делаю округление значений переменный до одного знака, чтобы
застать пересечение. И этот Alert() барабанит мне до тех пор пока средние будут находиться на одной позиции. Как сделать так, чтобы он вызывался один раз, ну или до 5 раз.Если все не правильно на корню, предложите методы отслеживания пересечения. Спасибо.

//+------------------------------------------------------------------+
//| Глобальные переменные                                  |
//+------------------------------------------------------------------+
   extern int Period_MA_Blue = 4;         // Период 4-х расчётной синей МА (4 часа)
   extern int Period_MA_Green = 13;       // Период 13-ти расчётной зеленой МА (13 часов)
   extern int Period_MA_Orange = 50;      // Период 50-ти расчётной оранжевой МА (2 дня 2 часа)
   double MA_Blue_EURUSD, MA_Green_EURUSD, MA_Orange_EURUSD;
   string SMA_Blue_EURUSD,SMA_Green_EURUSD,SMA_Orange_EURUSD;
   int БАРАБАНИТЬ = 1; // Сколько раз подавать сигнал
   int ПОКУПКА=0,ПРОДАЖА=0;
//+------------------------------------------------------------------+
//| Начало программы                                  |
//+------------------------------------------------------------------+

int init(){return(0);}
int EURUSD() 
      {
   
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD > SMA_Orange_EURUSD)
         { 
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА выше - сигнал к покупке.
          if(ПОКУПКА<БАРАБАНИТЬ) {Alert("Cигнал на ПОКУПКУ паре EURUSD");ПОКУПКА++;}
          return(11); // 11 - на первой паре сигнал на покупку.
         }
      else ПОКУПКА=0;
      if(SMA_Green_EURUSD == SMA_Orange_EURUSD && SMA_Blue_EURUSD < SMA_Orange_EURUSD)
         { 
          // Если зеленая МА пересекает оранжевую МА и при этом синяя МА ниже - сигнал к продаже.
          if(ПРОДАЖА<БАРАБАНИТЬ) {Alert("Cигнал на ПРОДАЖУ паре EURUSD");ПРОДАЖА++;}
          return(10); // 20 - на первой паре сигнал на продажу.
         }
       else ПРОДАЖА=0;       
      }

Где-то так навскидку...
 
Sepulca, спасибо!!! Будем пробовать. Смысл понял!!!
 
Или я туплю или что-то с терминалом. Хотел оптимизировать советника, а там нет вкладки "входные параметры" в свойствах эксперта. Помогите.
 
prom18:
Или я туплю или что-то с терминалом. Хотел оптимизировать советника, а там нет вкладки "входные параметры" в свойствах эксперта. Помогите.



https://forum.mql4.com/ru/46980/page417#702426

https://www.mql5.com/ru/forum/138609/page417#702426 

 

Можно ли в принимаемых параметрах функции использовать массив? Например, мне нужно создать функцию, которая будет обрабатывать информацию в массиве:

void Function(double Array[])
 {
  ...
 }
 
silhouette:

Можно ли в принимаемых параметрах функции использовать массив? Например, мне нужно создать функцию, которая будет обрабатывать информацию в массиве:

 


А что учебник здесь пишет?

"

Передаваемые параметры указываются в круглых скобках после названия вызываемой функции и перечисляются через запятую. Количество передаваемых в функцию параметров не должно превышать 64. Функция может также не использовать передаваемые параметры. В этом случае указывается пустой список параметров, т.е. сразу после названия функции располагаются открывающая и закрывающая круглые скобки.

Количество, тип и порядок упоминания передаваемых параметров в вызове функции должны совпадать с количеством, типом и порядком упоминания формальных параметров, указанных в описании функции (исключение составляет вызов функции, имеющей умолчательные параметры - см. Вызов функции и Описание функции и оператор return). Если такого совпадения нет, то редактор MetaEditor выдаст сообщение об ошибке. В качестве передаваемых параметров могут использоваться константы, переменные, выражения и массивы."

 
silhouette:

Можно ли в принимаемых параметрах функции использовать массив? Например, мне нужно создать функцию, которая будет обрабатывать информацию в массиве:

 

Попробуйте так:

void Function(double& Array[])
 {
  ...
 }
https://docs.mql4.com/ru/basis/variables/formal
 
Sepulca:


Тоже самое относится и Close - iClose, Open - iOpen, Time - iTime Volume - iVolume  и т.д.

А индикатор может рисовать до 8 линий от 0 до 7 https://docs.mql4.com/ru/customind/indicatorbuffers 


большое спасибо :) индикатор все равно не рисуется, посыпались шибки в строках типа price=iL[k]; где iL это мой iLow...бывший  Low

в общем узнал много полезного...но дальше копать не буду...

есть метод проще визуализиторовать перерисовку...без пользовательского индикатора. 

 
Roman.:

А что учебник здесь пишет?

"

Передаваемые параметры указываются в круглых скобках после названия вызываемой функции и перечисляются через запятую. Количество передаваемых в функцию параметров не должно превышать 64. Функция может также не использовать передаваемые параметры. В этом случае указывается пустой список параметров, т.е. сразу после названия функции располагаются открывающая и закрывающая круглые скобки.

Количество, тип и порядок упоминания передаваемых параметров в вызове функции должны совпадать с количеством, типом и порядком упоминания формальных параметров, указанных в описании функции (исключение составляет вызов функции, имеющей умолчательные параметры - см. Вызов функции и Описание функции и оператор return). Если такого совпадения нет, то редактор MetaEditor выдаст сообщение об ошибке. В качестве передаваемых параметров могут использоваться константы, переменные, выражения и массивы."

Учебник читал перед тем как писать, выделенное подчеркиванием видел, но на практике реализовать не удалось - пишет о несовместимом типе. 
Причина обращения: