1TP9Problema com a exclusão de pedidos pendentes
8 respostas
mikeyc
7 anos atrás #115445
Hi,
Tenho uma estratégia que substitui ordens pendentes. No entanto, há um problema com o MQ4 gerado pelo SQ, pois durante uma pequena janela de tempo em que o ECN não aceita ordens, se o EA gerado pelo SQ tentar excluir uma ordem pendente, ele falhará e não excluirá a ordem:
2016.08.14 22:00:25.027 '946624': exclusão da ordem pendente #9901877 sell stop 0.01 EURUSD a 1.11528 sl: 1.14488 tp: 1.11008 failed [O mercado está fechado]
2016.08.11 22:00:04.839 '946624': exclusão da ordem pendente #9877449 buy stop 0.01 EURUSD a 1.11581 sl: 1.08621 tp: 1.12101 failed [O mercado está fechado]
É necessário haver um mecanismo de repetição para excluir a ordem pendente.
Obrigado,
Mike
mabi
7 anos atrás #138831
No Ninjatrader, a estratégia se autodestrói quando isso acontece. Portanto, isso também é um problema para essa plataforma.
Threshold
7 anos atrás #138835
Além disso, "sair na sexta-feira" parece sair na abertura de segunda-feira. Nunca mencionei isso antes porque tende a funcionar a meu favor (os gaps tendem a ser na direção do momentum de sexta-feira).
clonex / Ivan Hudec
7 anos atrás #138836
Meu problema também. Sair na sexta-feira é sair na quinta-feira às 22:00; tive que desativar essa opção. Mikeyc o mesmo problema.
tomas262
7 anos atrás #138838
FILIPE BONALDO ACERBI
6 anos atrás #201039
Olá,
Tenho o mesmo problema uma vez por dia, às 22:00, horário da corretora. Recebi o erro "O mercado está fechado":
2017.11.08 22:02:12.599
USDJPY D1 23.46 USDJPY.m,Diário: 2017.11.09 00:02:19 Ordem modificada, StopLoss: 0, Profit Target: 0
2017.11.08 22:02:12.599
USDJPY D1 23.46 USDJPY.m, Diário: modificar #175062574 vender stop 0.86 USDJPY.m em 111.617 sl: 112.141 tp: 108.668 ok
2017.11.08 22:02:12.162
USDJPY D1 23.46 USDJPY.m,Diário: 2017.11.09 00:02:19 Configuração SL/PT, SL: 112.141, PT: 108.668
2017.11.08 22:02:12.162
USDJPY D1 23.46 USDJPY.m, Diário: 2017.11.09 00:02:19 Ordem aberta: 175062574 ao preço:111.617
2017.11.08 22:02:12.162
USDJPY D1 23.46 USDJPY.m, Diário: abrir #175062574 vender stop 0.86 USDJPY.m em 111.617 ok
2017.11.08 22:02:11.677
USDJPY D1 23.46 USDJPY.m,Diário: 2017.11.09 00:02:19 Ordem de abertura, direção: 5, preço: 111.617, Ask: 113.893, Bid: 113.864
2017.11.08 22:01:37.521
USDJPY D1 23.46 USDJPY.m, Diário: 2017.11.09 00:01:44 Erro ao abrir a ordem: 132 : o mercado está fechado
2017.11.08 22:01:37.396
USDJPY D1 23.46 USDJPY.m,Diário: 2017.11.09 00:01:44 Ordem de abertura, direção: 5, preço: 111.617, Ask: 113.893, Bid: 113.864
2017.11.08 22:01:03.677
USDJPY D1 23.46 USDJPY.m, Diário: 2017.11.09 00:01:12 Erro ao abrir a ordem: 132 : o mercado está fechado
2017.11.08 22:01:03.521
USDJPY D1 23.46 USDJPY.m,Diário: 2017.11.09 00:01:11 Ordem de abertura, direção: 5, preço: 111.617, Ask: 113.893, Bid: 113.864
2017.11.08 22:00:29.568
USDJPY D1 23.46 USDJPY.m,Diário: 2017.11.09 00:00:35 Erro ao abrir a ordem: 132 : o mercado está fechado
2017.11.08 22:00:29.365
USDJPY D1 23.46 USDJPY.m,Diário: 2017.11.09 00:00:35 Ordem de abertura, direção: 5, preço: 111.617, Ask: 113.893, Bid: 113.864
2017.11.08 21:59:55.349
USDJPY D1 23.46 USDJPY.m, Diário: 2017.11.09 00:00:03 Erro ao abrir a ordem: 132 : o mercado está fechado
2017.11.08 21:59:55.052
USDJPY D1 23.46 USDJPY.m,Diário: 2017.11.09 00:00:02 Ordem de abertura, direção: 5, preço: 111.617, Ask: 113.893, Bid: 113.864
2017.11.08 21:59:55.052
USDJPY D1 23.46 USDJPY.m,Diário: 2017.11.09 00:00:02 Não é possível fechar a ordem pendente anterior existente com o ticket: 174815678, motivo: 132
Se observarmos o histórico acima, o EA fez 4 tentativas até abrir com sucesso a ordem 175062574. Porém, o problema são as tentativas fracassadas de alterar ou fechar a ordem anterior. No exemplo acima, o EA tentou fechar sem sucesso a ordem 174815678. Ele tentou uma vez e falhou, portanto, tenho uma ordem aberta que deveria ter sido fechada, mas, devido a esse erro, ela continua aberta.
Tenho que fechar a ordem 174815678 manualmente e reiniciar o EA. Quando fiz isso, o EA abriu a ordem correta (veja o anexo)
Tentei resolver esse problema colocando a função if(sqIsTradeAllowed() == 1) antes do OrderDelete, mas nada aconteceu:
bool closePendingOrder() {
int ticket = OrderTicket();
Se (sqIsTradeAllowed() == 1)
se(OrderDelete(ticket)) {
lastDeletedOrderTicket = ticket; return(true); }
return(false);}
Acho que a solução é implementar mais tentativas de fechar ou alterar uma ordem quando ela falhar.
O que posso fazer para resolver isso?
FILIPE BONALDO ACERBI
6 anos atrás #201067
Procurei no código do EA todas as funções que modificam, excluem e fecham ordens. Para essas funções, adicionei a mesma lógica que fazia novas tentativas de abrir ordens quando falhava, o que é descrito pela função openPosition(). Hoje, recebo o erro "market closed" (mercado fechado), mas o EA tentou modificar/excluir/fechar as ordens com sucesso. Se alguém tiver problemas com o erro de mercado fechado, anexei as funções alteradas para fazer novas tentativas de fechamento, modificação ou exclusão de ordens. Você só precisa substituir as funções no código do EA.
afhampton
6 anos atrás #201276
Oi Filipe:
Estou com um problema semelhante e gostaria de saber se suas modificações resolverão o problema. Em uma conta ECN, a negociação pendente era definida pelo EA e, antes que a ordem pendente de modificação para definir o SL e o TP pudesse ser processada, a negociação era ativada. Portanto, a ordem pendente de modificação falhou porque ela não está mais pendente, mas ativada. Nesse caso, se a modificação da pendência falhar, preciso que o EA verifique se a ordem foi aberta e, em caso afirmativo, se o TP e o SL estão definidos corretamente. Caso contrário, defina o TP e o SL para a ordem aberta. Se as tentativas de definir o TP/SL falharem várias vezes, feche a ordem aberta.
Isso é algo que suas modificações farão e, se não, você me ajudaria com o código para fazer isso? Ficarei feliz em compensá-lo por seu tempo.
FILIPE BONALDO ACERBI
6 anos atrás #201294
Olá, Afhampton,
Acredito que se o EA fizer algumas tentativas para alterar o ST/TP da ordem aberta, isso funcionará. Para as ordens de parada/limite abertas, acho que o EA precisa testar se a ordem pendente está aberta antes de tentar fechar ou alterar. Se estiverem abertas, o EA chamará a função start() para gerenciar as ordens recém-abertas. Essa poderia ser uma solução. Anexei as funções modificadas e você poderia tentar se ele funciona com essas funções modificadas que fazem novas tentativas e testam se a ordem pendente está aberta. Siga estas etapas:
1- Faça um backup de "MT4Functions.inc" em C:\StrategyQuant\code\Mql_MT4.
2 - Faça o download do arquivo anexado, renomeie e substitua "MT4Functions.inc" em C:\StrategyQuant\code\Mql_MT4.
3 - Exportar o arquivo EA mql4 novamente no SQ.
4 - Teste na conta de demonstração.
Se o EA não conseguir alterar/excluir as ordens, ele fará 60 tentativas de 30 segundos cada até conseguir alterar/excluir a ordem. Se não funcionar, restaure o backup.
Visualizando 8 respostas - 1 até 8 (de um total de 8)