ORDER_TYPE_BUY_STOP - [Invalide Price] error

 

Estou tentando enviar uma orem de Buy Stop, mas só retorna erro de [Invalid Price]. O preço do mercado está a 1.24797 e o preço da ordem de Buy Stop que quero colocar é a 1.24867, ou seja, de fato acima do preço de mercado.

Poderiam me ajudar a resolver este erro?


         Print("Stop Buy: " + (OPLAST + StopGain));

         Print("Normalized Stop Buy: "+ NormalizeDouble((OPLAST + StopGain),_Digits)); 

         Print("Ask: "+ Ask);

         //Envia ordem de Buy Stop. O preço do mercado esta a 1.24797 e o preco do Buy Stop que quero colocar eh a 1.24867, ou seja, de fato acima do preco de mercado.

         request.action = TRADE_ACTION_PENDING;

         request.type = ORDER_TYPE_BUY_STOP;          //ordem de buy stop

         request.symbol = _Symbol;

         request.volume = 2;

         request.type_filling = ORDER_FILLING_RETURN;    //compra e deixa o resto aberto

         request.price = NormalizeDouble((OPLAST + StopGain),_Digits);  //O preco da ordem de buy stop a 1.24867

         request.deviation = 5;                        // desvio permitido do preço

         OrderSend(request,result);                      //envio da ordem



 
fukudahs:


Bom dia,

verifique se preço da ordem obedece ao nível de stops.


 SYMBOL_TRADE_STOPS_LEVEL:
Mínima distância em pontos a partir do preço de fechamento atual para colocar ordens de Stop


 

O Stop Level é 1. Eu dei um print com esse código do Stop Level, que retornou 1. Colocando o valor de Stop Buy acima ou abaixo deste número, continua dando erro.

Print("SYMBOL_TRADE_STOPS_LEVEL: "+SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL));


2019.05.12 17:22:26.211 2018.01.22 00:19:28   Stop Buy: 1.22563

2019.05.12 17:22:26.211 2018.01.22 00:19:28   Ask: 1.22493

2019.05.12 17:22:26.211 2018.01.22 00:19:28   SYMBOL_TRADE_STOPS_LEVEL: 1

2019.05.12 17:22:26.211 2018.01.22 00:19:28   failed buy stop 1.00 EURUSD at 1.22563 (286742942302302183524377543588834930091167957306001443 [Invalid price]

Ai aumentei o Stop Buy para 2.22563, tendo o Ask a 1.2493. Mas mesmo assim continua retornando "Invalid price".

2019.05.12 17:27:52.685 2018.01.22 00:19:28   Stop Buy: 2.22563

2019.05.12 17:27:52.685 2018.01.22 00:19:28   Ask: 1.22493

2019.05.12 17:27:52.685 2018.01.22 00:19:28   SYMBOL_TRADE_STOPS_LEVEL: 1

2019.05.12 17:27:52.685 2018.01.22 00:19:28   failed buy stop 1.00 EURUSD at 2.22563 (286742942302302183524377543588834930091167957306001443 [Invalid price]

Prints do Journal abaixo:




Esse é o codigo:

         //Abre ordem de compra na posicao do primeiro gain
         request.action = TRADE_ACTION_PENDING;
         request.type = ORDER_TYPE_BUY_STOP;          //ordem de buy stop
         request.symbol = _Symbol;
         request.volume = 1;
         request.type_filling = ORDER_FILLING_RETURN;    //compra e deixa o resto aberto
         Print("Stop Buy: " + NormalizeDouble((OPLAST + StopGain+1),_Digits));
         Print("Ask: "+ Ask);
         Print("SYMBOL_TRADE_STOPS_LEVEL: "+SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL));
         request.price = NormalizeDouble((OPLAST + StopGain+1),_Digits);
         request.tp=0;
         request.sl=0;
         request.deviation = 10;                        // desvio permitido do preço
         request.expiration = TimeCurrent()+24*60*60;
         OrderSend(request,result);                     //envio da ordem


Mas mesmo colocando request.price = 3; como valor fixo, ele dá erro.

         //Abre ordem de compra na posicao do primeiro gain
         request.action = TRADE_ACTION_PENDING;
         request.type = ORDER_TYPE_BUY_STOP;          //ordem de buy stop
         request.symbol = _Symbol;
         request.volume = 1;
         request.type_filling = ORDER_FILLING_RETURN;    //compra e deixa o resto aberto
         //Print("Stop Buy: " + NormalizeDouble((OPLAST + StopGain+1),_Digits));
         Print("Stop Buy: fixo 3");
         Print("Ask: "+ Ask);
         Print("SYMBOL_TRADE_STOPS_LEVEL: "+SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL));
         //request.price = NormalizeDouble((OPLAST + StopGain+1),_Digits);
         request.price = 3;
         request.tp=0;
         request.sl=0;
         request.deviation = 10;                        // desvio permitido do preço
         request.expiration = TimeCurrent()+24*60*60;
         OrderSend(request,result);                     //envio da ordem



 

Oi boa noite,

se não for segredo de estado, tecle  Alt-S e anexe o fonte, vou depurar para você.!