Bibliotecas: MT4Orders - página 5

 
-Aleks-:

Consegui - obrigado - os erros quase desapareceram, mas ainda resta um:

'OrderCloseBy' - função não definida 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;
}

// O que não é realizado:
// Momentos CloseBy - ainda não tive tempo de fazer isso. Talvez no futuro, quando necessário.
// Determinar TP e SL de posições fechadas - atualmente (build 1368) a MQL5 não sabe como fazer isso.

Eu escrevi a biblioteca para mim e não uso CloseBy. É por isso que não a implementei. Talvez eu o adicione com rapidez.

Como uma solução temporária, adicione estas linhas antes de incluir sua biblioteca

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

É possível, é claro. Eu não vi a necessidade.

Aparentemente, isso deve ser feito.

Também tenho que trabalhar ativamente com o histórico ao criar grades com média, o fato é que o DC limita o número máximo de ordens, e se a conta tiver 15-20 Expert Advisors com grades, a solução é minimizar algumas das grades no momento em que se aproxima o limite de ordens, respectivamente, temos que vasculhar o histórico para entender o resultado financeiro real da posição.

 
fxsaber:
// O que não é realizado:
// Momentos CloseBy - ainda não tive tempo de fazer isso. Talvez no futuro, quando necessário.
// Determinar TP e SL de posições fechadas - atualmente (build 1368) a MQL5 não sabe como fazer isso.
Eu escrevi a biblioteca para mim e não uso o CloseBy. É por isso que não o implementei. Talvez com a aceleração eu adicione isso também.

Seria muito bom, obrigado. O CloseBy é útil para fixar uma parte de uma posição em um ponto calculado.

 
-Aleks-:

Também precisamos trabalhar ativamente com o histórico ao criar grades com cálculo de média. O fato é que o DC limita o número máximo de ordens e, se a conta tiver de 15 a 20 Expert Advisors com grades, a solução é vista como o colapso de parte das grades no momento em que o limite de ordens se aproxima, respectivamente, temos que nos aprofundar no histórico para entender o resultado financeiro real da posição.

Adicionarei CloseBy e aceleração do histórico na próxima compilação. Só não entendo se isso está sendo exigido (a biblioteca é usada) ou se é uma recomendação por precaução.
 
fxsaber:
// O que não é realizado:
// Momentos CloseBy - ainda não tive tempo de fazer isso. Talvez no futuro, quando necessário.
// Determinar TP e SL de posições fechadas - atualmente (build 1368) a MQL5 não sabe como fazer isso.

Eu escrevi a biblioteca para mim e não uso o CloseBy. É por isso que não o implementei. Talvez eu o adicione assim que estiver pronto.

Como uma solução temporária, adicione estas linhas antes de ativar sua biblioteca

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

Obrigado - a compilação foi bem-sucedida na parte de trabalho com pedidos! Agora vou resolver o restante dos erros, causados por incompatibilidade de idioma...

 
fxsaber:
Adicionarei CloseBy e aceleração de histórico na próxima compilação. Só não entendo se isso está sendo solicitado (a biblioteca é usada) ou se é apenas uma recomendação.

Eu a utilizo, há resultados muito interessantes, mas ainda não a utilizei (a função) em uma conta real - em breve.


 
fxsaber:
Vai funcionar! Eu faço tudo no mercado de ações por meio do MT4Orders. Não me limito ao número de posições abertas.
Mas não recomendo trabalhar com histórico na bolsa de valores por meio do MT4Orders. Ou seja, MODE_TRADE - sem problemas, MODE_HISTORY - sem necessidade na bolsa.
[Excluído]  

não é possível definir um stop-loss na bolsa de valores, mas ele abre negociações.

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]

E, em minha opinião, você não tem isso na biblioteca para modificação.

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

Entendo que você precisa adicioná-la aqui:

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};

               // O caso em que uma ordem e uma posição com o mesmo tíquete estão presentes é levado em consideração
    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);
  }
ainda não funciona.
 
Maxim Dmitrievsky:

ele não pode definir um stop-loss na bolsa de valores, mas abre negociações.

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]

Na verdade, isso é quase um bug dos desenvolvedores. Adicione esta linha

  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); // especificar um tíquete não é suficiente!
    }

    return(Res);
  }

E, em minha opinião, na lib você não a especifica para modificação.

Está tudo bem aqui.
[Excluído]  
fxsaber:

De fato, é quase um bug de desenvolvedor. Adicione esta linha

  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); // especificar um tíquete não é suficiente!
    }

    return(Res);
  }

Tudo está correto aqui.
Sim, funciona assim, obrigado... e a separação de pedidos está ficando mais lenta, sim... mas não notei nenhum outro bug até agora.... É uma boa biblioteca, na verdade, faz sentido acelerar a coleta de pedidos, eu acho.