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

[Удален]
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);

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

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

Други. Общими, нашими усилиями я всё-таки написал алгоритм советника который задумал, 
за что Вам огромное спасибо. Можно сказать всем миром писали)
Всё работает, результаты соответствуют ожидаемым можно двигаться дальше.
---
Вопрос по тестированию в режиме OHLC М1.
Реально ли запрограммировать советник так, что бы результаты тестов на "OHLC М1" были приближены к тестам "все тики"?
Я перерыл весь форум, есть вполне понятные объяснения, почему режим OHLC М1 с генерацией по 4-ём опорным точкам не совпадает
с по-тиковыми режимами. 

Но я не нашёл не одной рекомендации, примеров как запрограммировать это условие, на схожесть к OHLC М1, и возможно ли это вообще?

Режим OHLC М1, мне нравится исключительно из-за скорости расчётов.
Специфика советника. (если это вдруг важно)
Устанавливает стоп-ордера с фиксированным SL и TP, многократно модифицирует ордера на новые уровни цен в ожидании срабатывания.
Индикаторов нет. только счётчики цен. 
Если вдруг, невозможно качественно смоделировать режим "OHLC М1", то быть может, лучше взять за основу режим "По ценам открытия"?
В итоге, мне хотелось бы понять, какой режим целесообразно использовать, что бы и вычисления шли быстро и 
расхождения между режимом "все-тики" был минимальным. 

Пока что получил вот такое расхождение на однотипных наладках.

 "OHLC М1" ; 8 лет; 1681 трейдов. (изначально наладку делал на этот метод)

OHLC М1

"По ценам открытия"; 8 лет; 1655 тредов.

Только цены открытия

"Все тики" 8 лет; 1676 трейдов.

все тики

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

но пропадёт универсальность и появится избыточная подгонка. 




vladzeit:


Вкратце, как пример, если у вас TP buy позиций поставлена 1.16000, то "все тики" примерно по этой цене закроет. OHLC закроет по той цене что было выше 1.16000 это и может быть довольно большая разница, так всегда OHLC будет показывать лучше результаты. Та же самая история с "По ценам открытия".