Discussão do artigo "Operações de negociação Estruturas das solicitações e das resposta, descrição e registro" - página 5

 
Alexey Viktorov #:

Volodya, você e eu conversamos muito sobre essa voz. Expliquei tudo da melhor maneira possível, e você pareceu entender tudo, mas aqui vamos nós novamente....

A função OnTradeTransaction é uma função de processamento de eventos. A transação é um evento que aconteceu ontem. A função OnTradeTransaction deveria ter funcionado ontem, mas não hoje. Hoje não há nenhum evento dessa transação... Hoje houve e provavelmente ainda haverá, mas em eventos diferentes.

Estou ficando muito velho. Já estou em minha sétima década. Eu me esqueço de muitas coisas e pratico de caso para caso! ))

Acontece que não precisamos de uma transação para hoje, apenas a percorremos:

   for(int i=0; i<PositionsTotal(); i++)
     {
      if(PositionGetTicket(i))
         Print(PositionGetInteger(POSITION_IDENTIFIER));
     }

e pronto! Aqui está uma posição aberta. É assim mesmo? ))

Saudações, Vladimir.

 
Artyom Trishkin #:

Os dados são armazenados no servidor. O terminal os recebe em seu ambiente e o Expert Advisor os utiliza.

Artem, bom dia! Hoje me levantei cedo e dei uma olhada no terminal e vi que, no início de uma nova sessão de negociação, o Expert Advisor com o código que lhe mostrei anteriormente na minha mensagem"viu de repente" a posição aberta anteontem e trabalhou com ela como deveria, de acordo com o algoritmo. Isso é um tipo de milagre! Decidi executar o Expert Advisor no testador de estratégias para anteontem e ontem. No testador de estratégias, o Expert Advisor funcionou perfeitamente - ele encontrou a posição aberta anteontem e trabalhou com ela ontem, como se estivesse escrito nas anotações. Gostaria de chamar sua atenção para esse fato!!! No testador de estratégia, a posição foi aberta anteontem, o Expert Advisor a encontrou ontem e continuou....

No testador de estratégia, parece ser uma coisa, mas na negociação real é bem diferente. E ontem essa situação aconteceu pela primeira vez, quando o Expert Advisor não quis "ver" uma posição aberta do nada.

Pergunta: como isso pode acontecer?

Atenciosamente, Vladimir.

 
MrBrooklin #:

Artem, bom dia! Hoje me levantei cedo e dei uma olhada no terminal e vi que, no início de uma nova sessão de negociação, o Expert Advisor com o código que mostrei anteriormente em minha mensagem"viu de repente" a posição aberta anteontem e trabalhou com ela como deveria, de acordo com o algoritmo. Isso é um tipo de milagre! Decidi executar o Expert Advisor no testador de estratégias para anteontem e ontem. No testador de estratégias, o Expert Advisor funcionou perfeitamente - ele encontrou a posição aberta anteontem e trabalhou com ela ontem, como se estivesse escrito nas anotações. Gostaria de chamar sua atenção para esse fato!!! No testador de estratégia, a posição foi aberta anteontem, o Expert Advisor a encontrou ontem e continuou....

Pergunta - como isso pode acontecer?

Atenciosamente, Vladimir.

Eu não sei. Esse código é seu. Você o escreveu. Ele funciona como está escrito.

 
Artyom Trishkin #:

Eu não sei. O código é seu. Você o escreveu. A maneira como foi escrito, a maneira como funciona.

Eu entendo o código. Ele é muito simples. Artem, editei um pouco minha mensagem anterior, dê uma olhada nela. Acrescentei mais algumas informações. Talvez isso o ajude a entender de alguma forma.

Saudações, Vladimir.

Também acrescentei: após 8 meses de negociação em uma conta real, ontem, pela primeira vez, o Expert Advisor não "viu" uma posição aberta. Foi isso que me tirou de minha rotina.

 
MrBrooklin #:

Entendo o código. Ele é o mais simples. Artem, editei um pouco minha mensagem anterior, dê uma olhada nela. Acrescentei mais algumas informações. Talvez isso ajude a entender de alguma forma.

Saudações, Vladimir.

Também acrescentei: após 8 meses de negociação em uma conta real, ontem, pela primeira vez, o Expert Advisor não "viu" uma posição aberta. Foi isso que me tirou de minha rotina.

São necessários testes de estresse para esse caso: tirar o garfo do computador imediatamente após mudar o ambiente de negociação, cortar a Internet ou torná-la muito lenta, de modo que a falta de Internet não seja corrigida e as ordens de negociação praticamente não sejam enviadas.... ou qualquer outra coisa que não seja uma equipe. O ambiente real de negociação e sua fixação, mesmo com um pequeno número de transações comerciais, podem gerar falhas imprevisíveis)))))

Os artigos de Artem no primeiro têm sobre isso, como registrar e como monitorar o real)))))

O Saber tem uma abordagem mais legal em geral, ele cria uma cópia virtual do ambiente de negociação e conta tudo lá))))

 
Valeriy Yastremskiy #:
Testes de estresse para esse caso são necessários, desligue o computador imediatamente após mudar o ambiente de negociação, corte a Internet ou torne-a muito lenta, de modo que a falta de Internet não seja corrigida e as ordens de negociação praticamente não sejam enviadas.... ou qualquer outra coisa que não seja o padrão.

Bom dia, Valery! Tudo o que foi listado em sua mensagem, tudo isso aconteceu repetidamente, e até mesmo repetidamente, durante todos os oito meses de negociação na conta real. Ao mesmo tempo, o EA viu a posição no dia seguinte e no dia seguinte. O código da função OnTradeTransaction() funcionou corretamente durante todos os oito meses de negociação real.

Não tenho uma explicação para o que aconteceu, mas a única coisa que me vem à mente é uma falha no servidor da corretora de câmbio. Se você ler atentamente todas as minhas postagens sobre esse tópico, verá essa mensagem:

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Discussão do artigo "Transações de negociação. Estruturas de solicitação e resposta, descrição e saída de registro"

MrBrooklin, 2023.10.18 04:48 PM

Artem, bom dia! Hoje me levantei cedo e olhei para o terminal, e vi que, no início de uma nova sessão de negociação, o Expert Advisor com o código que mostrei anteriormente na minha mensagem"viu de repente" a posição aberta anteontem e trabalhou com ela como deveria, de acordo com o algoritmo. Isso é um tipo de milagre! Decidi executar o Expert Advisor no testador de estratégias para anteontem e ontem. No testador de estratégias, o Expert Advisor funcionou perfeitamente - ele encontrou a posição aberta anteontem e trabalhou com ela ontem, como se estivesse escrito nas anotações. Gostaria de chamar sua atenção para esse fato!!! No testador de estratégia, a posição foi aberta anteontem, o Expert Advisor a encontrou ontem e continuou....

No testador de estratégia, parece ser uma coisa, mas na negociação real é bem diferente. E ontem essa situação aconteceu pela primeira vez, quando o Expert Advisor não quis "ver" uma posição aberta do nada.

Pergunta: como isso pode acontecer?

Saudações, Vladimir.

Saudações, Vladimir.
 
Devido ao fato de que o evento TradeTransaction pode ser perdido por algum motivo, e também porque é possível ter um estado de "corrida" (por exemplo, quando uma ordem não está mais ativa, mas ainda não está no histórico, ou quando não há uma ordem ativa, mas ainda não há uma posição aberta), tenho um robô que armazena todas as ordens ativas e sua posição total (compensação) em seu estado. O estado é redefinido para um arquivo a cada alteração e no final do trabalho. Na inicialização e periodicamente durante a operação, a sincronização é verificada e, se necessário, o estado é sincronizado.
 
JRandomTrader #:
Tenho um robô que armazena todas as ordens ativas e sua posição total (compensação) em seu estado. O estado é redefinido para um arquivo a cada alteração e no final do trabalho. Na inicialização e periodicamente durante a operação, a sincronização é verificada e o estado é sincronizado, se necessário.

Obrigado por compartilhar uma solução interessante para esse problema. Tentarei implementá-la em meu EA.

Atenciosamente, Vladimir.

 
MrBrooklin #:

Obrigado por compartilhar uma solução interessante para um problema semelhante. Tentarei implementá-la em meu EA.

Saudações, Vladimir.

Pode ser não apenas uma falha, mas o que é uma falha))))) Corrigir o estado do ambiente de negociação não é exatamente uma tarefa simples. E quando se faz um pedido em um instrumento, nem sequer se acredita que isso seja necessário. Mas, em um bom sentido, é necessário.

No testador, a execução ideal, na vida real, é quase ideal, mas, às vezes, não é ideal e até mesmo inadequada.

Portanto, na vida real, precisamos resolver o problema de alguma forma, para que o Expert Advisor entenda o que está acontecendo com as ordens. E se isso é claro com as ordens, é mais complicado com as ordens. A cada tick ou com menos frequência, verifique o status da ordem ou observe o preço se, de repente, ele se tornou maior ou menor que o preço da ordem para verificar o status da ordem. )))

 

Bom dia, Artyom! Há alguma diferença fundamental para a função OnTradeTransaction() onde ela deve estar localizada - antes da função OnTick() ou depois dela? Se for fundamental, por quê?

Atenciosamente, Vladimir.