Como executar a EA para múltiplos pares? - página 2

 
mittalpa:

Eu acho que ambas as abordagens são boas.

A única coisa que eu gostaria de acrescentar é que a opção nº 2 tem mérito de desempenho devido a menos despesas gerais. Tudo ficará na memória, o que obviamente é mais rápido do que a operação do arquivo.

Uma vantagem para a opção #3 é se você quiser usar os dados do arquivo para algo que o MT4 não pode fazer.

Considere também que se você precisar construir um EA que possa se recuperar de quedas de energia etc. sem a intervenção do usuário para atualizar as condições de mercado etc., você se encontrará construindo a funcionalidade de acesso a arquivos de qualquer forma.

 
cloudbreaker wrote >>

Considere também que se você precisar construir um EA que possa se recuperar de quedas de energia etc. sem a intervenção do usuário para atualizar as condições de mercado etc., você se encontrará construindo a funcionalidade de acesso a arquivos de qualquer maneira.

Em minha experiência, você terá muitos problemas ao tentar construir um EA que negocie vários pares.

1. Cada par precisa de sua própria lógica personalizada, otimização e para alguns pares talvez até mesmo uma estratégia de negociação diferente. Eu escrevi EA's que foram otimizadas para um par em particular, ao ponto de negociar bem. Depois, quando tentei usá-lo em outro par que tem mais correlação com o primeiro par, fiquei surpreso que muitas coisas tiveram que ser mudadas para que o EA funcionasse e fosse otimizado para o segundo par. Descobri que cada par precisa de seu próprio conjunto completo de configurações personalizadas, valores indicadores e muitas vezes até mesmo mudanças na lógica e estratégia básica. Para mim, faz muito mais sentido criar uma EA muito flexível que tenha várias estratégias e ramos de lógica diferentes incorporados. Então é apenas uma simples questão de criar um novo arquivo .set ideal para cada par.

2. A EA que você deseja fazer não poderá ser testada e otimizada novamente no Strategy Tester. O teste e a otimização posteriores são essenciais em minha experiência. Há otimizações que melhoraram muito meu desempenho na EA que eu nunca poderia ter descoberto se não tivesse usado o Testador de Estratégia. Ele me deu coisas como configurações de indicadores que estavam tão longe do que é considerado por muitos como os valores mais úteis e ótimos para um determinado indicador, que eu nunca teria pensado em tentar valores próximos ao que os valores ótimos acabaram sendo. Pense em quantos parâmetros você tem em sua EA. Cada um deles precisa ser otimizado, e cada otimização de um parâmetro pode exigir uma mudança em outro parâmetro. É por isso que você não pode simplesmente otimizar cada parâmetro por si só. O objetivo na otimização é conseguir que todos os parâmetros sejam otimizados em relação uns aos outros da melhor maneira possível. Isso pode levar muito tempo e muito trabalho usando o equipamento de teste, mas é praticamente impossível fazer essas otimizações manualmente apenas mudando os parâmetros um por um.

Em outra nota, qualquer que seja a forma que você decida codificar sua EA, salvar seu estado EA ou outras informações para arquivar não é obrigatório na maioria dos casos, e não é a única opção. A melhor, mais eficiente e mais fácil maneira de fazer isso é salvar seu estado em Variáveis Globais. Afinal, essa é a própria razão pela qual o recurso de Variáveis Globais foi adicionado ao MT. Alguns de vocês também falaram em ter um EA extra criado com o único propósito de trocar dados armazenados no sistema de arquivos permitindo a troca de dados e a interação entre os dois EA's. Isto também é desnecessário. O intercâmbio de dados e até mesmo a capacidade de lógica condicional entre vários EA's é outra característica das Variáveis Globais. Isto permite que múltiplos EA's em diferentes gráficos tenham acesso aos dados de qualquer EA e usem esses dados para tomar decisões que possam efetuar uma mudança em outro EA. Esses dados são seguros e protegidos mesmo no caso de uma falha de computador ou falta de energia. Mas o que acontece em uma falha ou falta de energia quando você está no processo de salvar, ler ou trocar dados entre EA's e tem um ou dois arquivos abertos? Você pode muito provavelmente acabar com a falta de dados, corrupção de dados e os piores - arquivos de bytes zero ou nenhum arquivo. Com as Variáveis Globais nenhum desses problemas pode acontecer. Seu estado EA será exatamente como era no milissegundo antes de seu sistema cair. Agora a desvantagem dos GV's que todos falam é que eles não podem armazenar cordas, mas há algumas boas maneiras de contornar isso.

Primeiro de tudo, os GV's podem armazenar cordas se você usar o nome GV como valor da string, por exemplo GlobalVariableSet(Symbol() + "LastUptime=" + TimeLocal(), -1); Um problema com isso é que há um limite no comprimento dos nomes GV, então você não pode usar esse caminho para salvar cordas longas. Outra grande solução que eu uso o tempo todo é armazenar cordas nos campos de texto dos objetos gráficos. Você pode trabalhar com eles apenas com ordens, e GV's. Existem funções mql para obter a quantidade total de GV's e objetos gráficos, para que você possa então fazer um loop através de todos eles e encontrar aquele que você está procurando, novamente da mesma maneira que você faz um loop através de seus pedidos.

ADVERTÊNCIA - Agora estou seguindo um rastro de coelho aqui sobre outras maneiras legais de como os objetos gráficos podem melhorar suas funções de negociação... sair um pouco do tópico, mas pode ser útil...

Há coisas muito mais úteis que você pode fazer com objetos gráficos. Por exemplo, um dos meus EA's tem um recurso opcional de cobertura. Quando o hedging é ativado, é claro que não há nenhuma perda de parada real em qualquer nova ordem colocada, porque quando o hedging é feito no mesmo símbolo, o objetivo é abrir uma ordem oposta se a primeira ordem passar o que a perda de parada normal seria e a primeira ordem precisa permanecer aberta. Portanto, seu código precisaria saber o que é o stop loss e monitorar o negócio para que ele possa abrir o hedge quando a primeira ordem atingir o preço de stop loss, e caso haja algum mal-entendido a razão pela qual não podemos usar um stop loss real na ordem é porque então a ordem seria fechada o que, naturalmente, não faria nenhum hedge. Mas com objetos gráficos você pode fazer com que isso funcione melhor e fazer com que pareça exatamente o mesmo para o usuário como um stop loss real. O que você faz é isto: Quando você faz o pedido, ao mesmo tempo cria um objeto de linha horizontal com o preço param = até o preço de stop loss. O nome do objeto de linha é "Order #" + OrderTicket; a descrição é "StopLoss @ " + SLPrice. Defina o estilo da linha para STYLE_DASHDOT, cor para vermelho e você tem uma linha de stop loss que se parece exatamente com a coisa real. O código para fazê-lo funcionar também é fácil. Toda a informação que você precisa já está armazenada no objeto de linha - o ticket de pedido# e o preço do SL, que é o valor do objeto de linha. Então você faz uma função que verifica se o preço atual atinge ou vai além da linha. Quando isso acontece, você recebe o ticket# que foi salvo no campo do nome da linha. Então você encontra a ordem aberta que tem o mesmo ticket. Selecione o pedido para ver se é um pedido de Compra ou Venda e também obtenha o tamanho do Lote. Agora você tem todas as informações necessárias para abrir seu pedido de hedge. Você abre um novo pedido oposto ao primeiro e com o mesmo tamanho de lote. O passo final é apagar a linha de stop loss. Quando você a vê funcionar, é muito legal porque agora você pode ver quando você está chegando perto de ser "Coberto".

Outra vantagem é que se você acha que seu pedido pode simplesmente chegar, se o preço parece que pode voltar a seu favor, mas você só precisa de um pouco mais de espaço, então basta arrastar um pouco a linha SL/Hedge para cima. Você não gostaria de poder fazer isso com as linhas SL e TP padrão? Isso seria uma grande novidade se eles fizessem o stop loss e tirassem linhas de lucro móveis para que pudéssemos fazer ajustes rápidos quando o mercado estiver realmente em movimento. É claro que você pode fazer isso hoje nos seus EA usando as etapas acima e um bom benefício é que o corretor nunca veria seu SL ou TP. O lado negativo é que se seu computador for desligado, você não terá nenhum SL ou TP do servidor. Mas o mesmo é verdade para robôs como o FapTurbo. Seu método 'furtivo' é colocar valores falsos de SL e TP nas ordens e fechar as ordens a partir do código ou modificar a ordem com os valores corretos de SL e TP no último minuto quando o preço está chegando perto.

 
Jacques366:

Olá,

Prefiro ter em mente que ainda estamos trabalhando em processamento em tempo real, então esqueço de usar a função de loop ou de espera para manter a mão na comunicação!

Anexar seu EA a um par como o EURUSD fornece sinais suficientes para gerenciar todos os outros pares, os ticks são muito freqüentes. Não é uma questão de minutos, mas de segundos (executar um loop por 2 minutos soa muito louco para mim). Se não é uma questão de segundo, basta pensar por que ou ver com outro corretor.

Se você realmente precisa mais do que o que receberá ao anexar sua EA ao eurusd, pense em executar uma instância separada de sua EA anexada a cada moeda. Desculpe, mas eu tendo a pensar "ou repensar seu sistema".

Desculpe se achar que este post é um pouco abrupto. Gostaria de compartilhar com você meu ponto de vista.

Boa sorte.

Sou um programador novato, portanto, por favor, considere este um cenário "e se" para fins de discussão:


Eu percebo que é má programação criar um loop sem fim com nada produtivo no loop, ou se isso o impede de executar o restante de sua EA, mas e se você criar um loop sem fim contendo o corpo de sua EA. Eu não entendo bem a programação MQL4 para entender completamente seu comentário "mantenha a mão na comunicação". Se você lançar ordens comerciais através de um script independente, você terá problemas de comunicação se a EA continuar a funcionar em um loop interminável?


Eu continuo brincando com a idéia de usar um loop interminável e emitir ordens de negócios através de scripts autônomos porque confiar em ticks EURUSD recebidos para executar o EA pode levar a alguns atrasos prolongados. Por exemplo, entre 0700 e 0800 GMT de hoje, a espera mais longa teria sido de 31 segundos, mas no final do dia, perto do final da sessão de Nova Iorque, a espera pode levar até 2 minutos para um tick de entrada --- Ainda não verifiquei a sessão asiática, mas suspeito que ela também tenha alguns intervalos prolongados entre os ticks.


Se você colocar o corpo de sua EA em um loop infinito, poderá facilmente controlar a freqüência de atualização de todas as moedas que você está negociando e não sacrificar nenhum atraso. De fato, você pode ter que colocar uma declaração de sono de 100-250 milissegundos no laço para atrasá-lo um pouco se 50 passar pelo EA em 1 segundo for um entorpecimento mental.


Agradeço todo o feedback.

 
vangrosh wrote >>

ADVERTÊNCIA - Agora estou seguindo um rastro de coelho aqui sobre outras formas legais de objetos gráficos poderem melhorar suas funções comerciais... sair um pouco do tópico, mas pode ser útil...

brilhante!

 
vangrosh:

Em minha experiência, você vai ter muitos problemas ao tentar construir uma EA que negocia múltiplos pares.

Isto é realmente muito legal e certamente apresentarei a maior parte disto à minha EA.

Algumas coisas que eu já decidi.
1. Apenas um par por EA.
2. Apenas um pedido por par. (Isto pode mudar mais tarde, mas vou me ater a isto até me tornar proficiente o suficiente).

Muito obrigado por compartilhar suas experiências douradas.

Pankaj
 

Este gráfico mostra o intervalo de tempo entre os ticks para EURUSD em 29 de abril de 2009. Eu não sei que fuso horário estes dados representam. Os dados dos carrapatos foram baixados de Gain Capital.

Como você pode ver, há alguns períodos durante o dia em que o intervalo entre as carrapatas freqüentemente excede um minuto e ocasionalmente dois minutos.



 
vangrosh:

Então é apenas uma simples questão de criar um novo arquivo .set ideal para cada par.

vangrosh: Como você cria e usa um arquivo .set? Não consegui encontrar nenhuma referência para esse tipo de arquivo.

 
cloudbreaker wrote >>

Considere também que se você precisar construir um EA que possa se recuperar de quedas de energia etc. sem a intervenção do usuário para atualizar as condições de mercado etc., você se encontrará construindo a funcionalidade de acesso a arquivos de qualquer maneira.

Por favor, dê uma olhada aqui: https://book.mql4.com/special/index

Características gerais de programas complexos


O caminho a seguir se você gostaria de criar EAs multi cirrências.

 
StraightTrader:

Por favor, dê uma olhada aqui: https://book.mql4.com/special/index

Características gerais de programas complexos


O caminho a seguir se você gostaria de criar EAs multi cirrências.

Obrigado pela referência.

 
FXtrader2008 wrote >>

Este gráfico mostra o intervalo de tempo entre os ticks para EURUSD em 29 de abril de 2009. Eu não sei que fuso horário estes dados representam. Os dados dos carrapatos foram baixados de Gain Capital.

Como você pode ver, há alguns períodos durante o dia em que o intervalo entre as carrapatas freqüentemente excede um minuto e ocasionalmente dois minutos.

Obrigado pelo gráfico. Seria bom combiná-lo com o de algumas outras moedas, apenas para garantir que você não tenha os mesmos atrasos. (Agradeço se você puder apresentar facilmente os gráficos para, digamos, 4 pares).

Acabo de observar, quando comecei a construir minha EA, que quando não tenho carrapatos durante 1 ou 2 minutos em eurusd, então é o mesmo para outras moedas. Talvez tenha sido apenas um perigo naquela época ou uma má aceitação que fiz, mas mantive esta idéia e minha EA está funcionando há meses, sem nenhum problema. A experiência factual compensa a falta de lógica e eu mantive minha EA trabalhando assim. Se eu tivesse encontrado problemas eu teria implantado sua solução, quero dizer, sua idéia de manter sua EA acordada com apenas um atraso entre duas corridas. Logicamente é assim que deve ser feito, tanto quanto sei : mas não sei como os carrapatos são gerados pelos corretores, por isso é difícil ir mais longe.

Também é 'normal' ou 'melhor' codificar de acordo com o sistema dentro de seu programa em execução.

Assim, permitindo o tratamento de múltiplas moedas, normalmente devemos ser capazes de anexar nossa EA a um canal que forneça todos os carrapatos. Isso é uma falta na lógica do sistema com a qual temos que lidar de uma forma ou de outra.

Atenciosamente

Razão: