Почему Metaquotes подсовывает MT5 вместо MT4? - страница 3

 
Stanislav Korotky:

А какие именно функции из MT4Orders используется - асинхронные (OrderSendAsync, OrderCloseAsync) или нет? Вероятно, в этом проблема.

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

 
Vitaly Muzichenko:

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

Я ж не про внутренности библиотеки спрашивал, а про то, как её использовали, чтобы понять, из-за чего проблемы. В общем, наводку дал.

 
Stanislav Korotky:

Я ж не про внутренности библиотеки спрашивал, а про то, как её использовали, чтобы понять, из-за чего проблемы. В общем, наводку дал.


Проблема не в том как использовать библиотеку.

А в том, что в МТ4 нет совокупной позиции, а есть ордера. И закрытие десятка ордеров даёт тот эффект, какой и показан.

Кстати, в тестере такого эффекта нет. И на демо его нет. А вот на реале есть.

Перенос кода с mql4 на mql5 и обратно "1к1" в данном случае невозможен.

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

Здесь нельзя сказать:

Vitaly Muzichenko:

Единственный большой косяк МТ4 ...

Просто у mql4 одни возможности, у mql5 возможности другие. В данном конкретном случае -- на стороне mql5 преимущество. Но и на mql4 эта задача нормально решается.

 
Andrey F. Zelinsky:

Проблема не в том как использовать библиотеку.

А в том, что в МТ4 нет совокупной позиции, а есть ордера. И закрытие десятка ордеров даёт тот эффект, какой и показан.

Кстати, в тестере такого эффекта нет. И на демо его нет. А вот на реале есть.

Перенос кода с mql4 на mql5 и обратно "1к1" в данном случае невозможен.

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

Здесь нельзя сказать:

Просто у mql4 одни возможности, у mql5 возможности другие. В данном конкретном случае -- на стороне mql5 преимущество. Но и на mql4 эта задача нормально решается.

Что можно ускорить в МТ4?

 if(OT==OP_BUY) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);
   if(!error) Print("Error ",GetLastError());
 }
 if(OT==OP_SELL) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);
   if(!error) Print("Error ",GetLastError());
 }
 
Andrey F. Zelinsky:

Проблема не в том как использовать библиотеку.

А в том, что в МТ4 нет совокупной позиции, а есть ордера. И закрытие десятка ордеров даёт тот эффект, какой и показан.

Правомочно сравнивать МТ4 лишь с хеджинговым счетом МТ5 (в данном случае как раз такая торговая система). И причем тут тогда совокупная позиция? В МТ5 будет точно такая же куча позиций = эквивалентов четверочных ордеров. В общем, опять разговор в сторону от проблемы уводите.

 
Vitaly Muzichenko:

Что можно ускорить в МТ4?

Я ж предложил выше заменить на функции XXXAsync. Не уверен, что поможет, но почему не попробовать?

 
Stanislav Korotky:

Я ж предложил выше заменить на функции XXXAsync. Не уверен, что поможет, но почему не попробовать?

Наверное немного не то. У меня нет проблем в МТ5 с таким кодом, и использованием <MT4Orders>, всё закрывает мгновенно.

Есть проблема в МТ4, но там по понятным причинам и не нужно <MT4Orders>, там самый простой четвёрочный код. На спокойном рынке закрывает хорошо, а вот на быстром сильно скользит, показывал скринами, их у меня более сотни собралось. Иногда скользит и мою пользу, и довольно таки часто, если началось закрытие, и цена двигается дальше. Не знаю с чем связано, но наверное с очерёдностью отправки приказов.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Почему Metaquotes подсовывает MT5 вместо MT4?

Vitaly Muzichenko, 2017.09.23 20:50

Что можно ускорить в МТ4?

 if(OT==OP_BUY) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),slippage,Blue);
   if(!error) Print("Error ",GetLastError());
 }
 if(OT==OP_SELL) {
   error=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),slippage,Red);
   if(!error) Print("Error ",GetLastError());
 }

Как минимум:

  • Отказ от меток ускорит код.
  • Нормализация цены нужна далеко не всегда. Даже если получив цену Ask или Bid печатается больше знаков после запятой, это не значит что нормализация даст какой-то положительный результат.

Нормализация значения цены обязательна только в случаях математических действий с этой ценой. Когда к цене прибавляется или вычитается из неё какое-то значение.

 
Vitaly Muzichenko:

Наверное немного не то. У меня нет проблем в МТ5 с таким кодом, и использованием <MT4Orders>, всё закрывает мгновенно.

Есть проблема в МТ4, но там по понятным причинам и не нужно <MT4Orders>, там самый простой четвёрочный код. На спокойном рынке закрывает хорошо, а вот на быстром сильно скользит, показывал скринами, их у меня более сотни собралось. Иногда скользит и мою пользу, и довольно таки часто, если началось закрытие, и цена двигается дальше. Не знаю с чем связано, но наверное с очерёдностью отправки приказов.

Да, мой косяк - туплю.

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

 
Stanislav Korotky:

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

Такой вариант срабатывает, к сожалению, только по одному символу.


Странно, что за годы в кодобазу MT4 никто так и не выложил асинхронные Order-функции. 

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