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

 
fxsaber :

.


no function name

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

 
noChangepromise:

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

Такая проблема впервые озвучена. Попробуйте скачать сам файл, а не делать copy-paste.

 
noChangepromise:

Не могли бы вы привести пример, как конвертировать iMA () или iCustom ()

Не занимаюсь конвертацией.

 
// Список изменений:
// 02.11.2019
//   Fix: Скорректированы лот, комиссия и цена закрытия для CloseBy-позиций.


В MT4 довольно просто посчитать среднее значение проторгованных лотов и заплаченной за это комиссии.

void OnStart()
{
  double AvgLots = 0;       // Средний лот закрытой позиции.
  double AvgCommission = 0; // Средняя комиссия на закрытую позицию.
  
  int AmountPositions = 0;  // Количество закрытых позиций.
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL) && OrderLots())
    {
      AvgLots += OrderLots();
      AvgCommission += OrderCommission();
      
      AmountPositions++;
    }
    
  if (AmountPositions)
  {
    AvgLots /= AmountPositions;
    AvgCommission /= AmountPositions;
  }
}

Выделенный кусок отвечает за игнорирование закрытых позиций по CloseBy. Т.к. они не проторговываются и фактически являются фейками.

Оказалось, что такой простой код (другие примеры не привожу) не работал корректно в MT5 со старой версией библиотеки. Сейчас все отлично.


ЗЫ Первый раз нашел применение свойству ORDER_POSITION_BY_ID.

 
fxsaber:

Выделенная ссылка - нерешенная проблема. Если у кого-нибудь есть мысли по обходу, дайте знать.

Костыльный обход.

bool IsSynchronized( void )
{
  static ulong Orders[];
  
  bool Res = true;
  
  for (int i = ArraySize(Orders) - 1; (i >= 0) && Res; i--)
    if (Orders[i])
      Res = OrderSelect(Orders[i]) || HistoryOrderSelect(Orders[i]);
    
  if (Res)
    for (int i = ArrayResize(Orders, OrdersTotal()) - 1; i >= 0; i--)      
      Orders[i] = OrderGetTicket(i);
      
  return(Res);  
}

#include <MT4Orders.mqh>

void OnTick()
{
  if (!IsSynchronized())
  {
    Alert("Hello World!");
    
    return;
  }
  
  // ....
}
 

Было бы очень желательно указать как минимум в шапке комменатриев исходника, что MT4ORDERS_FASTHISTORY_OFF не только ускоряет работу с массивами истории, но и сказывается на полноте функциональной поддержки, в частности без этой опции оказывается нельзя выделить через OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY) ранее открытый и закрытый рыночный ордер, т.к. передаваемый тикет принадлежит входной сделке (что отбрасывается в IsMT4Deal), а поиск соответствующего выхода как раз обложен условной компиляцией на MT4ORDERS_FASTHISTORY_OFF (в GetPositionDealOut).

 
Stanislav Korotky:

Было бы очень желательно указать как минимум в шапке комменатриев исходника, что MT4ORDERS_FASTHISTORY_OFF не только ускоряет работу с массивами истории, но и сказывается на полноте функциональной поддержки, в частности без этой опции оказывается нельзя выделить через OrderSelect(ticket, SELECT_BY_TICKET, MODE_HISTORY) ранее открытый и закрытый рыночный ордер, т.к. передаваемый тикет принадлежит входной сделке (что отбрасывается в IsMT4Deal), а поиск соответствующего выхода как раз обложен условной компиляцией на MT4ORDERS_FASTHISTORY_OFF (в GetPositionDealOut).

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

 
fxsaber:

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

Не люблю мохнатые зависимости, если они не влияют на функционал, потому отключал. ;-) Если б было сказано, что кое-какие фичи не работают, разумеется оставил бы.

 
Stanislav Korotky:

Не люблю мохнатые зависимости, если они не влияют на функционал, потому отключал. ;-) Если б было сказано, что кое-какие фичи не работают, разумеется оставил бы.

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