Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
Use-o.
Este é um bom exemplo. Mas eu tenho uma pergunta. E se a OnTradeTransaction() não devolver os dados sobre o processamento de pedidos? Bem, eles podem estar perdidos de alguma forma. O servidor o enviou, mas o terminal não o recebeu. Quanto é garantido que receberei o número necessário da função OnTradeTransaction() para 100% dos pedidos enviados e todos os relatórios de transação chegarão ao terminal (estou interessado em transaction.type = TRADE_TRANSACTION_REQUEST principalmente).
Porque se eu não obtiver esta resposta (por causa da quebra de conexão, por exemplo), eu não limparei a bandeira e tudo ficará de pé.
Eu não verifiquei, mas talvez depois de encomendar TODOS os EAs receba o evento correspondente para a OnTradeTransaction.
Então tudo é resolvido sem muletas e para múltiplos EAs no mesmo símbolo.
Este é um bom exemplo. Mas aqui está uma pergunta que me incomoda. E se a OnTradeTransaction() não devolver os dados de processamento de pedidos? Bem, eles podem estar perdidos de alguma forma. O servidor o enviou, mas o terminal não recebeu. Quanto é garantido que receberei o número necessário da função OnTradeTransaction() para 100% dos pedidos enviados e todos os relatórios de transação chegarão ao terminal (estou interessado em transaction.type = TRADE_TRANSACTION_REQUEST principalmente).
Porque se eu não obtiver esta resposta (por causa da quebra de conexão, por exemplo) não removerei a bandeira e tudo ficará de pé.
Eu tive várias vezes que o evento da OnTradeTransaction não ocorreu,
portanto, escrevi uma função que verifica o estado dos pedidos usando um timer com um período de 0,5 segundos.
A implementação complica o código geral do Expert Advisor, mas não há 100% de garantia quando se trabalha pela Internet,
que tudo vai funcionar como um relógio.
Adicionado por
Tive a idéia de verificar aqui
https://www.mql5.com/ru/blogs/post/557544
Eu tive várias vezes que o evento da OnTradeTransaction não aconteceu,
Portanto, escrevi uma função que verifica o estado dos pedidos usando um timer com um período de 0,5 segundos.
A implementação complica o código geral do Expert Advisor, mas não há 100% de garantia quando se trabalha pela Internet,
que tudo vai funcionar como um relógio.
Adicionado por
Tive a idéia de verificar aqui
https://www.mql5.com/ru/blogs/post/557544
Parece-me que o cara está tentando quebrar uma porta aberta, criando códigos mágicos especiais para cada transação. Existe um order_id pelo qual um pedido pode ser identificado de forma única.
Ou estou perdendo a razão?
Parece-me que o cara está quebrando uma porta aberta ao criar códigos mágicos especiais para cada comércio. Há um order_id que pode ser usado para identificar de forma única o pedido.
Ou estou perdendo a razão?
Sim, há um order_id, mas infelizmente às vezes os eventos não chegam à OnTradeTransaction
(Eu o tive várias vezes pessoalmente).
E então onde "colocar" o order_id ?
Adicionado por
Aqui, houve um atraso na resposta do servidor hoje
2016.12.28 14:04:56.443 (GOLD-3.17,M1) CheckOrders: Задержка ответа сервера. Ожидание продолжается...
Sim, há um order_id, mas infelizmente às vezes os eventos não vêm na OnTradeTransaction
(Eu o tive algumas vezes pessoalmente).
Onde "encher" o order_id então ?
Adicionado por
Aqui, hoje houve um atraso na resposta do servidor
2016.12.28 14:04:56.443 (GOLD-3.17,M1) CheckOrders: Задержка ответа сервера. Ожидание продолжается...
Tive um "desconcerto" diferente no outro dia.
2016.12.23 15:04:02.924 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction EURUSD Retcode = 10009. Slippage = 1631.
2016.12.23 15:04:02.924 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction EURUSD Position is closed in 59699 mksec.
2016.12.23 15:04:02.924 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction EURUSD Retcode = 10009. Slippage = 1631.
2016.12.23 15:04:02.924 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction EURUSD Position is closed in 59712 mksec.
2016.12.23 15:04:02.992 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction GBPUSD Retcode = 10009. Slippage = 1379.
2016.12.23 15:04:02.992 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction GBPUSD Position is closed in 127691 mksec.
2016.12.23 15:04:02.992 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction All reposts are checked. Direction = 0
2016.12.23 15:04:02.993 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction Unexpected transaction request.
2016.12.23 15:04:02.993 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction EURGBP Retcode = 10009. Slippage = -40993.
2016.12.23 15:04:02.993 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction EURGBP Position is closed in 1339448077 mksec.
2016.12.23 15:04:02.993 TriArbTrader_8-4 (EURGBP,H1) 1111 OnTradeTransaction All reposts are checked. Direction = -1
Enviei três pedidos e há um registro claro disso em meu diário de bordo. Depois disso, a função OnTradeTransactions() TRADE_TRANSACTION_TYPE foi chamada quatro vezes.
O código de função começa com verificações:
const MqlTradeRequest& request,
const MqlTradeResult& results)
{
if(transaction.type == TRADE_TRANSACTION_REQUEST && request.action == TRADE_ACTION_DEAL)
{
if(request.magic == ExpertMagic)
{
Ou seja, somente TRADE_TRANSACTION_REQUIEST com seu próprio selo de especialista pode ir para dentro, onde as impressoras ficam...
O Helpdesk começou a me convencer de que eu tenho dois EAs idênticos de pé (obviamente no mesmo gráfico, a julgar pelo registro). E então eles disseram: "você é um tolo, conserte os erros do código".
Em resumo, de acordo com eles não pode ser. Mas o registro mostra claramente que o evento veio quatro vezes.
Sim, há um order_id, mas infelizmente às vezes os eventos não vêm na OnTradeTransaction
(Eu o tive algumas vezes pessoalmente).
Onde "encher" o order_id então ?
Adicionado por
Aqui, hoje eu tive um atraso na resposta do servidor.
2016.12.28 14:04:56.443 (GOLD-3.17,M1) CheckOrders: Задержка ответа сервера. Ожидание продолжается...
Mas, de qualquer forma, ainda não entendo por que não podemos procurar por encomenda por ticker? É muito fácil verificar quais das ordens que enviamos não chegaram à TradeTransaction. E depois basta olhar para o status do pedido com este bilhete na história.
Embora, o histórico de pedidos mostra apenas os pedidos com o status FILLED.
E ainda não está claro por que a ordem não pode ser procurada por um carrapato? Afinal de contas, é fácil verificar qual ordem não chegou à TradeTransaction. E depois basta olhar para o status da ordem com este ticker na história.
Embora, quando tentei pessoalmente, no histórico do pedido, só existiam pedidos com o status FILLED.
Sim, porque a ordem pode não estar na história(ordem pendente, etc.)
Adicionado
E você tem o código errado
Sim, porque a ordem pode não estar na história(ordem pendente, etc.)
Adicionado por
E você tem o código errado
O que há de errado aí? Quantos erros você pode cometer em duas linhas de código.
O que está errado aí? Quantos erros podem ser cometidos em duas linhas de código.
Não dois, um :)
TRADE_TRANSACTION_REQUEST é necessário quando você usa OrderSendAsymc para obter o bilhete de pedido.