Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 470

 

В документации   Справочник MQL5Основы языкаПеременныеInput переменные

приводится пример:


#property script_show_inputs 

//--- input parameters
input dayOfWeek swapday=W;

//--- day of week
enum dayOfWeek 
  {
   S=0,     // Sunday
   M=1,     // Monday
   T=2,     // Tuesday
   W=3,     // Wednesday
   Th=4,    // Thursday
   Fr=5,    // Friday,
   St=6,    // Saturday
  };

//Вставляю в советник, только без #property script_show_inputs
//Компилятор ругается:
//'dayOfWeek' - declaration without type   54   7

//Испавляю на:
input int dayOfWeek swapday=W;
//Компилятор пишет шибку:
//'swapday' - semicolon expected                   54   21

Подскажите пожалуйста, в чём проблема?


 
Leo59:

В документации   Справочник MQL5Основы языкаПеременныеInput переменные

приводится пример:

Подскажите пожалуйста, в чём проблема?

enum dayOfWeek должен быть выше input dayOfWeek. Второй вариант написания вообще не правильный. Плюс совет - не пиши такие перечисления, модификатор W потом будет крайне сложно найти.
 
Vasiliy Sokolov:
enum dayOfWeek должен быть выше input dayOfWeek. Второй вариант написания вообще не правильный. Плюс совет - не пиши такие перечисления, модификатор W потом будет крайне сложно найти.
СПАСИБО ОГРОМНОЕ!!!!
А я то ....., по простоте своей душевной эту строчку выше поднял.
Спасибо!
 

Товарищи, помогите с алертом пожалуйста.

 Хотел сделать, что бы если предыдущий бар больше 250 пунктов, то всплывающее уведомление появляется и звуковой сигнал, проблема в том, что долбит каждые 2-3 секунды.. Как можно сделать что бы ждал индикатор 10 минут, или алерт до следующего сигнала

input int Bar     = 1;
input int pips    = 250;
input bool alert  = true;
input bool sound  = true;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+


int start()
  {
  //alert criteria
int buy_o, sell_o, buy_go=0, sell_go=0;

int dig;
if (Digits==3)(dig=100);
if (Digits==5)(dig=10000);

double buy_bar=(High[Bar]-Low[Bar]);if(buy_bar>0 && Open[Bar]>Close[Bar]){buy_o=buy_bar*dig;}
if(buy_o>pips){buy_go=1;}

double sell_bar=(High[Bar]-Low[Bar]);if(sell_bar>0 && Open[Bar]<Close[Bar]){sell_o=sell_bar*dig;}
if(sell_o>pips){sell_go=1;}
Comment (buy_o,"_",sell_o);   
 if (buy_go==1) //Signal Buy
 {

if(alert==TRUE){Alert("Покупка: ",Symbol(),", Пунктов:" ,buy_o);}
if(sound==TRUE){PlaySound("alert.wav");} Comment("buy");
 }
 if (sell_go==1) //Signal Sell
 {
if(alert==TRUE){Alert("Продажа: ",Symbol(),", Пунктов:" ,sell_o);}
if(sound==TRUE){PlaySound("alert.wav");} Comment ("sell");
 }




//----------
return(0);
  }
 

Подскажите пожалуйста, как правильно по ссылке передавать массивы в функцию?

#define  SIZE     50 
double   MACD[SIZE];         // Статический массив

int start()
   {
    Fun(     );
   }

int Fun(const double &MACD[    ])
   {
    for(int i=1; i<SIZE; i++)
        {
         if(MACD[i]>MACD[i-1] && MACD[i]>MACD[i+1])
              return(1);
        }
   }
 
Leo59:

Подскажите пожалуйста, как правильно по ссылке передавать массивы в функцию?

#define  SIZE     50 
double   MACD[SIZE];         // Статический массив

int start()
   {
    // Необходимо перед вызовом функции заполнить массив данными
    Fun(MACD);
   }

int Fun(const double & _array[])
   {
    for(int i=1; i<ArraySize(_array)-1; i++)
        {
         if(_array[i]>_array[i-1] && _array[i]>_array[i+1])
              return(1);
        }
   return(0);
   }
Можно так
 
Victor Nikolaev:
Можно так
Спасибо!!!!
 
Artyom Trishkin:

Во-первых: все ли параметры у раздельных МАшек в одном окне совпадают с параметрами МАшек, построенных одним индикатором с тремя буферами?

Во-вторых: вы, когда накладывали МАшки в одном окне друг на дружку, в параметре "Применить к" (ну или что-то в том духе - не помню точно) что выбирали?

Кот говорит, что может поделиться своими волосами - ему не жалко ;)

1. Все совпадают
2. Нет такого параметра.
Мне в другой ветке сказали, что эта проблема в МТ4 нерешаема.  :(
 
Mike:
1. Все совпадают
2. Нет такого параметра.
Мне в другой ветке сказали, что эта проблема в МТ4 нерешаема.  :(

2. Я не знаю где вы взяли МАшку в отдельном окне, чтобы мог что-либо вам сказать о параметре. Но... Если взять из Индикаторы --> Осцилляторы --> Moving Averages of Oscillator, то в нём есть "Применить к:"

Так вот, если вы на индикатор в отдельном окне попробуете положить ещё один, то в некоторых случаях его можно применить к не только стандартным ценам из перечисления ENUM_APPLIED_PRICE, но и к данным того индикатора, который уже есть в окне. Может вы как раз в такой ситуации.

3. Какая проблема? Что три МАшки не соответствуют трём таким же (по вашему утверждению) МАшкам? Так это не нерешаемо, это - нонсенс. Если они сделаны правильно, то они обязаны совпадать. Какая разница - три отдельные МАшки со своими параметрами, или те же три МАшки с теми же параметрами, но впихнутые в один индикатор с тремя буферами... Вы видите разницу? Я - нет. А если вы её видите, то ищите несоответствие в расчётах МАшек.

Кстати... Аллигатор - три МАшки в одном индикаторе, каждая со своими параметрами. Настройте параметры одинаково с вашими тремя раздельными МАшками - и они совпадут. Правда у вас вся эта вакханалия в отдельном окне... Ну так ... для примера

 
Mike:
Я сделал индикатор ТриВОдном  - 3МА(4,9,14) и решил его сравнить для проверки правильности  с окном, где три индикатора -   МА(4), МА(9), МА(14). Волосы встали дыбом.  :)
Попробуйте отключить самомасштабирование индикаторных окон, может всё и уляжется.
"где три индикатора -   МА(4), МА(9), МА(14)"  индикаторное окно самомасштабируется по первому прикреплённому к этому окну индикатору. В Вашем случае, возможно, это МА(4)