Stops Inválido

 

Estou com um problema que ao tentar enviar uma Ordem (tanto buy quanto sell), as vezes recebo uma mensagem de erro dizendo que os stops são inválidos, porém, tem vez que ele aceita a ordem com os mesmo valores logo depois (como na imagem)
Corretora: ModalMais - Demo
Configuração do Backtest:
-Latencia: 1ms
-Modelagem: Cada Tick é baseado (se mudar para "Cada Tick", não da o problema)


            MqlTradeCheckResult m_check_result;
            MqlTradeResult mresult;    
            MqlTradeRequest mrequest={0}; 
            double price=SymbolInfoDouble ( Symbol (), SYMBOL_BID );
            price = NormalizeDouble((price),_Digits);
            double STP = price + (price * stopLossDecimal); 
            STP = NormalizePrice(STP); 
            double TKP = price - (price * takeProfitDecimal);
            TKP = NormalizePrice(TKP);
            mrequest.sl = STP;                          
            mrequest.tp = TKP;                             
            mrequest.action = TRADE_ACTION_DEAL;          
            mrequest.price = price;                        
            mrequest.symbol = _Symbol;                
            mrequest.volume = tradeVolume;                       
            mrequest.magic = EXPERT_MAGIC;               
            mrequest.type = ORDER_TYPE_SELL;                
            mrequest.type_filling = ORDER_FILLING_RETURN;      
            mrequest.deviation = 50;                         
            //--- send order
            if(OrderSend(mrequest,mresult))                    
            {
               Print("----------------------------------------------------------------------------------------------------------");
               Print("Sell Order sent: " + Symbol() + " price: " + (string)price + " SL: " + (string)STP + " TP: " + (string)TKP);
               Print("----------------------------------------------------------------------------------------------------------");
               lastTradeMade = 1;
               dailyTradeQtd++;
               tradeOpenQtd++;
               tradeOpen = true;
            }
            else
            {
               Print("----------------------------------------------------------------------------------------------------------");
               Print ("Error in Sell Order, Code: " + (string)mresult.retcode);
               Print("----------------------------------------------------------------------------------------------------------");
            }


double NormalizePrice(double price)
{   
   double tickSize=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE);
   return(MathRound(price/tickSize)*tickSize);
}
 
FELIPE MENDES WOORD:

Olá,

PRINTA aqui a especificação do WIN$D no servidor MODAL-DEMO, quero ver como foi definido o modo execução.


 

Olá.
Aqui está!

 
FELIPE MENDES WOORD:

Olá.
Aqui está!

Bom dia,

você publicou WINQ20 ? mas serviu para o queria ver.  Parece que alguém na MODAL está testando MODO  EXECUÇÃO = INSTANTE, nesse modo a ordem é recusada quando preço ultrapassa a limite de derrapagem da ordem, porém nesse caso era para dar erro  Requote e não Invalid Stop.  Tá muito esquisito isso, tente com o suporte da MODAL

No servidor de produção está MODO EXECUÇÃO = BOLSA, que é o modo que as demais corretoras também utilizam.

 

Opa, na verdade é o WIN$N o que postei. Mas sim, as configurações são as mesmas.
Vou tentar entrar em contato com eles, quando tiver alguma resposta publico aqui
Obrigado!


--Edit--
Um amigo meu fez um teste pra mim, na Clear, e obteve o mesmo erro. Ainda assim vou entrar em contato com a Modal ver se eles tem alguma informação

 
Deixa de registro aqui caso alguém precise
Aparentemente, descobri o problema. Eu não estava me atentando para o momento de leilão que acontece antes de efetivamente abrir o mercado, e esse erro dava quando o EA tentava operar durante o leilão