Pergunta sobre a função OnTradeTransaction - página 6

 
Mikalas:

Não, as transações não se perdem, elas simplesmente podem não vir em uma determinada seqüência.

Somente TRADE_TRANSACTION_REQUEST vem sempre em primeiro lugar, caso contrário, você não receberá o bilhete de pedido.

Leia a documentação CARAVEGAMENTE.

Michael, desculpe, mas me pareceu que você só respondeu ao último post, e é como consequência de tudo o que foi descrito no primeiro desta página.

E é estranho ouvir que você recomenda a leitura de documentação. Eu o li, reli e li novamente.

O que você quer dizer com "Warrant Ticket"? Eu não vejo isso na documentação.

 
AlexeyVik:

Michael, sinto muito, mas me pareceu que você só respondeu ao último post, e isso foi uma conseqüência de tudo o que foi descrito no primeiro desta página.

E parece estranho ouvir sua recomendação de ler a documentação. Eu o li, reli e li novamente.

O que você quer dizer com "bilhete de pedido"? Não o vi na documentação.

Um bilhete de ulong é um número único que é atribuído a um pedido.

Este número não mudará durante a vida útil do pedido, assim como na história.

Obtemos informações sobre o pedido utilizando o tikcet.

 
Mikalas:

Um bilhete de ulong é um número único que é atribuído a um pedido feito.

Este número não muda durante toda a vida útil do pedido, bem como na história.

Recebemos informações sobre o pedido utilizando o tikcet.

Obrigado, Mikhail. Na verdade, presumi que você se referia ao bilhete do pedido. Mas deveria ter sido mais preciso.


Mas ainda assim, o comportamento dos bilhetes é bastante estranho.

Exemplo: Bilhetes e volumes de corrida no testador.

Abrimos uma posição em Buy 0.1 lot, Ticket 2. SellStop 0,78 Ticket 3 é colocado.

Quando SellStop é ativado, a posição é deixada com 0,68; ordem 3 com o volume 0,78 e o lucro negativo aparece no histórico.

Ao mesmo tempo, há uma posição com bilhete 4

E não está absolutamente claro para onde a perda da posição com o bilhete 2 desapareceu.


Em geral, nem sempre podemos acreditar no que está escrito. Porque não está completamente escrito.

Se uma posição abre com uma ordem pendente, o bilhete permanece, mas se a ordem fecha outra, a nova ordem é criada.

 

A mesma coisa acontece com o bilhete se a posição e a ordem pendente estiverem na mesma direção. O bilhete muda.


 
AlexeyVik:

Aparentemente, isto é a perda das transações... e, antes de mais nada, (recorte da documentação)

Vasily, isto é um testador ou uma demonstração? Eu tenho amostras do testador. Será que existe uma diferença entre a OnTradeTransaction acionando no testador e na conta? Vou verificar na ocasião.

Esta é uma demonstração. Talvez o modelo do evento seja diferente no testador e em tempo real.

 

Tenho vários bots em MT5 em Forts. Incluindo vários no mesmo instrumento. Eu utilizo para determinar quantos contratos o "robô" tem, percorrendo a história dos ofícios. Tudo isso basicamente funciona. Eu decidi tentar usar aOnTradeTransaction. A idéia de como implementá-la é simples - quando chega um negócio, procuramos quantos contratos são comprados ou vendidos e que bot fez o negócio (usando comentários especiais ao negócio ou Número Mágico) e salvamos estas informações em um arquivo. A questão é esta. Se tivermos a OnTradeTransaction em cada EA, como será chamada sequencialmente ou em paralelo? Suponha, por exemplo, que um acordo tenha sido executado - muitos eventos ocorreram e a OnTradeTransaction será constantemente chamada em cada bot para cada evento? Ou seja, é mais fácil fazer um manipulador da OnTradeTransaction que será responsável por todos os bots? Se alguma coisa, eu não sou um programador, embora já tenha programado muitas coisas. O código pode ser foleiro, mas eu sempre o faço funcionar corretamente.

 
votor:

Tenho vários bots em MT5 em Forts. Incluindo vários no mesmo instrumento. Eu utilizo para determinar quantos contratos o "robô" tem, percorrendo a história dos ofícios. Tudo isso basicamente funciona. Eu decidi tentar usar aOnTradeTransaction. A idéia de como implementá-la é simples - quando chega um negócio, procuramos quantos contratos são comprados ou vendidos e que bot fez o negócio (usando comentários especiais ao negócio ou Número Mágico) e salvamos estas informações em um arquivo. A questão é esta. Se tivermos a OnTradeTransaction em cada EA, como será chamada sequencialmente ou em paralelo? Suponha, por exemplo, que um acordo tenha sido executado - muitos eventos ocorreram e a OnTradeTransaction será constantemente chamada em cada bot para cada evento? Ou seja, é mais fácil fazer um manipulador da OnTradeTransaction que será responsável por todos os bots? Se alguma coisa, eu não sou um programador, embora já tenha programado muitas coisas. O código pode ser foleiro, mas eu sempre o faço funcionar corretamente.

Sim, a OnTradeTransaction trabalhará em cada EA. Eles devem ser filtrados por símbolo e se houver mais de um Expert Advisor sobre um símbolo, então por magik.

 

Obrigado por sua resposta. Já o verifiquei e vejo que funciona em todos os EAs. A questão é (talvez seja uma pergunta estúpida) se todas essasOnTradeTransactions são processadas em todos os EAs em série, primeiro em um EA, depois no próximo, etc., em vez de em paralelo, certo? Isso significa que, como seu processamento é sequencial(?), é melhor fazer um manipulador para todos os bots e filtrar o que precisamos nele.

 
votor:

Obrigado por sua resposta. Já o verifiquei e vejo que funciona em todos os EAs. A questão é (talvez seja uma pergunta estúpida) se todos esses postosda OnTradeTransaction em todos os EAs funcionam sequencialmente, primeiro em um EA, depois no próximo, etc., em vez de paralelos, certo? Quero dizer, como seu processamento é sequencial(?), seria melhor criar um manipulador para todos os bots e filtrar o que precisamos nele.

Ainda não verifiquei, mas parece não haver regularidade. É como quem se levantou primeiro, não deixa nenhuma pedra por virar. E é possível que, se você se levantar ao mesmo tempo, então cada um o chinelo.

Até agora me parece a melhor opção para filtrar por símbolo e mágico. Cujo cargo ele escreve informações sobre o assunto.

 

Algo que eu não sou bom em explicar, aparentemente. Aqui está um exemplo da vida real. Aqui está o código:

nulo OnTradeTransaction(const MqlTradeTransaction& trans,

const MqlTradeRequest& request,

const MqlTradeResult& result)

{

Conta +++;

Print("Ontrade_test = ",Count);

}

O manipulador é implementado em dois Expert Advisors para que seja executado várias vezes em dois Expert Advisors quando uma operação é realizada. O código sai:

18:31:06.495 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 1

18:31:06.495 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 1

18:31:06.497 ontrade_trans_functions (MXI-12.17,H1) Ontrade_test = 2

18:31:06.497 ontrade_trans_functions2 (MXI-12.17,M5) Ontrade_test = 2

18:31:06.498 ontrade_trans_functions (MXI-12.17,M5) Ontrade_test = 3

18:31:06.498 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 3

18:31:06.500 ontrade_trans_functions (MXI-12.17,M5) Ontrade_test = 4

18:31:06.500 ontrade_trans_functions2 (MXI-12.17,H1) Ontrade_test = 4 ...

e assim por diante.

Você pode ver que o tempo de resposta da OnTradeTransaction nos dois Expert Advisors é o mesmo em milissegundos. Então, tenho uma pergunta: o evento comercial chega primeiro a uma OnTradeTransaction em uma EA e depois a outra em outra EA ou chega de alguma forma a todos os manipuladores de todas as EA de uma só vez? Bem, é como uma operação paralela com múltiplas roscas ou o que quer que se chame na programação. Tenho certeza de que tudo acontece sequencialmente, é processado em apenas um milissegundo, mas eu perguntei apenas por precaução.

Razão: