Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 815
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
Só não consigo perceber se é normal que .
Há muitas coisas que são difíceis de entender aqui. Em particular, ao lidar com a sequência de transacções, descobri que existem algumas inconsistências em vários casos.
Na minha opinião, é melhor organizar o vosso controlo comercial: lembrem-se das vossas ordens comerciais e monitorizem a composição das ordens e posições simplesmente pelo facto da sua presença nas listas relevantes.Por exemplo, quando uma posição é aberta, uma ordem de mercado é formalmente aberta primeiro, que depois se transforma numa posição. No entanto, durante esta série de transacções com metralhadoras existe uma situação em que uma posição já foi aberta, mas a ordem ainda não foi fechada. É evidente que este é o mesmo evento, mas as transacções são organizadas de forma fragmentada, emitidas sequencialmente, e com esta abordagem é em princípio impossível reflectir correctamente a transformação de uma ordem de mercado numa posição.
Por falar em aves.
Sabia que as ordens do mercado são emitidas nestas transacções a um preço zero?
Por exemplo, uma pessoa quer abrir uma posição Buy em 1.2000, Sl=1.1000, Tr=1.3000.
Quando esta transacção é executada, a primeira coisa que aparece é onde a ordem do mercado é listada com os seguintes dados:
Sl= 1.1000, Tr= 1.3000, ou seja, com os números especificados e Price=0 (igual a zero). Apenas um tipo de ordem de mercado com preço zero :) E pense no que quiser.
Por conveniência. Uma pequena função é chamada da MqlTradeTransaction. O elemento requerido é aí encontrado através da procura de elementos da classe. E para este elemento, uma das funções da classe é chamada que faz algo de útil.
Por favor descreva com mais detalhes o que pretende obter exactamente? Por que razão se chama algo da OnTradeTransaction?
Primeiro apenas em palavras, depois vamos corrigi-lo na direcção certa.
A função Abc() do utilizador é executada, e implementa um longo (em termos de tempo) algoritmo.
Durante a execução desta função, alguns eventos têm lugar, por exemplo - Comércio, Temporizador, etc.
É possível saber que estes eventos ocorreram sem terminar a execução da função Abc()?
Não. Enquanto uma função estiver a contar, tudo o resto será ignorado.
É semelhante àfunçãoSleep()- ou seja, enquanto a sua função estiver a contar durante muito tempo, o seu comportamento é semelhante ao do sono - todos os outros eventos serão ignorados.
...
Absolutamente tudo é transparente na OnTradeTransaction.
Primeiro: aestrutura da MqlTradeTransaction é preenchida de forma diferente dependendo do tipo de transacção comercial (ENUM_TRADE_TRANSACTION_TYPE).
leia aqui:Estrutura de uma transacção comercial (MqlTradeTransaction)
Segundo: Para visualizar os resultados, podemos extrair este bloco de código do exemploOrderSendAsync
e colá-lo num Expert Advisor que pode ser anexado a um gráfico. Depois pode abrir/fechar posições manualmente e ver a impressão dos resultados no separador Especialistas.
Não. Enquanto uma função estiver a contar, tudo o resto será ignorado.
É análoga àfunçãoSleep()- ou seja, enquanto a sua função está a contar durante muito tempo, o seu comportamento é anflógico ao Sleep - todos os eventos restantes serão ignorados.
Obrigado, isso é lamentável.
E como utilizar o recurso do PC de forma eficaz nessa altura? Novamente código em loop e sondagem periódica de parâmetros?
Absolutamente tudo é transparente na OnTradeTransaction.
Obrigado pela resposta, foi praticamente o que eu fiz. Mais perguntas do que insights até agora...
Por favor descreva com mais detalhes o que pretende obter exactamente? Porque está a chamar algo da OnTradeTransaction?
Primeiro apenas em palavras, depois vamos corrigi-lo na direcção certa.
Compreendi que o problema não é com a OnTradeTransaction. Vejam a confusão que tenho aqui:
Aqui está o código.
E aqui está o resultado da sua execução
2017.09.22 10:30:12 Falha na selecção de posição por símbolo SBRF-12.17
2017.09.22 10:30:12 Volume 0,0 Volume 0,0
Eu troco as linhas 2 e 3. ou seja, o código é agora
Obtenho um resultado como este.
2017.09.22 10:30:12 Falha na selecção de posição por símbolo SBRF-12.17
2017.09.22 10:30:12 SBRF-3.18 Volume 1.0 SBRF-3.18 Volume 1.0
Em ambos os casos, não são gerados avisos pelo compilador. Em anexo encontra-se o código Expert Advisor de 80 linhas e definições de teste. Corretor BCS. A versão 1730.
Percebi que o problema não é com a OnTradeTransaction. Vejam só a confusão que tenho:
Aqui está o código.
E aqui está o resultado da sua execução
2017.09.22 10:30:12 Falha na selecção de posição por símbolo SBRF-12.17
2017.09.22 10:30:12 Volume 0,0 Volume 0,0
Eu troco as linhas 2 e 3. ou seja, o código é agora
Obtenho um resultado como este.
2017.09.22 10:30:12 Falha na selecção de posição por símbolo SBRF-12.17
2017.09.22 10:30:12 SBRF-3.18 Volume 1.0 SBRF-3.18 Volume 1.0
Em ambos os casos, não são gerados avisos pelo compilador. Em anexo encontra-se o código Expert Advisor de 80 linhas e definições de teste. Corretor BCS. A versão 1730.
O erro parece estar em tentar obter informações sobre mais de 1 posição, em 1 linha(Imprimir).
Apenas informação sobre 1 (seleccionado ) posição está disponível em qualquer altura :
- No segundo caso está correcto, porque o último Select retorna verdadeiro , o qual não verificou.
- E no primeiro caso : o último Select retorna falso , o que também não verificou, e o resultado é imprevisível.
..... obviamente Select===false repõe a informação do Select===verdadeiro