Бета-тестирование MetaTrader 5 началось! - страница 155

 
Rosh писал(а) >>

Странно, попробуйте скомпилировать мой файл. Там тоже самое, но компилируется.

Компилируется. Моя ошибка была в том, что я код помещал внутрь функции OnStart().

 
запутался насчет "запрещенных локов в МТ5" я так понимаю позиция по каждому инструменту ОДНА, а ордеров на инструменте может быть больше одного и БАй и Селл.....я правильно понял?  И каждым ОРДЕРОМ можно управлять отдельно, так?
 
RocketTrend >>:
И каждым ОРДЕРОМ можно управлять отдельно, так?

Ну дык попробуй!

мт5 доступен всем...

;)

Результат управления каждым ордером просим здесь отписать.

 

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

При попытке немедленно войти в рынок, устанавливается ордер по текущей цене, который тут же исполняется и образуется позиция (или осуществляется добавление к существующей позиции, частичное или полное закрытие, переворот). Момент исполения ордера и превращения его в позицию называется "сделкой".

При добавлении позиции (срабатывании ордера в том же направлении, что и открытая позиция) объемы суммируются, а цена открытия позиции изменяется, она будет равна (p1*v1+p2*v2)/(v1+v2), где p1 и p2 - цены открытия "старой" позиции и исполнения ордера, v1 и v2 - их объемы. В частном случае, когда объемы равны - происходит "усреднение".

При частичном закрытии цена позиции не меняется, а закрытие части объема отображается на депозите в виде прибыли или убытка.

При "перевороте" позиция закрывается, по ее результату происходит изменение депозита, по этой же цене происходит открытие новой позиции в противоположном направлении.

Хочу отметить, что при "добавлении" позиции, ее комментарий и Magic number (номер, который позволяет при автоматической торговле отличать эту позицию от других) будут соответствовать комментарию и Magic number-у последнего ордера, которым производится "добавление". При частичном закрытии позиции комментарий и Magic number остаются теми, которые и были у позиции ранее.



Ошибки в справочнике MQL5:

  • в двух местах встречается фраза "(смотри ORDER_EXPERT)" (Справочник MQL5 / Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций и Справочник MQL5 / Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок). Само описание "ORDER_EXPERT", на которое ссылаются, отсутствует.
  • в раздере Справочник MQL5 / Программы MQL5 / Выполнение программ перед примером есть строка "Значение типа double.", к чему она относится - неизвестно, вероятно, случайно попала.
  • в раздере Справочник MQL5 / Строковые функции / StringInit строка "[in] Длина строки после инициализации. Если размер=0, то деинициализирует строку, то есть, буфер строки освобождается и адрес буфер обнуляется.".

 
zdd >>:

Хочу отметить, что при "добавлении" позиции, ее комментарий и Magic number (номер, который позволяет при автоматической торговле отличать эту позицию от других) будут соответствовать комментарию и Magic number-у последнего ордера, которым производится "добавление". При частичном закрытии позиции комментарий и Magic number остаются теми, которые и были у позиции ранее.


Что полностью сводит на нет смысл магика для позиции...

А "итентифицировать" можно элементарно по названию инструмента.


В этом плане считаю более полезным это предложение.

 
zdd >>:

Ошибки в справочнике MQL5:

  • в двух местах встречается фраза "(смотри ORDER_EXPERT)" (Справочник MQL5 / Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций и Справочник MQL5 / Стандартные константы, перечисления и структуры / Торговые константы / Свойства сделок). Само описание "ORDER_EXPERT", на которое ссылаются, отсутствует.
Спасибо, заменили ORDER_EXPERT => ORDER_MAGIC и добавили ссылки, чтобы не искать.
 
zdd >>:анты / Свойства сделок). Само описание "ORDER_EXPERT", на которое ссылаются, отсутствует.
  • в раздере Справочник MQL5 / Программы MQL5 / Выполнение программ перед примером есть строка "Значение типа double.", к чему она относится - неизвестно, вероятно, случайно попала.

Спасибо, удалил.

 
zdd >>:
  • в раздере Справочник MQL5 / Строковые функции / StringInit строка "[in] Длина строки после инициализации. Если размер=0, то деинициализирует строку, то есть, буфер строки освобождается и адрес буфер обнуляется.".

Это тоже поправим, скорей всего "адрес буфера обнуляется"

 

очень волнующий вопрос, будет ли ограничения тестируемых параметров в тестере MT5?

в МТ4 приходилось иметь дела с экспертами у которых не 5-8 параметров а 50-70 и больше.

в таких случаях полноценно оптимизировать систему не получалось, выход - это пересчитать варианты в отдельный файл и перебрать в тестере или написать альтернативный тестер)


надеюсь в МТ5 такой возни как ограничения параметров оптимизации не будет?

 

Наблюдения:

Если в теле функции OnCalculate() пользовательского индикатора поместить код:

   for(i=prev_calculated;i<rates_total;i++)
     {
      ind_buff[i]=SymbolInfoDouble(Symbol(),SYMBOL_BIDHIGH);
     }

то, после запуска такого индикатора, график, на котором он был запущен, больше не обновляется (последняя цена не менятеся при поступлении новых котировок), новые индикаторы не отображаются (включая встроенные). Это продолжается даже после удаления пользовательского индикатора с графика. Для возобновления нормальной работы терминала необходима его перезагрузка.

Если обращаться к функции SymbolInfoDouble(Symbol(),SYMBOL_BIDHIGH) один раз, а в цикле использовать переменную - работает нормально:

   double d=SymbolInfoDouble(Symbol(),SYMBOL_BIDHIGH);

   for(i=prev_calculated;i<rates_total;i++)
     {
      ind_buff[i]=d;
     }

Вместо SYMBOL_BIDHIGH может быть SYMBOL_BIDLOW, либо другие подобные перечисления свойств инструментов.

При вызове функции SymbolInfoDouble(Sybmol(),SYMBOL_BIDHIGH) 10 000 раз и менее - работает нормально, а 50 000 раз и более - приводит к вышеуказанным последствиям. График, на котором запускается индикатор имеет более 50 000 баров исторических данных.

Массив буфера индикатора ind_buff[] - не таймсерия (более ранние данные имеют меньший индекс), хотя, на мой взгляд, это не важно.

(см.прикрепленный файл)


Также, интересно отметить, что не работает задание цвета в виде:

#property indicator_color1  0x7FFFFF

хотя работает

#property indicator_color1  C'127,255,255'

(см.прикрепленный файл).



Пожелания:

  • Если на ценовом графике на одном и том же уровне оказывается цена открытия одного ордера и уровень StopLoss/TakeProfit другого, отображать как цену открытия.
  • Размер отступа нулевого бара от правого края графика (CHART_SHIFT_SIZE) сделать 0 - 100%, вместо 10 - 50% (и сохранять в шаблоне, как в MetaTrader4).



Ошибки в справочнике MQL5:

  • в разделе Справочник MQL5 / Пользовательские индикаторы ссылка "IndicatorSetDouble" указывает на страницу "SetIndexBuffer".
  • в разделе Справочник MQL5 / Пользовательские индикаторы в строке "PlotIndexSetString - Задает значение свойства линии индикатора, имеющего тип int" должно быть "... имеющего тип string".
  • в разделе Справочник MQL5 / Доступ к таймсериям и индикаторам / IndicatorRelease в примере в строке 22:
MA_handle=iMA(Symbol(),0,MA_Period,MA_shift,MA_smooth,PRICE_CLOSE);

наверное, автор примера имел ввиду

MA_handle=iMA(Symbol(),0,MA_Period,MA_shift,MA_smooth,price);

раз он запрашивает у пользователя значение переменной price. Хотя, оба варианта верны.

Файлы:
proba01.mq5  1 kb
Причина обращения: