Olá Fernando,
1) Ordem a mercado não precisa especificar o preço, mas se for informado deve estar normalizado para o TICK SIZE do instrumento.
2) O SL/TP também devem estar normalizados para o TICK SIZE do instrumento,
Utilize a função NormalizePrice() que está em /MQL5/include/trade/Symbol,mqh. para normalizar o preço para o TICKSIZE do instrumento.
3) OrdersTotal() e PositionsTotal() conta TODAS as ordens pendentes e TODAS posições abertas no MT5.
Olá Fernando,
1) Ordem a mercado não precisa especificar o preço, mas se for informado deve estar normalizado para o TICK SIZE do instrumento.
2) O SL/TP também devem estar normalizados para o TICK SIZE do instrumento,
Utilize a função NormalizePrice() que está em /MQL5/include/trade/Symbol,mqh. para normalizar o preço para o TICKSIZE do instrumento.
3) OrdersTotal() e PositionsTotal() conta TODAS as ordens pendentes e TODAS posições abertas no MT5.
Fiz as mudanças mas ainda continua retornando o msm erro.
void sendOrder(int mn, bool sinalCompra, bool sinalVenda, double ls, string comment, bool operarCompra, bool operarVenda, double takeProfit, double stopLoss ){ CSymbolInfo simbolo; simbolo.Name(_Symbol); //variaveis responsaveis pelo envio da ordem MqlTradeRequest request; MqlTradeResult result; MqlTradeCheckResult check_result; //zera objetos da memoria ZeroMemory(request); ZeroMemory(result); ZeroMemory(check_result); //prices //double Ask = simbolo.NormalizePrice(SymbolInfoDouble(_Symbol, SYMBOL_ASK), _Digits); //double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_BID), _Digits); if(OrdersTotal() == 0 && PositionsTotal() == 0){ if(sinalCompra && !sinalVenda && OrdersTotal() == 0){ request.action = TRADE_ACTION_DEAL; request.magic = mn; request.symbol =_Symbol; request.volume = ls; //request.price = simbolo.Ask(); request.sl =0; request.tp =0; if(stopLoss > 0){ request.sl = simbolo.NormalizePrice(simbolo.Ask() - stopLoss); } if(takeProfit > 0){ request.tp = simbolo.NormalizePrice(simbolo.Ask() + takeProfit); } request.type =ORDER_TYPE_BUY; request.type_filling =ORDER_FILLING_FOK; request.comment = comment; } if(sinalVenda && !sinalCompra && OrdersTotal() == 0){ request.action = TRADE_ACTION_DEAL; request.magic = mn; request.symbol =_Symbol; request.volume = ls; //request.price = simbolo.Bid(); request.sl = 0; request.tp = 0; if(stopLoss > 0){ request.sl = simbolo.NormalizePrice(simbolo.Bid() + stopLoss); } if(takeProfit > 0){ request.tp = simbolo.NormalizePrice(simbolo.Bid() - takeProfit); } request.type =ORDER_TYPE_SELL; request.type_filling =ORDER_FILLING_FOK; request.comment = comment; } ResetLastError(); if(!OrderSend(request, result)){ PrintFormat("Erro em OrderSend: %d", GetLastError()); //PrintFormat("Código de Retorno: %d", result.retcode); PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order); return; } }//orderstotal }
Estou tentando automatizar uma estratégia que tenho para usar no mini indice e mini dolar. No forex funciona bem, mas no mini indice e mini dolar as ordens não são enviadas e retorna um erro que não estou encontrando uma solução para resolver.
Como resolver esse problema ?
OrderSend
Erro:
Por que você não usa a biblioteca Trade? Todo esse código se transformaria em meia dúzia de linhas.
Fernado Paiva,
A maioria das corretoras brasileiras (senão todas) não aceitam preenchimento de ordem "fill or kill".
Experimente usar ORDER_FILLING_RETURN em vez de ORDER_FILLING_FOK no campo type_filling, que deve funcionar.
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Estou tentando automatizar uma estratégia que tenho para usar no mini indice e mini dolar. No forex funciona bem, mas no mini indice e mini dolar as ordens não são enviadas e retorna um erro que não estou encontrando uma solução para resolver.
Como resolver esse problema ?
OrderSend
Erro:
[RESOLVIDO]
Fala galera, abaixo como fiz para resolver e esta funcionando muito bem. Abraço e obrigado a todos!