Características da linguagem mql5, subtilezas e técnicas - página 70
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
Fórum sobre negociação, sistemas de negociação automatizados e testes de estratégia de negociação
Como identificar um substituto de gráfico?
fxsaber, 2018.02.08 12:39
Zero parâmetro de entrada ChartID em algumas funções não causa recálculo de valores. Se você quiser dados reais do gráfico atual, você precisa usar a identificação completa.
Fórum sobre negociação, sistemas de negociação automatizados e testes estratégicos
POSITION_TICKET != IDENTIFICADOR_DE_POSIÇÃO
fxsaber, 2018.02.12 20:14
Conclusões
Se assumirmos que este é um comportamento normal do MT5 e não uma peculiaridade do hack do corretor, então
Pontos fracos
ZZY Hipótese totalmente confirmada.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
POSITION_TICKET != IDENTIFICADOR_DE_POSIÇÃO
Pavel Kolchin, 2018.02.12 13:31
(não sei ao certo, difícil de verificar, semelhante ao fechamento parcial da posição)
Tudo funciona assim:
1) ordem pendente acionada parcialmente - posição com Position_ID = Order_Ticket1 é aberta
2) a ordem restante é formada em uma nova ordem Order_Ticket2 e está aguardando sua execução; a nova Order_Ticket2 != Order_Ticket1 pois não pode haver 2 ordens com a mesma Order_Ticket na história
3) a ordem restante foi executada - uma posição com Position_ID = Order_Ticket2 é aberta
há duas ordens no histórico, duas posições no terminal, tudo corresponde
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Discussão sobre "LifeHack for trader: misturando ForEach on define (#define)".
fxsaber, 2018.02.14 10:54
Medição de desempenho
Resultado
Eu estava totalmente errado! SymbolInfoDouble é duas vezes mais lento do que SymbolInfoTick.
Fórum sobre negociação, sistemas de negociação automatizados e testes de estratégia de negociação
Discussão sobre "LifeHack for trader: misturando ForEach on define (#define)".
fxsaber, 2018.02.14 11:58
Incompetente. Resultado em Testador.
Onde o desempenho é necessário (Optimizer), é melhor usar o SymbolInfoDouble. No mundo real, não faz diferença.
Função ZZY A medição da velocidade deve ser feita num ambiente onde o desempenho é importante - Testador.
Fórum sobre negociação, sistemas de negociação automatizados e testes de estratégia de negociação
Bugs, bugs, perguntas
fxsaber, 2018.02.12 23:10
Abertura da posição BUY à mão em dois servidores de demonstração de negociação
RoboForex-MetaTrader 5
FXOpen-MT5
As linhas da mesma cor indicam a mesma coisa. No entanto, vê-se claramente que eles estão em ordem diferente. Para Robo, a mensagem sobre a execução da ordem vem após a execução da operação. Em aberto vem ANTES! Por este motivo, a OrderSend devolve a sorte, mas nenhuma transação ainda. Isto é, recebemos pedidos não sincronizados com o histórico.
Código para FXOpen-MT5
Resultado
Esta situação tem a seguinte explicação
Fórum sobre negociação, sistemas de negociação automatizados e testes estratégicos
Bugs, bugs, perguntas
Rashid Umarov, 2018.02.15 06:25
Se uma ordem é enviada para um sistema de trading externo, o servidor de trading MetaTrader 5 não espera por uma resposta do mesmo e retorna imediatamente o resultado do pedido como "ordem colocada". Por este motivo, a OrderSend devolverá sempre o negócio=0, pois ainda não há informação sobre o negócio executado. Apanhe-o na OnTrade ou OnTradeTransaction.
Um exemplo de ouvinte de eventos comerciais é dado no artigo Where to start when creating a trading robot for MOEX - TradeTransactionListener.mq5
OrderSend - envia uma ordem para executar uma operação de mercado.A ordem é colocada- precisamos ler Result.order. Mas ninguém espera pelo(s) acordo(s) - pode haver muitos deles e o tempo total da sua execução não está definido.
Depende da implementação específica do resultado do lado do corretor. No caso geral, não está definido.
Por isso, recomendo vivamente usar a conta demo no FXOpen-MT5 como um teste para o seu código, porque ela se destaca de outras demos.
Por exemplo, sugiro tentar escrever um script em MQL5 com tal lógica de negociação (estilo MQL4 apenas para visualização de sentido rápido)
Não é nada fácil. Também recomendo o servidor de demonstração mencionado para trabalhar na execução parcial.
Apagou um post que dava uma explicação de um dos erros mais comuns no MT5.
O posto era grande. Não esperava ser apagado. Eu gostaria de ouvir a razão para a remoção. Porque é masoquista ser apagado novamente.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Organização de um ciclo de encomendas
fxsaber, 2018.02.16 09:40
As coisas não estão a correr nada bem no MT5. Exemplo mostrando o problema
Você acha que se você executar este script em um símbolo sem posições, o que vai acabar acontecendo?
A resposta correta é que uma ou duas posições serão abertas.
A razão pela qual isto acontece. Após o primeiro OrderSend, uma ordem de mercado aparece e se um novo tick chega antes do momento de sua execução, ainda não há posição e o segundo OrderSend é feito.
Devido a isso, um padrão MT5 aparentemente normalnão funcionará adequadamente e, como consequência, a maioria dos Expert Advisors MT5 em codobase. Ao mesmo tempo, o modelo quase idêntico do MT4 continuará a funcionar sem qualquer problema.
A ideia aparentemente boa do PositionsTotal é um pouco ofuscada pela necessidade do MT5 de também analisar OrdensTotal para ordens de mercado.
Tenha cuidado!
Devido a isso, um padrão MT5 aparentemente normalnão funcionará adequadamente e, como consequência, a maioria dos MT5 EAs na kodobase.
Como prova desta afirmação podemos levar quase qualquer Expert Advisor na kodobase MT5. Não vamos escolher algo, mas sim o último Expert Advisor no momento. É bom que tenha sido escrito por um autor com uma grande experiência de MT5-publicação em QB.
O código fonte tem as seguintes cordas (os meus comentários são destacados)
Temos uma situação idêntica à descrita acima.
Fórum sobre negociação, sistemas de negociação automatizados e testes estratégicos
Peculiaridades da linguagem mql5, dicas e truques
fxsaber, 2018.02.16 19:52
Após a primeira OrderSend aparece uma ordem de mercado e se um novo tick chega antes da sua execução então ainda não há posição e uma segunda OrderSend é feita.
A ideia aparentemente boa do PositionsTotal é de certa forma obscurecida pela necessidade de o MT5 também analisar OrdensTotal para ordens de mercado.
Isso significa que no caso geral, em vez de uma posição, o Expert Advisor abrirá duas, três, etc. Dependendo da frequência com que os ticks são recebidos e do tempo de execução das ordens de mercado.
Como quase todos os EAs MT5 no kodobase são escritos com a mesma lógica do modelo MT5, eles também têm o mesmo bug que está contido nele. Isto é verdade para quase todos os MT5 EAs em KB, infelizmente.
Em uma rede pode haver uma posição aberta e várias ordens de mercado de qualquer direção no mesmo símbolo, ao mesmo tempo. Por exemplo, uma posição COMPRAR e uma ordem COMPRAR. É verdade, não consegui encontrar tal conta demo, porque havia uma regra com assíncrono por todo o lado.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Bugs, bugs, perguntas
fxsaber, 2018.02.14 08:58
Toda a sequência de eventos da OnTradeTransaction vem após a conclusão do OrderSend.
EA
Envio manual de uma ordem comercial.
Diário de Bordo
2018.02.14 09:41:46.671 '8854170': instant sell 1.00 EURUSD at 1.23673 2018.02.14 09:41:46.853 '8854170': accepted instant sell 1.00 EURUSD at 1.23673 2018.02.14 09:41:46.853 '8854170': deal #192088422 sell 1.00 EURUSD at 1.23673 done (based on order #208541700) 2018.02.14 09:41:46.853 '8854170': order #208541700 sell 1.00 / 1.00 EURUSD at 1.23673 done in 190.608 ms
Resultado do Expert Advisor
Podemos ver perfeitamente pela coluna de tempo e pelos dados numéricos da EA que a duração da execução da ordem de negociação não tem efeito na sequência de eventos da OnTradeTransaction. Toda a assíncronia vai para o inferno! Conseguiram estragar tudo tão mal. Construir 1755.
Por exemplo, quando a ordem de mercado OrderSendAsync é colocada no Terminal, a ordem de mercado não aparece nem por um momento. Talvez os desenvolvedores tenham decidido fazer isso para acelerar um pouco as coisas.
Fórum sobre negociação, sistemas de negociação automatizados e testes de estratégia de negociação
Discussão sobre o artigo "Visualizando a otimização da estratégia comercial no MetaTrader 5".
fxsaber, 2018.02.22 08:39
No modo frame, OnInit, OnDeinit, OnTick, OnTrade, OnTradeTransaction e OnTimer são ignorados. Apenas o OnChartEvent funciona.
Claro que, devido à excepção OnChartEvent, requer uma verificação obrigatória para a bandeira do modo de enquadramento.