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

 
-Aleks-:

 

Понял - спасибо - ошибки почти пропали, осталась одна:

 'OrderCloseBy' - function not defined cPoza13-1.mqh 1885 8

 //+------------------------------------------------------------------------------------------------------------------------------------+
//| Возвращает TRUE, если один ордер закрылся другим
//+------------------------------------------------------------------------------------------------------------------------------------+
bool cPoza::closeBy(int ticketB, int ticketA)
{
  if(ticketB > 0 && ticketA > 0)
  {
    if(OrderCloseBy(ticketB, ticketA)) return true;
    else Print("Magic=", mMagic, " ",__FUNCTION__, " Встречное закрытие не вышло ticketB=", ticketB, " ticketA=", ticketA, " вызвало ошибку-", _LastError);
  }
  else return false;
 
  return false;
}

// Что не реализовано:
//   CloseBy-моменты - пока было не до этого. Возможно, в будущем, когда понадобится.
//   Определение TP и SL закрытых позиций - на данный момент (build 1368) MQL5 этого делать не умеет.

Библиотеку писал для себя, а CloseBy не использую. Поэтому не реализовал. Возможно, с ускорением добавлю и это.

Как временное решение, добавьте перед включением своей библиотеки эти строки

#ifdef __MQL5__
  bool OrderCloseBy( const int Ticket, const int Opposite, const color Arrow_Color = clrNONE )
  {
    return(false);
  }  
#endif
 
fxsaber:

Возможно, конечно. Не видел необходимости.

Видимо, надо все же сделать.

Ещё активно работать с историей приходиться при строении сеточников с усреднениями, дело в том, что ДЦ ограничивает максимальное количество ордеров, а если на счете 15-20 советников с сетками, то решением видится сворачивания части сеток в момент приближения к ограничению по ордерам, соответственно приходится в истории копаться для понимания реального финансового результата позиции.

 
fxsaber:
// Что не реализовано:
//   CloseBy-моменты - пока было не до этого. Возможно, в будущем, когда понадобится.
//   Определение TP и SL закрытых позиций - на данный момент (build 1368) MQL5 этого делать не умеет.
Библиотеку писал для себя, а CloseBy не использую. Поэтому не реализовал. Возможно, с ускорением добавлю и это.

 Очень было бы хорошо, спасибо. CloseBy  - удобная штука для фиксации части позиции в расчетной точке.

 
-Aleks-:

Ещё активно работать с историей приходиться при строении сеточников с усреднениями, дело в том, что ДЦ ограничивает максимальное количество ордеров, а если на счете 15-20 советников с сетками, то решением видится сворачивания части сеток в момент приближения к ограничению по ордерам, соответственно приходится в истории копаться для понимания реального финансового результата позиции.

CloseBy и ускорение истории добавлю в следующем билде. Мне только не понятно, это востребовано (библиотеку используют) или носит рекомендательный характер на всякий случай.
 
fxsaber:
// Что не реализовано:
//   CloseBy-моменты - пока было не до этого. Возможно, в будущем, когда понадобится.
//   Определение TP и SL закрытых позиций - на данный момент (build 1368) MQL5 этого делать не умеет.

Библиотеку писал для себя, а CloseBy не использую. Поэтому не реализовал. Возможно, с ускорением добавлю и это.

Как временное решение, добавьте перед включением своей библиотеки эти строки

#ifdef __MQL5__
  bool OrderCloseBy( const int Ticket, const int Opposite, const color Arrow_Color = clrNONE )
  {
    return(false);
  }  
#endif

 

Спасибо - компиляция прошла успешно в части работы с ордерами! Теперь буду разгребать остальные ошибки - вызванные несовместимостью языков...

 
fxsaber:
CloseBy и ускорение истории добавлю в следующем билде. Мне только не понятно, это востребовано (библиотеку используют) или носит рекомендательный характер на всякий случай.

 

Я использую, есть очень интересные результаты, но пока не использовал её (функцию) на реальном счете - скоро.


 
fxsaber:
Будет работать! На бирже все делаю через MT4Orders. При этом не ограничиваю себя количеством открытых поз.
А вот с историей работать на бирже через MT4Orders не рекомендую. Т.е. MODE_TRADE - без проблем, MODE_HISTORY - не надо на БИРЖЕ.
 

на бирже не может выставить стоп-лосс, а сделки открывет

2016.11.07 10:41:20.468 Trades  '4974': failed modify  buy 0.00  sl: 0.00000, tp: 0.00000 -> sl: 10407.00000, tp: 0.00000 [Invalid request]

А по моему в либе у вас и не прописано это для модификации

if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
      Request.type_filling = ORDER_FILLING_RETURN;

Я так понимаю вот сюда это нужно добавить:

static bool MT4OrderModify( const int Ticket, const double Price, const double SL, const double TP, const datetime Expiration, const color Arrow_Color = clrNONE )
  {
    MqlTradeRequest Request = {0};

               // Учитывается случай, когда присутствуют ордер и позиция с одним и тем же тикетом
    bool Res = ((Ticket != MT4ORDERS::Order.Ticket) || (MT4ORDERS::Order.Ticket <= OP_SELL)) ?
               (MT4ORDERS::ModifyPosition(Ticket, Request) ? true : MT4ORDERS::ModifyOrder(Ticket, Price, Expiration, Request)) :
               (MT4ORDERS::ModifyOrder(Ticket, Price, Expiration, Request) ? true : MT4ORDERS::ModifyPosition(Ticket, Request));

    if (Res)
    {
      Request.tp = TP;
      Request.sl = SL;
      if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
      Request.type_filling = ORDER_FILLING_RETURN;

      
      Res = MT4ORDERS::NewOrderSend(Request);
    }

    return(Res);
  }
все равно не работает
 
Maxim Dmitrievsky:

на бирже не может выставить стоп-лосс, а сделки открывет

2016.11.07 10:41:20.468 Trades  '4974': failed modify  buy 0.00  sl: 0.00000, tp: 0.00000 -> sl: 10407.00000, tp: 0.00000 [Invalid request]

На самом деле это почти баг разработчиков. Добавьте эту строку

  static bool ModifyPosition( const int Ticket, MqlTradeRequest &Request )
  {
    const bool Res = ::PositionSelectByTicket(Ticket);

    if (Res)
    {
      Request.action = TRADE_ACTION_SLTP;
      
      Request.position = Ticket;
      Request.symbol = ::PositionGetString(POSITION_SYMBOL); // указания одного тикета не достаточно!
    }

    return(Res);
  }

 

А по моему в либе у вас и не прописано это для модификации 

С этим там все правильно.
 
fxsaber:

На самом деле это почти баг разработчиков. Добавьте эту строку

  static bool ModifyPosition( const int Ticket, MqlTradeRequest &Request )
  {
    const bool Res = ::PositionSelectByTicket(Ticket);

    if (Res)
    {
      Request.action = TRADE_ACTION_SLTP;
      
      Request.position = Ticket;
      Request.symbol = ::PositionGetString(POSITION_SYMBOL); // указания одного тикета не достаточно!
    }

    return(Res);
  }

 

С этим там все правильно.
Да, так работает, спасибо.. ну и беребор ордеров тормозит, да... а больше пока багов не заметил.. Хорошая либа, на самом деле, есть смысл ускорить перебор ордеров, мне кажется
Причина обращения: