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

 
Sprut112:
Советник торгует на хэдже. Может какие-то проверки добавить стандартные?

Вы случайно не на центовике тестируете? На некоторых центовых счетах, минимальный лот 0.1

 
Konstantin Nikitin:

Нормально торгует в тестере, билд 1960. Какой лот ставлю, тем и берет на 12 парах гонял одновременно

А почему #16 лот 0,01?
 
Konstantin Nikitin:

Вы случайно не на центовике тестируете? На некоторых центовых счетах, минимальный лот 0.1

Да нет, проверки на мин Макс и шаг лота есть
 
Sprut112:
А почему #16 лот 0,01?

Если вы о моей картинке, так это частичное закрытие в экперте сработало. Там и написано что close

Sprut112:
Да нет, проверки на мин Макс и шаг лота есть
Так может эта проверка и смотрит что минимальный больше текущего и подставляет его.
 
Konstantin Nikitin:

Если вы о моей картинке, так это частичное закрытие в экперте сработало. Там и написано что close

Так может эта проверка и смотрит что минимальный больше текущего и подставляет его.
Тут надо подумать, может и так. В тестере это происходит не сразу, где-то через месяц
 
Artyom Trishkin:

А почему у вас этот ваш код не работает как вы хотите в mql4 с #property strict ?

В чём его такое принципиальное отличие от кода, показанного вам Владимиром:

А никакой разницы в этих реализациях нет. И лишь одна есть причина, чтобы ваш код не выводил текстовые описания - это отсутствие #property strict в mql4-коде.


Я сразу не разобрался и подумал что у меня не получалось из-за отсутствия =0, =1, и тд...

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 xx=EnumToString(Symboll_(1)); // результат symbol_1

 а нужно было получить NZDUSD

  в таком варианте всё Ок но не получается добавить символ с решёткой #CL
enum  Symboll_
  {
   AUDUSD,
   NZDUSD,
   USDCAD
   //#CL
  };
string xx=EnumToString(Symboll_(1)); // результат NZDUSD

а вот вариант с массивом самое то что надо...

 
xxz:

Я сразу не разобрался и подумал что у меня не получалось из-за отсутствия =0, =1, и тд...

но это оказалось тоже самое...

 

 string xx=EnumToString(Symboll_(1)); // результат symbol_1

 а нужно было получить NZDUSD

а вот вариант с массивом самое то что надо...

Естественно, что при выводе перечисления на печать посредством EnumToString(), вы получите не описание переменной, которое за "//" находится, а именно саму переменную как она есть.

Чтобы выводить на печать так, как вы хотите, нужно сделать функцию-аналог EnumToString(), которая и будет выводить на печать.

Для такого перечисления:

enum ENUM_SYMBOL_NAMES
  {
   SYMBOL_NAME_AUDUSD,     // AUDUSD
   SYMBOL_NAME_NZDUSD,     // NZDUSD
   SYMBOL_NAME_USDCAD,     // USDCAD
   SYMBOL_NAME_USDCHF,     // USDCHF
   SYMBOL_NAME_USDJPY,     // USDJPY
   SYMBOL_NAME_EURJPY,     // EURJPY
   SYMBOL_NAME_EURUSD,     // EURUSD
   SYMBOL_NAME_GBPUSD,     // GBPUSD
   SYMBOL_NAME_SHARP_CL,   // #CL
  };
input ENUM_SYMBOL_NAMES InpNames; // Instrument

Примерно так:

//+------------------------------------------------------------------+
string InstrumentToString(void)
  {
   string enm=EnumToString(InpNames);
   int index=StringFind(enm,"SHARP_");
   int shift=(index>WRONG_VALUE ? index+6 : 12);
   string name=StringSubstr(enm,shift);
   return(index>0 ? "#"+name : name);
  }
//+------------------------------------------------------------------+

Ну и вызывать:

Print(InstrumentToString());
 
double get_lot(int pair, double input_lots) {
   if(input_lots<min_lot[pair]) return(min_lot[ir]);
   return(input_lots);
 
Konstantin Nikitin


:

Если вы о моей картинке, так это частичное закрытие в экперте сработало. Там и написано что close

Так может эта проверка и смотрит что минимальный больше текущего и подставляет его.
 if(SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP)<0.1) dg=2; else
      if(SymbolInfoDouble(Symb,SYMBOL_VOLUME_STEP)<1.0) dg=1;

Вот тут по-моему шо то не то

 
Vladimir Karputov:

А ещё лучше - чётко сформулируйте, что Вы хотите получить. Вероятно я покажу полный пример.

Когда-то, в далеком 2010 году, зимой... я так же просил отфильтровать в индикаторе, суть которого: рисовать Мах & Мin HLine с PERIOD_MN1 за iBars....)))) 

Я разобрался сам. Освоил МТ4. 

Медленно, не сразу, я осваиваю МТ5.

…."чётко сформулируйте, что Вы хотите получить" ФОРМУЛИРУЮ: я конвертирую (сам) то, что спрограммировал (сам), а заодно разберусь (сам) в МТ5 ))))


НО то, что вы мне показали на примерах (наглядно) НЕ ПРОПАЛО.


ЕСЛИ ШО I'll go back )))

Если ШО, то I'll go back






 
Artyom Trishkin:

Естественно, что при выводе перечисления на печать посредством EnumToString(), вы получите не описание переменной, которое за "//" находится, а именно саму переменную как она есть.

Чтобы выводить на печать так, как вы хотите, нужно сделать функцию-аналог EnumToString(), которая и будет выводить на печать.


В этом то и проблем, что для решения простейшей задачи нужно создавать функцию, а это куча никому не нужного кода,

вместо одной строчки десять...

я же стараюсь быть как можно более кратким!...

изначально я мог обойти эту проблему, добавлением в код всего одной строки

            xx=iClose(Symbol_(i),0,50);
xx=iClose("#CL",0,50);

но такой вариант мне не нравился только из-за того что в коде лишняя строка...

не люблю "грязный" код...

Причина обращения: