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
Enquanto esperamos por um artigo sobre este assunto, compreendo correctamente o conceito geral de análise de operações comerciais.
Isto é, grosso modo, depois de enviar uma ordem sem analisar o código retc, proibimos operações comerciais no circuito de trabalho (OnTick()) usando a bandeira "AllowTrade".
A proibição de comércio só é desbloqueada no OnTrade() depois de o número de encomenda ter sido encontrado e de ter sido feita alguma análise do seu destino.
Temos duas questões:
1. Qual é o bilhete de encomenda a ser verificado no OnTrade? Quais são os estados finais na sua vida útil?
2. Eu sei que a fila de eventos Tick (OnTick) pode "cair". Ou seja, se outro evento Tick chegar e a função OnTick (do Tick anterior) ainda não tiver terminado o seu trabalho, o evento actual será "largado", ou seja, não será processado. Existe uma abordagem semelhante com eventos comerciais (OnTrade)? Isto é, é possível que, por exemplo, no laço principal eu coloque uma proibição de comércio e o evento OnTrade na ordem recém enviada "cai", porque no momento da sua chegada eu ainda estarei processando algo no mesmo tick que o envio da ordem comercial correspondente?
Ainda não lidei com este tópico, mas eis o que diz o Manual:
Ainda não lidei com este tópico, mas eis o que diz o Manual:
Geralmente entendido. Como opapaklass já assinalou e disse no artigohttps://www.mql5.com/ru/articles/232:
Só há uma forma garantida de descobrir exactamente o que mudou numa conta comercial. Assim, é recordar o estado do comércio e da história comercial e comparar o novo estado com o estado salvo.
Mais um bloco de serviço no Expert Advisor. :(
Na verdade, a questão é esta. Podemos reduzir o tamanho do código sem analisar todas as variáveis (encomendas/contratos/posições), e concentrarmo-nos apenas no número de encomenda obtido a partir do resultado do OrderSend? Ou este número pode ser não único/não estar reflectido na história?
Claro que sim. Se um pedido comercial resultar na recepção de um bilhete de encomenda, então este bilhete é único, e todo o destino da encomenda pode ser rastreado por ele.
Aqui pode ver como o bilhete de encomenda é utilizado no histórico: Referência MQL5 / Funções de negociação / HistoryOrderGetInteger
Claro que sim. Se um pedido comercial tiver resultado num bilhete de encomenda, então esse bilhete é único e pode ser utilizado para seguir todo o destino da encomenda.
Uma variável do tipo MqlTradeResult é normalmente zerada antes de ser utilizada. Portanto, o campo Result.order contém valor zero. Nunca vi este campo ter um valor diferente após o envio sem sucesso de um pedido comercial.
voix_kas: Если не возражаете, хотелось бы углубиться в вопрос интерпритации кодов возврата. Из 30 задекларированных вариантов ответа (будем надеятся, что с недекларированными мы не столкнёмся) 24 - указывают на явный отказ в размещении ордера. Остальные 6:
1. TRADE_RETCODE_PLACED Assumir que não há ordens pendentes. Esta resposta é possível durante a negociação no mercado (SYMBOL_TRADE_EXECUTION_MARKET)?
TRADE_RETCODE_DONE Nada mais pode ser verificado. Tudo correu exactamente como o Conselheiro Especialista pediu.
3. TRADE_RETCODE_DONE_PARTIAL Assumo que esta resposta é a mesma que TRADE_RETCODE_DONE dado o modo ORDER_FILLING_IOC.
4. TRADE_RETCODE_ORDER_CHANGED Isto significa uma rejeição inequívoca da nossa ordem comercial?
5. TRADE_RETCODE_LOCKED Penso que este é o pior caso. O que devemos fazer neste caso? Sugiro que o número de encomenda ainda não está disponível. O fluxo comercial é intenso. Não podemos negociar, e não é claro como devemos saber se o fluxo comercial está desbloqueado.
6. TRADE_RETCODE_FROZEN Significa isto uma rejeição inequívoca da nossa ordem comercial?
Por favor, comente cada item.
Infelizmente, o meu conhecimento não é suficiente para um comentário completo sobre cada ponto. Bem, se algo acontecer, os meus colegas irão corrigi-lo.
1. O fórum mencionou uma vez uma situação em que uma conta de negociação pode ser aberta com um sub-corretor. Neste caso, o sub-empresário pode enviar o pedido comercial para processamento posterior (ao corretor) e enviar TRADE_RETCODE_PLACED para o terminal do cliente. Não se sabe se o corretor acabará por processar um pedido comercial deste tipo.
2. Sim, eu também penso assim. A única coisa que devemos lembrar é que a informação sobre esta encomenda será recebida na base de dados do terminal de forma assíncrona.
Penso que estamos a falar da execução parcial de um pedido comercial nos modos ORDER_FILLING_IOC e ORDER_FILLING_RETURN.
4. https://www.mql5.com/ru/forum/1111/page124#comment_18407
5. Não sei absolutamente nada sobre este código. Tecnicamente, verifica-se que o pedido não foi processado devido a algumas razões internas do corretor. Se será processado mais tarde não é claro. Eu próprio equiparo este código à rejeição de um pedido comercial.
6. https://www.mql5.com/ru/forum/1111/page123#comment_18372
..E em geral - tente uma pesquisa por palavra-chave do fórum. Pode encontrar muito mais informações :)
Infelizmente, não tenho conhecimento suficiente para comentar plenamente cada um dos pontos. Bem, se alguma coisa, os colegas irão corrigi-la.
1. O fórum mencionou uma vez uma situação em que uma conta de negociação pode ser aberta com um sub-corretor. Neste caso, o sub-empresário pode enviar o pedido comercial para processamento posterior (ao corretor) e enviar TRADE_RETCODE_PLACED para o terminal do cliente. Não se sabe se o corretor acabará por processar um pedido comercial deste tipo.
2. Sim, eu também penso assim. A única coisa que devemos lembrar é que a informação sobre esta encomenda será recebida na base de dados do terminal de forma assíncrona.
Penso que estamos a falar da execução parcial de um pedido comercial nos modos ORDER_FILLING_IOC e ORDER_FILLING_RETURN.
4. https://www.mql5.com/ru/forum/1111/page124#comment_18407
5. Não sei absolutamente nada sobre este código. Tecnicamente, verifica-se que o pedido não foi processado devido a algumas razões internas do corretor. Se será processado mais tarde não é claro. Eu próprio equiparo este código à rejeição de um pedido comercial.
6. https://www.mql5.com/ru/forum/1111/page123#comment_18372
..E em geral - tente uma pesquisa por palavra-chave do fórum. Pode encontrar muito mais informações :).
Aqui temos o seguinte: 26 dos 30 códigos (incluindo TRADE_RETCODE_ORDER_CHANGED e TRADE_RETCODE_FROZEN) representam uma recusa explícita do pedido (não gera uma ordem).
TRADE_RETCODE_DONE e TRADE_RETCODE_DONE_PARTIAL - ordem criada garantida.
Como executar correctamente TRADE_RETCODE_PLACED (não pendente) e TRADE_RETCODE_LOCKED é uma questão. Os comentários da MQ sobre estes dois códigos seriam apreciados.