Como programar Pending Orders para o mini-dólar - página 2

 

Meus amigos, boa noite! 

 Estou começando com o meta trader e estou tendo o mesmo problema com mini dolar. 

Heeeeeelp!!!!! 

 

Prezados,

Poderiam notar a corretora o qual estão utilizando. Em um teste recente, com corretoras Rico e Modal, noto diferenças com o código o qual fiz.

Abaixo segue estrutura o qual funcionou perfeitamente na Modal, onde eu enfrentava os problemas semelhantes aos citados nos tópicos. Vejam se funciona com vcs:

 //--- preparar um pedido -------------COMPRA ACIMA DO PREÇO ATUAL EM 2 PONTOS --------------------------------------

   Compra=SymbolInfoDouble(Symbol(),SYMBOL_ASK)+2;
   MqlTradeRequest request={0};
   request.action=TRADE_ACTION_PENDING;         // definição de uma ordem pendente
   request.magic=1234;                  // ORDER_MAGIC
   request.symbol=_Symbol;                      // símbolo
   request.volume=1;                          // volume em lotes
   request.sl=Compra-Loss;                               // Stop Loss (Parar Perda) 
   request.tp=Compra+Profit;                                // Take Profit (Tomar Lucro)
   request.type_filling=ORDER_FILLING_RETURN;
//--- formar o tipo de ordem
   request.type=ORDER_TYPE_BUY_STOP;                // tipo de ordem
   request.type_time=ORDER_TIME_DAY;
//--- formar o preço para uma ordem pendente
   request.price=Compra;  // preço de abertura
//--- enviar um pedido de negociação 
   MqlTradeResult result={0};
   OrderSend(request,result); // ENVIO DA ORDEM
//--- escrever resposta do servido para log  
   Print(__FUNCTION__,":",result.comment);
   if(result.retcode==10016) Print(result.bid,result.ask,result.price);

 

Prezados, o mini indice e o mini dolar não possuem casa decimal, então para enviar ordens precisam alterar a declaração da variável do preço de entrada e stops para int.

aqui os testes estão funcionando assim:

   MqlTradeRequest request;

   MqlTradeResult result;

   ZeroMemory(request);

   ZeroMemory(result);


   request.symbol       = Symbol();

   request.volume       = LotC;

   request.stoplimit    = 0;

   request.sl           = 0;

   request.tp           = tkp;

   request.type_filling = ORDER_FILLING_RETURN;

   request.type_time    = ORDER_TIME_DAY;

   request.expiration = ORDER_TIME_DAY;

   request.action=TRADE_ACTION_PENDING; 

   request.type=ORDER_TYPE_BUY_STOP;

   request.price=precoromp;



   OrderSend(request, result);         // Send order

 

Comigo funcionou assim. 


//-- declaração e inicialização do pedido e o seu resultado
   MqlTradeRequest request={0};
   MqlTradeResult  result={0};
//--- parâmetros para colocação da ordem pendente
   request.action   =TRADE_ACTION_PENDING;                             // tipo de operação de negociação
   request.symbol   =_Symbol;                                         // símbolo
   request.volume   =inp_volume;                                              // volume de 0.1 lotes
   request.deviation=2;                                                //desvio permitido do preço
   request.magic    =EXPERT_MAGIC;                                     // MagicNumber da ordem
   request.type     =ORDER_TYPE_BUY_LIMIT;                          // tipo de ordem
   request.type_time=ORDER_TIME_DAY;
   request.price    = preco_compra;                 // нормализованная цена открытия 
   request.sl       = stop_compra;
   request.tp       = take_compra;
   request.type_filling = ORDER_FILLING_RETURN;
//--- enviar a ordem
   if(!OrderSend(request,result))
      PrintFormat("OrderSend error %d",GetLastError());  // Se não for possível enviar o pedido, exibir um código de erro
//--- informações sobre a operação
   PrintFormat("retcode=%u  deal=%I64u  order=%I64u",result.retcode,result.deal,result.order);