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

 

Как правильно получить цену открытия бара и если не удалось получить цену открытия выйти?

Набросал несколько вариантов. Но может есть код лучше и правильнее?

   if(iOpen(Symbol(),Period(),0)==0)
     {
      return;
     }
     {
      if(iOpen(Symbol(),Period(),0)!=0)
        {
         double   open=iOpen(Symbol(),Period(),0);
        }
     }
  if(iOpen(Symbol(),Period(),0)==0.0)
     {
      return;
     }
     {
      if(iOpen(Symbol(),Period(),0)!=0.0)
        {
         double   open=iOpen(Symbol(),Period(),0);
        }
     } 
  if(iOpen(Symbol(),Period(),0)==0 && iOpen(Symbol(),Period(),0)==0.0)
     {
      return;
     }
     {
      if(iOpen(Symbol(),Period(),0)!=0 && iOpen(Symbol(),Period(),0)!=0.0)
        {
         double   open=iOpen(Symbol(),Period(),0);
        }
     }     
 
ilvic:

Как правильно получить цену открытия бара и если не удалось получить цену открытия выйти?

Набросал несколько вариантов. Но может есть код лучше и правильнее?

iXXXX функции имеет смысл применять только если выполняется одноразовый запрос, без циклов и без вызовов других iXXXX функций.

Если Вам нужно только один раз получить цену открытия, то смотрим справку iOpen:

Возвращаемое значение

*** 0 в случае ошибки.

Значит нужно запросить цену и проверить её на равенство нулю: если не ноль - значит цена получена, если ноль - значит ошибка.

double open=iOpen(Symbol(),Period(),0);
if(open==0.0)
   retutn;
 
Подскажите пожалуйста как всунуть 9 параметр с решёткой (#CL) чтоб компилятор не выдавал ошибку?
enum Symboll_
  {
   AUDUSD=0,
   NZDUSD=1,
   USDCAD=2,
   USDCHF=3,
   USDJPY=4,
   EURJPY=5,
   EURUSD=6,
   GBPUSD=7,
   #CL   =8
  };

 
 
Vladimir Karputov:

iXXXX функции имеет смысл применять только если выполняется одноразовый запрос, без циклов и без вызовов других iXXXX функций.

Если Вам нужно только один раз получить цену открытия, то смотрим справку iOpen:

Возвращаемое значение

*** 0 в случае ошибки.

Значит нужно запросить цену и проверить её на равенство нулю: если не ноль - значит цена получена, если ноль - значит ошибка.

Спасибо. Ещё вопросик. Стоит ли применять скобки в данном коде или нет разницы?

   double   open=iOpen(Symbol(),Period(),0);
   if(open==0.0)
     {
      return;
     }
 
xxz:
Подскажите пожалуйста как всунуть 9 параметр с решёткой (#CL) чтоб компилятор не выдавал ошибку?
 

Вот так:

   enum MySymbol
     {
      symbol_0=0,// AUDUSD
      symbol_1=1,// NZDUSD
      symbol_2=2,// USDCAD
      symbol_3=3,// USDCHF
      symbol_4=4,// USDJPY
      symbol_5=5,// EURJPY
      symbol_6=6,// EURUSD
      symbol_7=7,// GBPUSD
      symbol_8=8,// #CL
     };
 
ilvic:

Спасибо. Ещё вопросик. Стоит ли применять скобки в данном коде или нет разницы?

   double   open=iOpen(Symbol(),Period(),0);
   if(open==0.0)
      return;

Вполне будет работать. Скобки по большому счету нужны для группы каких-то действий. Если одно действие, то они ни к чему.

int n;
double y;
if(бла-бла-бла)
        n = бла-бла;
else
  {
        n = бла-бла;
        y = бла;
  )
 
Vladimir Karputov:

Вот так:

Большое спасибо! 

а то я пробовал вот так и у меня не вышло:

  enum  Symboll_
  {
   SIM_0,  //AUDUSD
   SIM_1,  //NZDUSD
   SIM_2,  //USDCAD
   SIM_3,  //USDCHF
   SIM_4,  //USDJPY
   SIM_5,  //EURJPY
   SIM_6,  //EURUSD
   SIM_7   //#CL
  };  
 
xxz:

Большое спасибо! 

а то я пробовал вот так и у меня не вышло:

или так:

   enum MySymbol
     {
      symbol_0=0,// AUDUSD
      symbol_1=1,// NZDUSD
      symbol_2=2,// USDCAD
      symbol_3=3,// USDCHF
      symbol_4=4,// USDJPY
      symbol_5=5,// EURJPY
      symbol_6=6,// EURUSD
      symbol_7=7,// GBPUSD
      symbol_8=8,// #CL
     };
   string my_symbol[9]=
     {
      "AUDUSD",
      "NZDUSD",
      "USDCAD",
      "USDCHF",
      "USDJPY",
      "EURJPY",
      "EURUSD",
      "GBPUSD",
      "#CL"
     };
 
Vladimir Karputov:

или так:

Во вот это то что и надо!

в тех вариантах выходило или просто порядковый номер или SIM_1,...и тд.

 
При тестировании мультивалютного советника проблема с лотом возникает. У меня поставлен фиксированный 0.03, а в процессе теста появляются ордера с объемом 0,1. И сразу на графике провал возникает. Это только у меня так?
Причина обращения: