Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 814

 
Há alguma forma de impedir que estas caixas de verificação inseparáveis - novos objectos - preencham a minha lista de objectos uma e outra vez?
 
User_mt5:
Há alguma forma de impedir que estas caixas de verificação inseparáveis - novos objectos - preencham a minha lista de objectos uma e outra vez?

Aqui, nas definições, remover as notícias e recarregar o terminal


 
User_mt5:
Há alguma forma de impedir que estas caixas de verificação inseparáveis - novos objectos - preencham a minha lista de objectos uma e outra vez?
Não é necessário voltar a carregar nada. No calendário, desmarcar "Apagar todos os eventos", depois desmarcar "Actualizações automáticas".
 
Kirill Belousov:

Aqui nas definições, remover as notícias e reiniciar o terminal


Kirill, muito obrigado. Caso contrário o meu perito percorre os objectos - percorre-os uma e outra vez.
Obrigado.

 

Estou a tentar aprender a utilizar a função OnTradeTransaction.

Quando o utilizo no testador, vejo o seguinte problema. Uma ordem é aberta e consequentemente a OnTradeTransaction é chamada. Neste momento, obtenho o tamanho da posição dentro da OnTradeTransaction utilizando a classe CPositionInfo. Tudo está bem. Depois na mesma chamada chamo outra função directamente da OnTradeTransaction e aí CPositionInfo devolve zero, ou seja, não é o que eu preciso. Mais alguns minutos depois tentei obter o tamanho da posição no OnTimer, mas lá estava tudo bem, isto é, 1. É claro que a posição não foi fechada e aberta novamente ao longo de toda a história.

Pergunta. Porque é que a CPositionInfo devolve na OnTradeTransaction o que precisa, mas noutra função chamada da OnTradeTransaction devolve 0 em vez do volume da posição.


Aqui estão os registos. (Posição aberta às 10:30:12 fechada às 10:48:53)

Isto desencadeia uma ordem.

2017.09.22 10:30:12 encomenda [#3 limite de compra 1.00 SBRF-3.18 em 19352] desencadeada

A OnTradeTransaction é chamada três vezes. CPositionInfo em cada chamada o volume da posição é igual a 1. Na última chamada de TRADE_TRANSACTION_HISTORY_ADD eu chamo a função.

2017.09.22 10:30:50 Synmvo =SBRF-3.18 TRADE_TRANSACTION_DEAL_ADD order=3 order_type=ORDER_TYPE_BUY state=ORDER_STATE_STARTED Price=19352.0 deal=2 deal_type=DEAL_TYPE_BUY Position direction POSITION_TYPE_BUY Volume 1.0
2017.09.22 10:30:50 Synmvo =SBRF-3.18 TRADE_TRANSACTION_ORDER_DELETE order=3 order_type=ORDER_TYPE_BUY_LIMIT state=ORDER_STATE_FILLED Price=19352.0 deal=0 deal_type=DEAL_TYPE_BUY Position direction POSITION_TYPE_BUY Volume 1.0
2017.09.22 10:30:50 Synmvo =SBRF-3.18 TRADE_TRANSACTION_HISTORY_HISTORY_ADD order=3 order_type=ORDER_TYPE_BUY_LIMIT state=ORDER_STATE_FILLED Price=19352.0 deal=0 deal_type=DEAL_TYPE_BUY Position direction POSITION_TYPE_BUY Volume 1.0

Numa função chamada da OnTradeTransaction.

2017.09.22 10:32:50 Há uma posição 0.0 no símbolo citado SBRF-3.18 em direcção a POSITION_TYPE_BUY

Depois de algum tempo a tentar obter volume novamente no OnTimer

2017.09.22 10:40:00 In OnTimer Symbol=SBRF-3.18 Volume=1.0

Fecha posição

2017.09.22 10:48:53 encomenda [#5 limite de venda 1.00 SBRF-3.18 em 19435] desencadeada

 
pivomoe:

Estou a tentar aprender a utilizar a função OnTradeTransaction.

Quando o utilizo no testador, vejo o seguinte problema. Uma ordem é aberta e consequentemente a OnTradeTransaction é chamada. Neste momento, obtenho o tamanho da posição dentro da OnTradeTransaction utilizando a classe CPositionInfo. Tudo está bem. Então na mesma chamada chamo outra função directamente da OnTradeTransaction e CPositionInfo lá devolve zero, ou seja, não é o que eu preciso. Mais alguns minutos depois tentei obter o tamanho da posição no OnTimer, mas lá estava tudo bem, isto é, 1. É claro que a posição não foi fechada e aberta novamente ao longo de toda a história.

Eis a minha pergunta. Porque é que a CPositionInfo devolve o que eu preciso na OnTradeTransaction mas noutra função chamada da OnTradeTransaction, devolve 0 em vez do volume da posição.


Aqui estão os registos. (Posição aberta às 10:30:12 fechada às 10:48:53)

Isto desencadeia uma ordem.

2017.09.22 10:30:12 encomenda [#3 limite de compra 1.00 SBRF-3.18 em 19352] desencadeada

A OnTradeTransaction é chamada três vezes. CPositionInfo em cada chamada o volume da posição é igual a 1. Na última chamada de TRADE_TRANSACTION_HISTORY_ADD eu chamo a função.

2017.09.22 10:30:50 Synmvo =SBRF-3.18 TRADE_TRANSACTION_DEAL_ADD order=3 order_type=ORDER_TYPE_BUY state=ORDER_STATE_STARTED Price=19352.0 deal=2 deal_type=DEAL_TYPE_BUY Position direction POSITION_TYPE_BUY Volume 1.0
2017.09.22 10:30:50 Synmvo =SBRF-3.18 TRADE_TRANSACTION_ORDER_DELETE order=3 order_type=ORDER_TYPE_BUY_LIMIT state=ORDER_STATE_FILLED Price=19352.0 deal=0 deal_type=DEAL_TYPE_BUY Position direction POSITION_TYPE_BUY Volume 1.0
2017.09.22 10:30:50 Synmvo =SBRF-3.18 TRADE_TRANSACTION_HISTORY_HISTORY_ADD order=3 order_type=ORDER_TYPE_BUY_LIMIT state=ORDER_STATE_FILLED Price=19352.0 deal=0 deal_type=DEAL_TYPE_BUY Position direction POSITION_TYPE_BUY Volume 1.0

Numa função chamada da OnTradeTransaction.

2017.09.22 10:32:50 Há uma posição 0.0 no símbolo citado SBRF-3.18 em direcção a POSITION_TYPE_BUY

Depois de um tempo a tentar obter volume novamente no OnTimer

2017.09.22 10:40:00 In OnTimer Symbol=SBRF-3.18 Volume=1.0

Fecha a posição

2017.09.22 10:48:53 encomenda [#5 limite de venda 1.00 SBRF-3.18 em 19435] desencadeada

E porquê utilizar CPositionInfo se existe a estrutura MqlTradeTransaction com toda a informação sobre encomenda, negócio e posição?

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура торговой транзакции
  • www.mql5.com
Например, при отсылке рыночного ордера на покупку он обрабатывается, для счета создается соответствующий ордер на покупку, происходит исполнение ордера, его удаление из списка открытых, добавление в историю ордеров, далее добавляется соответствующая сделка в историю и создается новая позиция. Все эти действия являются торговыми транзакциями...
 

Por conveniência. Uma pequena função é chamada da MqlTradeTransaction. Encontra o elemento necessário através da procura de elementos da classe. Então, uma das funções da classe é chamada para este elemento e faz algo de útil.

 
pivomoe:

Por conveniência. Uma pequena função é chamada da MqlTradeTransaction. O elemento necessário é aí encontrado através da procura de elementos da classe. Uma das funções da classe é chamada para este elemento e faz algo de útil.

Aparentemente, é necessário alterar todo o algoritmo para o fazer. O problema está muito mal descrito. Se precisou de algumas aulas sem utilizar a OnTradeTransaction, não precisa de algumas aulas utilizando a OnTradeTransaction. É exactamente por isso que diz

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

FAQ de Iniciantes MQL5 MT5 MetaTrader 5

Alexey Viktorov, 2017.12.30 09:04

E porquê utilizar CPositionInfo quando existe a estrutura MqlTradeTransaction onde se encontram todas as informações de encomenda, negócio e posição?


 
Não é um problema alterar o algoritmo. Só não consigo perceber se CPositionInfo retorna 1, depois 0, depois 1 novamente após a abertura da posição (estamos a falar do tamanho da posição). Embora a história mostre que a posição não foi fechada nem aberta novamente.
Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
A função personalizada Abc() é executada, o que implementa um algoritmo longo (no tempo).
Durante a execução desta função, ocorrem eventos, por exemplo - Comércio, Temporizador, etc.
É possível saber que estes eventos ocorreram sem terminar a execução da função Abc()?