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

 
MrBrooklin fechar a posição houver um corte de energia e, digamos, meu computador desligar, ou se eu simplesmente fechar o terminal MT5 por algum motivo, onde as informações sobre essa negociação serão armazenadas? E essas informações serão armazenadas em algum lugar?

Você pode me explicar esses momentos incompreensíveis com mais detalhes?

Atenciosamente, Vladimir.

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

 
Artyom Trishkin #:

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

Então, é estranho por que hoje o EA não encontrou a transação aberta ontem? Ele costumava encontrar. Aqui está o código:

void  OnTradeTransaction(
   const MqlTradeTransaction&    trans,   // estrutura da transação comercial
   const MqlTradeRequest&        request, // estrutura da solicitação
   const MqlTradeResult&         result   // estrutura de resposta
)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_IN)
        {
         pos_ticket=trans.position;
         pos_open=trans.price;
        }
     }
  }

Um pequeno acréscimo. O rollover pode, de alguma forma, influenciar o tíquete de uma negociação aberta, ou seja, alterá-lo?

Saudações, Vladimir.

 
MrBrooklin #:

Então, é estranho que hoje o Expert Advisor não tenha encontrado a transação aberta ontem. Ele encontrou antes. Aqui está o código:

Um pequeno acréscimo. O rollover pode, de alguma forma, influenciar o tíquete de uma negociação aberta, ou seja, alterá-lo?

Atenciosamente, Vladimir.

Você pode encontrar todas as negociações e ordens pelo ID de uma posição aberta.

 
MrBrooklin #:

Então, é estranho que hoje o Expert Advisor não tenha encontrado a transação aberta ontem. Ele encontrou antes. Aqui está o código:

Um pequeno acréscimo. O rollover pode, de alguma forma, influenciar o tíquete de uma negociação aberta, ou seja, alterá-lo?

Atenciosamente, Vladimir.

Ao fazer uma negociação, o servidor envia uma "mensagem" para o terminal informando que a negociação foi feita e se esquece dela. O servidor não se importa se o terminal a recebeu ou não. Portanto, se o terminal estiver desligado no momento de uma negociação, você poderá saber sobre a negociação somente lendo o histórico desde o momento do fechamento do terminal até o momento atual.

 
Alexey Viktorov #:
Portanto, se o terminal estiver desligado no momento de uma negociação, você poderá saber mais sobre a negociação apenas lendo o histórico desde o momento em que o terminal foi fechado até o momento atual.

Oi Alexey, no momento da negociação, ou seja, no momento da abertura de uma posição, o terminal estava ligado, porque o Expert Advisor o abriu.

Saudações, Vladimir.

 
Artyom Trishkin #:

Você pode encontrar todas as suas negociações e ordens pelo ID da posição aberta.

Entendo. Vou estudar mais o Manual.

Saudações, Vladimir.

 
MrBrooklin #:

Oi Alexey, no momento da negociação, ou seja, no momento da abertura da posição, o terminal estava ligado, porque o Expert Advisor estava abrindo a posição.

Atenciosamente, Vladimir.

Como entender isso?

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ções e respostas, descrição e saída de registro"

MrBrooklin, 2023.10.17 16:48

Então é estranho por que hoje o Expert Advisor não encontrou a transação aberta ontem? Antes, ele encontrou. Aqui está o código:

void  OnTradeTransaction(
   const MqlTradeTransaction&    trans,   // estrutura da transação comercial
   const MqlTradeRequest&        request, // estrutura da solicitação
   const MqlTradeResult&         result   // estrutura de resposta
)
  {
   if(trans.type==TRADE_TRANSACTION_DEAL_ADD)
     {
      if(HistoryDealSelect(trans.deal) && HistoryDealGetInteger(trans.deal,DEAL_ENTRY)==DEAL_ENTRY_IN)
        {
         pos_ticket=trans.position;
         pos_open=trans.price;
        }
     }
  }

Um pequeno acréscimo. O rollover pode, de alguma forma, influenciar o tíquete de uma negociação aberta, ou seja, alterá-lo?

Atenciosamente, Vladimir.

Então, ontem ele o encontrou. E hoje o trem já está a caminho...

Se ontem havia uma ordem, uma ordem pendente, e hoje já há uma posição, que é o que eu estava falando, então a negociação ocorreu no momento em que o terminal foi fechado... Portanto, procure-a pelo ID da posição, que é o que Artem está falando.

 
Alexey Viktorov #:
Portanto, procure-o pelo ID da posição, que é o que Artem está falando.

Alexei, já mudamos para você? ))

Sim, eu já entendi o que é o ID de posição. Tentarei descobrir isso sozinho com ajuda:

long position_ID=HistoryDealGetInteger(deal_ticket,DEAL_POSITION_ID);

Saudações, Vladimir.

 
MrBrooklin #:

Então, é estranho por que hoje o EA não encontrou a negociação aberta ontem?

Alexey, talvez seja difícil expressar meu pensamento, mas a essência dele é a seguinte: ontem o EA abriu uma posição, ou seja, fez uma negociação, não abriu uma negociação, como escrevi anteriormente. Hoje, de acordo com o algoritmo, o Expert Advisor deveria ter visto a posição aberta ontem e realizado determinadas manipulações. Mas o EA, por motivos que ainda não entendo, não viu a posição aberta ontem e, portanto, não realizou nenhuma ação. Espero ter expressado meu pensamento com mais clareza agora?

Saudações, Vladimir.

 
MrBrooklin #:

Alexey, talvez seja difícil expressar meu pensamento, mas a essência dele é a seguinte: ontem, o Expert Advisor abriu uma posição, ou seja, fez uma transação, não abriu uma transação, como escrevi anteriormente. Hoje, de acordo com o algoritmo, o Expert Advisor deveria ter visto a posição aberta ontem e realizado determinadas manipulações. Mas o EA, por motivos que ainda não entendo, não viu a posição aberta ontem e, portanto, não realizou nenhuma ação. Espero ter expressado meu pensamento com mais clareza agora?

Atenciosamente, Vladimir.

Volodya, você e eu conversamos muito sobre essa voz. Expliquei tudo da melhor forma possível, 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.