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

 
MrBrooklin função OnTick() ou depois dela? Se for fundamental, por quê?

Atenciosamente, Vladimir.

Bom. Não há diferença. Pelo menos no arquivo do plug-in.

 
Artyom Trishkin #:

É bom. Não há diferença. Ele pode estar em um arquivo de plug-in.

Estou vendo. Muito obrigado!

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, provavelmente estou torturando-o com minha estupidez, mas por quanto tempo os dados de uma transação são armazenados no servidor? Um dia, dois, três... um ano? Li a literatura e o livro de referência e não encontrei essa informação em lugar algum.

Saudações, Vladimir.

 
MrBrooklin #:

Artem, provavelmente estou aborrecendo-o com minha estupidez, mas os dados da transação são armazenados no servidor por quanto tempo? Um dia, dois, três... um ano? Eu li a literatura e o manual e não encontrei essa informação em lugar algum.

Atenciosamente, Vladimir.

Vladimir, por que você precisa disso? Esses dados são necessários apenas para resolver alguns momentos discutíveis. Mas se um corretor fizer algo extravagante, é improvável que ele consiga provar alguma coisa. E o tempo de armazenamento específico é definido pelo próprio corretor e não há regulamentação sobre isso.

 
Alexey Viktorov #:

Vladimir, por que você precisa deles? Esses dados são necessários apenas para resolver alguns pontos discutíveis. Mas se o corretor fizer algo extravagante, é improvável que ele consiga provar alguma coisa. E o tempo específico de armazenamento é definido pelo próprio corretor, e não há nenhuma regulamentação sobre isso.

Oi Alexey, preciso saber disso para me instruir e, ao mesmo tempo, quero entendê-lo completamente. Parece que não estou entendendo nada sobre essas transações. Quando ouvi você, tudo parecia estar claro, mas um pouco de tempo se passou e tudo se dissolveu. Lá vamos nós de novo! Não entendo absolutamente nada!

Saudações, Vladimir.

 

Vou lhe dar um exemplo real. Tenho uma posição aberta para o fim de semana. Aqui está uma captura de tela da minha conta real:


A transação foi feita, a posição está aberta. Executo o script:

//+------------------------------------------------------------------+
//|1.mq5 |
//|Copyright 2023, MetaQuotes Ltd. |
//| https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
ulong pos_ticket;
double pos_open;
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
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;
        }
     }
  }
//+------------------------------------------------------------------+
//| Função de início do programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Print("Ticket = ",pos_ticket);
   Print("Price = ",pos_open);
  }
//+------------------------------------------------------------------+

Obtenho o resultado na guia Experts:

2023.10.21 14:41:47.693 1 (EURUSDrfd,M1)        Ticket = 0
2023.10.21 14:41:47.693 1 (EURUSDrfd,M1)        Price = 0.0

Artyom escreveu que a transação é armazenada no servidor, mas não disse por quanto tempo ela é armazenada e, de fato, não está visível agora. Como assim? Estou tentando descobrir isso até o fim.

Atenciosamente, Vladimir.

 
MrBrooklin #:

Vou lhe dar um exemplo real. Tenho uma posição aberta para o fim de semana. Aqui está uma captura de tela da minha conta real:


A transação foi feita, a posição está aberta. Executando o script:

Obtenho o resultado na guia Experts:

Artem escreveu que a transação é armazenada no servidor, mas não me disse por quanto tempo ela é armazenada e, de fato, não está visível agora. Como assim? Estou tentando descobrir isso até o fim.

Atenciosamente, Vladimir.

Você executou um script.

void OnStart()
  {
   Print("DateTime = ", TimeCurrent());
  }

Ele é um EVENTO. Se você executou o script ontem, obteve a impressão ontem. E hoje não haverá impressão com a data e a hora de ontem. Se você executar o script hoje, ele será um evento novamente. E novamente você obterá uma impressão com a data e a hora atuais.

Uma batida na cabeça é um evento. E amanhã você não sentirá nada do TUK..... de ontem.

 

E é assim que o script encontra a posição e os dados de que preciso sem problemas:

//+------------------------------------------------------------------+
//|2.mq5 |
//|Copyright 2023, MetaQuotes Ltd. |
//| https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Função de início do programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   for(int i=0; i<PositionsTotal(); i++)
     {
      if(PositionGetTicket(i))
         Print("Ticket = ",PositionGetInteger(POSITION_IDENTIFIER));
         Print("Price = ",PositionGetDouble(POSITION_PRICE_OPEN));
     }
  }
//+------------------------------------------------------------------+

Resultado:

2023.10.21 15:33:49.973 2 (EURUSDrfd,M1)        Ticket = 1029935900
2023.10.21 15:33:49.973 2 (EURUSDrfd,M1)        Price = 1.05...

Não importa se o mercado estava aberto ou fechado, se houve falta de energia ou não, se houve falta de internet ou não, essa variante funciona sem falhas. No entanto, para esse fim, temos que executar um ciclo que, segundo os especialistas, torna a execução do programa mais lenta.

Saudações, Vladimir.

 
Alexey Viktorov #:

Uma batida na cabeça é um acontecimento. E amanhã você não sentirá nada do tuk tuk de ontem.....

Acontece que uma transação no histórico é armazenada no servidor somente até o final da sessão de negociação? É isso mesmo?

Saudações, Vladimir.

 

Pare! E como, depois de um dia de negociação, o Expert Advisor ainda viu essa negociação (ou seja, uma posição aberta) e trabalhou de acordo com o algoritmo? Não, isso é uma coisa infernal!

Saudações, Vladimir.