Библиотеки: MT4Orders - страница 13

 

Когда OrderSend был не синхронизирован с торговым окружением терминала, в MT4Orders была встроена автоматическая синхронизация.

Через некоторое время разработчики встроили синхронизацию и в библиотеке старый код синхронизации был оставлен с небольшим исключением - он стал не только синхронизировать, но и  проверять, правильно ли работает синхронизация OrderSend от разработчиков. В случае ошибки, должен выскакивать алерт

    if (MT4ORDERS::OrderSendBug)
    {
      Alert("BUG!!!!!!");


Появились сообщения, что этот Alert в редких случаях (похоже, когда ЦП загружен) срабатывает, сигнализируя о том, что OrderSend разработчиков бажит в вопросах синхронизации с торговым окружением. Как сообщить об этом разработчиком в СД - не знаю, т.к. воспроизвести не могу. Но факт остается фактом.


Поэтому есть два варианта.

  1. Оставить, как есть - алерт будет рапортовать о баге разработчиков.
  2. Отказаться от Алерта.
В обоих случаях библиотека принудительно синхронизирует OrderSend за мин. время.
 
// Список изменений:
// 03.08.2016:
//   Релиз - писался и проверялся только на оффлайн-тестере.
// ....
// 03.08.2017:
//   Add: Добавлена OrderCloseBy.
//   Add: Ускорена работа OrderSelect в MODE_TRADES-режиме. Теперь есть возможность получать данные выбранного ордера через
//        соответствующие MT4-Order-функции, даже если MT5-позиция/ордер(не в истории) выбраны не через MT4Orders.
//        Например, через MT5-PositionSelect*-функции или MT5-OrderSelect.
//   Add: Добавлены OrderOpenPriceRequest() и OrderClosePriceRequest() - возращают цену торгового запроса при открытии/закрытии позиции.
//        С помощью данных функций возможно вычислять соответствующие проскальзывания ордеров.

Библиотеке год...

 
fxsaber:

Библиотеке год...

Мои поздравления! Замечательная обертка.

 
fxsaber:

Библиотеке год...


Поздравляю!

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

Про второй вариант сложно сказать в чем причина, может и не из-за класса - там полу автомат - торговля на пробой уровня - уровни строятся руками.

 

Спасибо за поздравления, благодарен всем за замечания! Они всегда учитываются.

Aleksey Vyazmikin:

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

Хотелось бы увидеть код. Можно в ЛС.

 
fxsaber:

Спасибо за поздравления, благодарен всем за замечания! Они всегда учитываются.

Хотелось бы увидеть код. Можно в ЛС.


Выслал код в ЛС.

 
Aleksey Vyazmikin:

Выслал код в ЛС.

К сожалению, изначально библиотека совершенно не отвечала за все переводы MT4->MT5, где используются не только торговые функции MQL4.

В Вашем случае медленная работа советника вызвана не данной библиотекой, а частной реализацией перевода MT4->MT5, затрагивающей работу с таймсериями, индикаторами и т.д.

 
fxsaber:

К сожалению, изначально библиотека совершенно не отвечала за все переводы MT4->MT5, где используются не только торговые функции MQL4.


А сейчас отвечает?

fxsaber:

В Вашем случае медленная работа советника вызвана не данной библиотекой, а частной реализацией перевода MT4->MT5, затрагивающей работу с таймсериями, индикаторами и т.д.

Частной - это моей или другой библиотеки?  

Всё делал согласно известной всем статье, да и особых там индикаторов то нет...

Сомневаюсь, что этот код может приводить к сверх загрузке ядра:

double iMAMQL4(string symbol,
               int tf,
               int period,
               int ma_shift,
               int method,
               int price,
               int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   ENUM_MA_METHOD ma_method=MethodMigrate(method);
   ENUM_APPLIED_PRICE applied_price=PriceMigrate(price);
   int handle=iMA(symbol,timeframe,period,ma_shift,
                  ma_method,applied_price);
   if(handle<0)
     {
      Print("Объект iMA не создан: Ошибка ",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,0,shift));
  }

Или в нём причина?

 
Aleksey Vyazmikin:

А сейчас отвечает?

Частной - это моей или другой библиотеки?  

Всё делал согласно известной всем статье, да и особых там индикаторов то нет...

Сомневаюсь, что этот код может приводить к сверх загрузке ядра:

Или в нём причина?

Индикатор нужно захадуливать в ините, у вас же он это делает на каждом тике, это совершенно не правильно

int handle=iMA(symbol,timeframe,period,ma_shift,
                  ma_method,applied_price);
 
Aleksey Vyazmikin:

А сейчас отвечает?

Конечно, нет! В шапке об этом четко написано

// Данная работа затрагивает ТОЛЬКО ордерную систему.

Частной - это моей или другой библиотеки?  

Всё делал согласно известной всем статье, да и особых там индикаторов то нет...

Сомневаюсь, что этот код может приводить к сверх загрузке ядра:

Или в нём причина?

К сожалению, мне не хватает компетенции, чтобы ответить точно на эти вопросы. Индикаторы в советниках никогда не использовал, от слова СОВСЕМ.

Попробуйте спросить в соответствующих ветках об эффективности Вашего решения под MT5.

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