Discussão do artigo "Eventos de negociação no MetaTrader 5" - página 3

 

Renat:
Конечно после принятия сервером - это же очевидно. Кроме того, функция называется OrderSEND.

OK, estou vendo!

Quanto à "obviedade", isso é principalmente para aqueles que estão trabalhando com o sistema há mais de um ano. Eu me deparei com a questão de saber se a frase do livro de referência (para a função OrderSend() "in case of a successful basic check of structures, true is returned") pode ser considerada como uma condição suficiente para retornar true. Acontece que não, ela não pode: é apenas uma condição necessária, mas não suficiente.

 
Interesting:
Na minha opinião, você não deve tirar conclusões apenas do true, deve analisar também o código de resposta do servidor (e o último é de maior prioridade, ao que me parece)...

Sim, essas poucas horas me fizeram sentir como se um véu tivesse caído: não há código para "verificação bem-sucedida da estrutura de base" (vamos chamá-lo assim) entre os códigos de retorno, e é por isso que true não pode ser retornado imediatamente após a verificação de base.

Quanto à análise detalhada do código de retorno, sim, ela é recomendada no livro de referência. Eu apenas continuo procurando maneiras de reduzir razoavelmente o número de verificações disponíveis.

 

Você pode explicar o que isso significa. O mandado foi colocado na fila de espera?

A seguinte situação

2011.01.26 12:59:26 Network '716201': conexão com MetaQuotes-Demo perdida
2011.01.26 12:59:26 Trades '716201' : falha na compra instantânea de 1.00 EURUSD a 1.37136 [Sem conexão]
2011.01.26 12:58:40 Trades '716201' : compra instantânea de 1.00 EURUSD a 1.37136
2011.01.26 12:56:17 Network '716201': terminal sincronizado com MetaQuotes Software Corp.

Negociação manual: pressiono Comprar no mercado sem stops e TP. Uma mensagem é exibida, a ordem é colocada na fila... a conexão é interrompida... é restaurada... a ordem não é executada.

O que é essa fila? Onde ela está localizada? Se a ordem já foi aceita pelo servidor, por que ela não é executada? Motivo?

 
Os links são para o site russo!
 
Belo artigo, de fato.
 
void CheckStartDateInTradeHistory()
  {
//--- intervalo inicial, como se tivéssemos começado a trabalhar agora mesmo
   datetime curr_start=TimeCurrent()-days*PeriodSeconds(PERIOD_D1);
//--- certifique-se de que o limite inicial do histórico de negociação não foi ultrapassado 
//--- mais de 1 dia após a data pretendida
   if(curr_start-start>PeriodSeconds(PERIOD_D1))
     {
      //--- devemos corrigir a data de início do histórico a ser carregado no cache 
      start=curr_start;
      PrintFormat("New start limit of the trade history to be loaded: start => %s",
                  TimeToString(start));

      //--- agora carregue novamente o histórico de negociações para o período corrigido
      HistorySelect(start,end);

      //--- corrigir o número de negócios e pedidos no histórico para comparação posterior
      history_orders=HistoryOrdersTotal();
      deals=HistoryOrdersTotal();
     }
  }

está vendo as duas últimas linhas?

Elas deveriam ser:

history_orders=HistoryOrdersTotal(); // ok, parece correto

deals=HistoryDealsTotal(); //um erro de digitação, talvez?

 

O artigo fala sobre eventos de negociação assíncronos, quando o recebimento de um tíquete de ordem ao enviar uma solicitação com a função OrderSend() e o aparecimento da ordem no terminal podem não coincidir no tempo. Tudo está claro aqui. No outono passado, as pessoas foram aconselhadas a superar essa assincronia adormecendo por três segundos. Mas qual é o tempo garantido em que o valor do tíquete e o próprio pedido aparecerão no terminal (depois que o servidor aceitar o pedido)? Posso esperar por 20 segundos, se necessário, mas gostaria de saber qual é o período de tempo garantido para assegurar essa "sincronização manual".

 

Muito obrigado. Isso realmente me ajudou a resolver algumas confusões.

Atenciosamente,

Umer Aziz