Discussão do artigo "Ordens, posições e negócios no MetaTrader 5" - página 2

 

Торговыми событиями считаются следующие изменения на счете:

  • débito e cobrança de fundos;
  • cobrança de comissões, swaps e impostos;
  • definição, exclusão e modificação de ordens;
  • execução de transações com base em ordens;
  • abertura e fechamento de posições;
  • alteração do volume e da direção das posições.

A lista não inclui eventos de negociação como "modificação dos níveis de StopLoss e/ou TakeProfit" de uma posição aberta(SL & TP Modification). Ou isso é considerado um caso especial de "execução de negociações com base em ordens"?

 
Yedelkin:

A lista não inclui um evento de negociação como "modificação dos níveis de StopLoss e/ou TakeProfit" de uma posição aberta(SL & TP Modification). Ou isso é considerado um caso especial de "negociações baseadas em ordens"?

"Modificação dos níveis de StopLoss e/ou TakeProfit" em uma posição aberta(SL & TP Modification)" está mais próximo de "configuração, remoção emodificação de ordens".
  • definição, exclusão e modificação de ordens;
 
Rosh:
A "Modificação dos níveis de StopLoss e/ou TakeProfit" em uma posição aberta(Modificação de SL e TP)" está mais próxima da resposta.

Eu estava pensando sobre essa questão. Mas, na verdade, quando falamos de "definir, excluir e modificar ordens", estamos falando de definir, excluir e modificar ordens pendentes . A modificação dos níveis de SL e/ou TP de uma posição aberta é de natureza um pouco diferente, pois as solicitações correspondentes pertencem à categoria de "ordens de execução imediata ". Ou estou errado quanto à"execução imediata"?

 
Rosh:

O artigo dá um exemplo de carregamento do histórico de negociação de um dia (um código tem um exemplo de carregamento do histórico de 3 dias). Sim, essa é uma limitação e o exemplo não é universal. Mas se o leitor entender essa peculiaridade ao ler o artigo, ele poderá decidir por si mesmo a questão - para qual intervalo e a partir de qual momento ele precisa carregar o histórico de negociação no cache.

O leitor recebeu os exemplos e algoritmos mais simples e agora pode aplicá-los de forma independente nas funções de processamento de eventos necessárias. Ele pode criar de forma independente sua própria base de histórico de negociação e fazer sua inicialização e sincronização, e assim por diante.

Uma tentativa de fornecer receitas e funções específicas para o trabalho ideal com o histórico de negociação para todos os casos exigirá pelo menos mais um artigo. Mais precisamente, não os exemplos em si, mas as abordagens para resolver determinadas tarefas. O objetivo deste artigo foi entender como funcionam as funções de negociação e quais nuances devem ser observadas para não desperdiçar seu próprio tempo em pesquisas.

Tenho certeza de que, depois de ler o artigo, tudo ficará mais fácil daqui para frente.

Rashid, não estou menosprezando a utilidade do artigo.

É que, sem exemplos reais (aqueles que podem ser aplicados à elaboração de um EA), ele parece bastante referencial.

Sim, há informações úteis nele, e uma pessoa compreensiva poderá usá-las. Mas um usuário não sofisticado não conseguirá organizar o trabalho normal com o histórico depois de ler apenas esse artigo, ou seja, ele será inútil para ele.

 

Há essa parte no artigo:

"Por exemplo, aqui está um script que procura o último pedido do último dia e exibe informações sobre ele.

// --- definir os limites do histórico de negociação exigido
   datetime end=TimeCurrent();                 // hora atual do servidor
   datetime start=end-PeriodSeconds(PERIOD_D1);// definir o início para 24 horas atrás
//--- solicitar o histórico de negociação para o dia no cache do programa
   HistorySelect(start,end);
//--- obter o número de pedidos no histórico
   int history_orders=HistoryOrdersTotal();
//--- obter o tíquete do pedido do histórico que tem o último índice na lista
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
   if(order_ticket>0) // obter ordem histórica no cache, trabalhar com ela
     {
      //--- status do pedido
      ENUM_ORDER_STATE state=(ENUM_ORDER_STATE)HistoryOrderGetInteger(order_ticket,ORDER_STATE);
      long order_magic      =HistoryOrderGetInteger(order_ticket,ORDER_MAGIC);
      long pos_ID           =HistoryOrderGetInteger(order_ticket,ORDER_POSITION_ID);
      PrintFormat("Pedido #%d: ORDER_MAGIC=#%d, ORDER_STATE=%d, ORDER_POSITION_ID=%d",
                  order_ticket,order_magic,EnumToString(state),pos_ID);

     }
   else              // tentativa malsucedida de obter um pedido

     {
      PrintFormat("Total de %d pedidos no histórico, falha ao selecionar um pedido"+
                  " com índice %d. Erro %d",history_orders,history_orders-1,GetLastError());
     }

A descrição do script diz que a última ordem é pesquisada, mas o próprio código fala sobre a obtenção do tíquete que tem o último índice na lista de ordens históricas:

//--- obtenha o tíquete do pedido no histórico que tem o últimoíndice    в списке
   ulong order_ticket=HistoryOrderGetTicket(history_orders-1);
Ou seja, está implícito que é o tíquete com o índice máximo que se refere ao último pedido. Mas não encontrei em nenhum lugar dos materiais a garantia de que o último pedido sempre tenha o índice máximo na lista de pedidos históricos. ...Se, por exemplo, houver apenas um pedido na lista, não há dúvida. Mas se houver mais ordens na lista, podemos sempre confiar no método proposto para encontrar a última ordem? Em outras palavras, é sempre garantido que a última ordem histórica tenha o índice máximo na lista de ordens históricas?
 

Boa tarde!

1) Dei uma olhada nas propriedades de posição:

POSITION_PROFIT

o que é isso, em que é medido?

Exemplo:

double profit =PositionGetDouble(POSITION_PROFIT);

resultado:

Posição EURUSD #101470723: POSITION_MAGIC=0, preço da posição de abertura=1,30825, preço da posição de fechamento=1,30835, type=POSITION_TYPE_BUY, profit=-2061584302, comment=.

profit=-2061584302 como entender isso?

2) Alguém pode explicar de forma precisa, mas simples, como ler este registro

ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

Talvez a função PositionGetInteger(POSITION_TYPE) cis tenha solicitado o valor de uma propriedade chamada POSITION_TYPE para uma posição pré-selecionada, mas esse valor é retornado como um número de sequência de enumeração e, para representá-lo em uma forma digerível, obtemos esse valor digerível já da enumeração cis ENUM_POSITION_TYPE na variável type, cujo tipo é declarado como ENUM_POSITION_TYPE ao mesmo tempo?

Nesse caso, eu entendi corretamente que é possível escrever uma determinada classe por mim mesmo, o que, em termos de significado, se tornará uma função, aproximadamente

initialisation textPosition = that certain class; // no construtor que lê o buffer de posição e lembra de todos os parâmetros

e depois usar:

tekPriceOpening=tekPosition.PriceOpening;

tekDirectionPosition=tekPosition.DirectionPosition;

tekDirectionPosition=tekPosition.DirectionPosition;

tekProfitPosition=tekPosition.ProfitPosition;

Obrigado!

 
bivmail:

2) Alguém pode explicar exatamente, mas de forma simples, como ler esta entrada

ENUM_POSITION_TYPE type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);

A função PositionGetInteger("property identifier") retorna um valor do tipo long. Se o "identificador de propriedade" for de um tipo diferente de long (por exemplo, o identificador POSITION_TYPE é do tipo ENUM_POSITION_TYPE), é desejável converter o valor retornado pela função PositionGetInteger() em um valor do tipo necessário (ou seja, em um valor do tipo ENUM_POSITION_TYPE).

Em seu exemplo, é declarado o tipo de variável do tipo ENUM_POSITION_TYPE, ao qual é atribuído o valor do tipo ENUM_POSITION_TYPE, obtido como resultado da conversão explícita do valor do tipo long para o valor do tipo ENUM_POSITION_TYPE.

As regras de conversão de valores de tipos numéricos são descritas em MQL5 Reference Guide / Language Basics / Data Types / Type Casting / Casting Numeric Types

Документация по MQL5: Торговые функции / PositionGetInteger
Документация по MQL5: Торговые функции / PositionGetInteger
  • www.mql5.com
Торговые функции / PositionGetInteger - Документация по MQL5
 

Citação do artigo: "Quando a conexão com o servidor de negociação é perdida, o terminal periodicamente faz tentativas de restaurar a conexão".

Qual é a frequência das tentativas de restaurar a conexão?

 
A cada 5 segundos.
 

Entendi, obrigado.