if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { }
OrderSelect não funciona, não seleciona uma ordem (ticket por índice) para trabalhar com ela, exemplo simples no anexo e não funciona no MT5 por algum motivo.
Seu código não funcionará no MT4 como gostaríamos que funcionasse. Porque há um erro nele - você define suas posições como zero majic, mas as compara com outro valor.
Obrigado, peço desculpas, mas aconteceu que eu estava tentando traduzir um EA para a versão do MT5, e isso me tomou muito tempo, e a lógica de negociação não correspondia, verifiquei a magia e tudo o que poderia afetá-la, então escrevi um exemplo simples e ele não funcionou. Mas depois descobri meu erro, e o exemplo acima não tem nada a ver com isso. Eu queria excluir minha postagem, mas não tive tempo.
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES)) if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { }
OrderSelect não funciona, não seleciona uma ordem (ticket por índice) para trabalhar com ela, exemplo simples no anexo e não funciona no mt5 por algum motivo
O código de erro está contido na estrutura MqlTradeResult, não poderei usar o código acima no MT5 sem acesso ao resultado, como posso modificar o mt4orders.mqh para retornar os erros do servidor de negociação?
O código de erro está contido na estrutura MqlTradeResult, não poderei usar o código acima no MT5 sem acesso ao resultado, como posso modificar o mt4orders.mqh para retornar os erros do servidor de negociação?
Você pode fazer com que GetLastError retorne mais valores - complemente-o com códigos de MqlTradeResult.
Ou seja, se houver um erro ao fechar um pedido, GetLastError() retornará o código de erro (do servidor de negociação), mesmo que não verifiquemos MqlTradeResult Result; Result.retcode in OrderSend(Request, Result)?
Aliaksandr Kryvanos: Ou seja, se houver um erro ao fechar um pedido, GetLastError() retornará o código de erro (do servidor de negociação), mesmo que não verifiquemos MqlTradeResult Result; Result.retcode in OrderSend(Request, Result)?
Você diz que não é difícil de implementar, mas, na verdade, GetLastError() pode retornar um erro do servidor de negociação se a ordem não for enviada, sem analisar a estrutura MqlTradeResult.
Você pode simplesmente adicionar uma verificação a:
Você diz que não é difícil de implementar, mas, na verdade, GetLastError() pode retornar um erro do servidor de negociação, se a ordem não for enviada, sem analisar a estrutura MqlTradeResult.
Você pode simplesmente adicionar uma verificação a:
mas é necessário fazer isso, se GetLastError() pode funcionar como está?
Não estou entendendo. Sua implementação em if contém um erro. Além disso, existe algo como TRADE_RETCODE_DONE_PARTIAL - é uma execução bem-sucedida do OrderSend.
E mesmo que você corrija seu código, ele registrará apenas uma mensagem de erro (e talvez alguém não queira vê-la todas as vezes). Mas ela NÃO estará disponível na MQL.
seleção por símbolo e majic não funciona
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
}
OrderSelect não funciona, não seleciona uma ordem (ticket por índice) para trabalhar com ela, exemplo simples no anexo e não funciona no MT5 por algum motivo.
A seleção por símbolo e majic não funciona
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
}
OrderSelect não funciona, não seleciona uma ordem (ticket por índice) para trabalhar com ela, exemplo simples no anexo e não funciona no mt5 por algum motivo
Olá, tenho uma dúvida: como posso obter dados sobre erros ao enviar ordens para o MT5, na versão MT4 é assim
if (CloseError == false)
{
ResetLastError();
error = GetLastError();
Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}
O código de erro está contido na estrutura MqlTradeResult, não poderei usar o código acima no MT5 sem acesso ao resultado, como posso modificar o mt4orders.mqh para retornar os erros do servidor de negociação?
Olá, tenho uma dúvida: como posso obter dados sobre erros ao enviar ordens para o MT5, na versão MT4 é assim
if (CloseError == false)
{
ResetLastError();
error = GetLastError();
Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}
O código de erro está contido na estrutura MqlTradeResult, não poderei usar o código acima no MT5 sem acesso ao resultado, como posso modificar o mt4orders.mqh para retornar os erros do servidor de negociação?
Ou seja, se houver um erro ao fechar um pedido, GetLastError() retornará o código de erro (do servidor de negociação), mesmo que não verifiquemos MqlTradeResult Result; Result.retcode in OrderSend(Request, Result)?
Sim, não é difícil de implementar.
if (CloseError == false)
{
ResetLastError();
error = GetLastError();
Print(" CloseOpenedTrades OrderClose failed" + " - ticket=", OrderTicket() + string(error) + ") " + ErrorDescription(error) + " - ticket= ", OrderTicket());
}
Não entendo o significado do destaque.
Sim, não é difícil de implementar.
Não entendo o significado da parte destacada.
estava no EA para o mt4
Você diz que não é difícil de implementar, mas, na verdade, GetLastError() pode retornar um erro do servidor de negociação se a ordem não for enviada, sem analisar a estrutura MqlTradeResult.
Você pode simplesmente adicionar uma verificação a:
{
MqlTradeResult Result;
if (::OrderSend(Request, Result) || Result.retcode != TRADE_RETCODE_DONE)
{
Print("OrderSend() error: ", ResultRetcodeDescription(Result.retcode));
return(false);
}
else
{
return(true);
}
//return(MT4ORDERS::OrderSend(Request, Result) ? Result.retcode < TRADE_RETCODE_ERROR : false);
}
mas é necessário fazer isso, se GetLastError() pode funcionar como está?
Esse era o caso do consultor mt4
Então, há um erro na lógica.
Você diz que não é difícil de implementar, mas, na verdade, GetLastError() pode retornar um erro do servidor de negociação, se a ordem não for enviada, sem analisar a estrutura MqlTradeResult.
Você pode simplesmente adicionar uma verificação a:
{
MqlTradeResult Result;
if (::OrderSend(Request, Result) || Result.retcode != TRADE_RETCODE_DONE)
{
Print("OrderSend() error: ", ResultRetcodeDescription(Result.retcode));
return(false);
}
else
{
return(true);
}
//return(MT4ORDERS::OrderSend(Request, Result) ? Result.retcode < TRADE_RETCODE_ERROR : false);
}
mas é necessário fazer isso, se GetLastError() pode funcionar como está?
Não estou entendendo. Sua implementação em if contém um erro. Além disso, existe algo como TRADE_RETCODE_DONE_PARTIAL - é uma execução bem-sucedida do OrderSend.
E mesmo que você corrija seu código, ele registrará apenas uma mensagem de erro (e talvez alguém não queira vê-la todas as vezes). Mas ela NÃO estará disponível na MQL.
Portanto, a variante em que GetLastError retorna tanto os erros de tempo de execução padrão quanto os códigos de retorno adicionais do servidor de negociação parece ser a mais adequada.