Ordem Pendente: porque não funciona?

josemanoel  

Olá meninos

Poderiam informar por que o código abaixo não abre uma ordem pendente?


void buyOrder1()

{
 MqlTradeCheckResult m_check_result;
 MqlTradeResult mresult;             // To be used to get our trade results
 MqlTradeRequest mrequest={0};       // To be used for sending our trade requests
 price=SymbolInfoDouble ( Symbol (), SYMBOL_ASK );
 price = NormalizeDouble((price+.0001),_Digits); 
 STP=(StopLoss* 0.00001) ;                  // *_Point,_Digits
 STP = price-(StopLoss* 0.00001) ;           // *_Point,_Digits
 TKP= price+(TakeProfit* 0.00001) ;           // *_Point,_Digits
 mrequest.sl = STP;              // Stop Loss em 
 mrequest.tp = TKP;              // Take Profit em 
 mrequest.action = TRADE_ACTION_PENDING;     // immediate order execution
 mrequest.price = price;         // latest ask price + .0001
 mrequest.symbol = _Symbol;                                            // currency pair
 mrequest.volume = lot1;                                                 // number of lots to trade
 mrequest.magic = EA_Magic;                                             // Order Magic Number
 mrequest.type = ORDER_TYPE_BUY;    // sell Order
 mrequest.type_filling = ORDER_TYPE_BUY_STOP_LIMIT; // Order execution type
 mrequest.deviation=100;                                                // Deviation from current price
 //--- send order
 OrderSend(mrequest,mresult); // abre COMPRA

}
Rogerio Figurelli  

Olá Jose Manoel,

Antes de mais nada, quando publicares um código, por gentileza utilize o botão SRC para inserir esse código (já corrigi o seu post com esse procedimento).

Minha sugestão, já visando corrigir seu código e facilitar a sua depuração dos próximos problemas, é você fazer o tratamento do retorno da função OrderSend().

Nesse caso, busque indentificar através dos códigos de retorno (ver https://www.mql5.com/pt/docs/constants/errorswarnings/enum_trade_return_codes) e também pela função GetLastError() (ver https://www.mql5.com/pt/docs/constants/errorswarnings/errorcodes) os erros em tempo de execução.

Outro ponto que sugiro é analisares a função OrderCheck(), utilizando ela antes da chamada de OrderSend() para verificar o status de sua ordem antes do real envio para o mercado. 

Provavelmente fazendo isso irás identificar o problema, senão no mínimo trazer os erros encontrados aqui para ajuda na análise.

Lembro entretanto que, na hipótese de não fazeres nada disso, os riscos assumidos serão muito grandes no momento que estiveres operando no mercado. 

Com os melhores cumprimentos,

Rogério Figurelli 

Documentação sobre MQL5: Constantes Padrão, Enumeradores e Estruturas / Códigos de Erros e Avisos / Códigos de Retorno do Servidor de Negociação
Documentação sobre MQL5: Constantes Padrão, Enumeradores e Estruturas / Códigos de Erros e Avisos / Códigos de Retorno do Servidor de Negociação
  • www.mql5.com
Constantes Padrão, Enumeradores e Estruturas / Códigos de Erros e Avisos / Códigos de Retorno do Servidor de Negociação - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5