Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Agora actualizado e a tentar descobrir de novo. Coloquei impressões em quase todas as linhas. Comunicarei os resultados.
Aqui está a corrida com o seu inserto, no momento em que a paragem da perda foi reparada:
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 Long position by EURUSD to be closed of stop-loss2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27
Deal #63 sl 1.33328 2011.08.09 00:41:08 Core 1 2011.01.01.14 01:41:27 oldDealsTotal=62 newDealsTotal=63
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 CSampleExpert::Trade
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 encomenda realizada venda 0.15 a 1.33328 [#63 venda 0.15 EURUSD a 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 negócio realizado [#63 vender 0.15 EURUSD a 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 negócio #63 vender 0.15 EURUSD a 1.33328 feito (com base na encomenda #63)
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 stop loss triggered buy 0.15 EURUSD 1.32127 sl: 1.33328 tp: 1.35139 [#63 sell 0.15 EURUSD a 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.13 18:32:00 Long position by EURUSD to be modified trailing
Faço encomendas pendentes com uma hora de duração de 1 hora. Após uma hora, as ordens que não foram activadas são encerradas pelo tempo de expiração da ordem. Se várias ordens são fechadas simultaneamente, e antes de fechar, a função HistoryOrdersTotal() tinha um valor diferente de zero, então perde algumas ordens. Por exemplo, antes do fecho de 8 ordens, a função tinha um valor de 4, mas após o fecho, tem um valor de 10. Duas ordens são perdidas.
O que quer dizer com "as ordens foram perdidas"? Deve ter-se em conta que as mensagens que chegam à OnTrade() podem conter informações sobre mais do que um evento comercial. Além disso, se forem enviadas várias mensagens simultaneamente, ao processar a primeira mensagem, a cache histórica pode já ter mudado, e pode ter uma sensação de "eventos perdidos".
Por favor leia o artigo Eventos comerciais no MetaTrader 5:
Conclusão
Todas as operações na plataforma de negociação MetaTrader 5 são assíncronas, e o envio de mensagens sobre todas as alterações na conta de negociação é feito independentemente umas das outras, por isso não tente rastrear um único evento de acordo com a regra "Um pedido - Um evento de negociação". Se quiser determinar exactamente o que mudou após o evento de Comércio, precisa de analisar todos os negócios, posições e ordens em cada chamada do manipulador OnTrade e compará-los com o estado que existia antes do evento aparecer.Eu pedi especificamente o valor HistoryOrdersTotal(), que era igual a 4, antes de fechar as encomendas. Após fechar 8 encomendas, o valor de HistoryOrdersTotal() deveria ter sido igual a 12 (4 + 8), mas foi igual a 10. Anexei um ficheiro de registo, podemos ver situações semelhantes nele mais do que uma vez. Anexei também o Consultor Especialista, com o qual é obtido. Faça-o você mesmo e verá tudo.
Tente mudar a função, o que vai acontecer?
O relatório HTML da execução do teste nem sempre é guardado num ficheiro!
Descrever mais precisamente. Em que circunstâncias.
Descrever mais precisamente. Em que circunstâncias.
Raramente, cerca de um em 20-30 testes - abra o separador "Resultados
clique em guardar relatório XML - eu recebo o ficheiro de relatório, está tudo bem!
clique em guardar relatório HTML - aparece uma janela para guardar ficheiro, fica pendurada com a barra de progresso vazia durante algum tempo (brevemente), depois a barra de progresso preenche-se rapidamente e a janela fecha-se... Mas nenhum ficheiro de relatório é criado!
Não posso especificar um padrão para quando exactamente isto acontece.
Tente mudar a função, o que vai acontecer?
A chave é"precisa de analisar todas as transacções, posições e ordens em cada chamada para o manipulador OnTrade e compará-la com o estado em que se encontrava antes de aparecer" . No exemplo em com encomendas pendentes, isto só se aplica a encomendas na história. Para evitar perder ordens, eu alteraria o código desta forma:
Introduzir uma variável global na OldHistoryOrders; e no Ontrade, algo como isto:
Não é assim que eu trabalho com a OnTrade() como descreveu. No meu código anexado, removi tudo, deixando apenas a parte que destaca o bug da função. Praticamente não tenho loops no meu EA. A EA manipula um único símbolo num único tick. Por conseguinte, não preciso de ciclos. Processo todos os símbolos em 12 ticks.
PS: OnTrade() informa-me sobre um evento comercial. E que evento ocorreu é definido pelas minhas funções sem loops.