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

 

Jacques, aprecio seu interesse contínuo por esta linha. Ainda estou depurando minha EA para sua primeira moeda, mas pretendo usá-la em várias, se for considerado adequado. Com base nessa premissa, venho contemplando uma estratégia sobre como implementar essa noção. Assim, meu interesse por este fio condutor.


De acordo com seu pedido, preparei gráficos para mais três pares e, ao fazê-lo, descobri que dois dos pares tinham mais de 32.000 ticks em um período de 24 horas (o limite de dados gráficos em Excel). Como resultado, tive que quebrar o gráfico em dois períodos (1ª 12 horas, e 2ª 12 horas). Para manter as coisas relativamente consistentes, parti os três pares em períodos de 12 horas.


Uma coisa a ter em mente, a escala vertical nestes gráficos é proporcional entre as linhas horizontais, mas a escala horizontal NÃO é proporcional ao tempo (ou seja, não se pode assumir que 1/12 dos carrapatos representa uma hora).


Acho que o grande destaque destes gráficos é que todos os pares têm períodos em um período de 24 horas onde há intervalos significativos entre carrapatos. Como resultado, se você combinar vários pares em um único EA, acho que seria sábio empregar um loop "While". A referência do StraightTrader a https://book.mql4.com/special/index intitulada "General Characteristics of Complex Programs" tem uma boa discussão sobre esta técnica e um gráfico na seção de abertura deste artigo.


GBPJPY 44.834 ticks em 24 horas

EURJPY 37.140 ticks em 24 horas

GBPUSD 29.313 carrapatos em 24 horas

EURUSD 22.627 carrapatos em 24 horas













Abraço!

 
FXtrader2008:

Como resultado, se você combinar vários pares em um único EA, acho que seria sábio empregar um loop "While". A referência do StraightTrader a https://book.mql4.com/special/index intitulada "General Characteristics of Complex Programs" tem uma boa discussão sobre esta técnica e um gráfico na seção de abertura deste artigo.

Este é exatamente o caso. Múltiplos pares em uma EA -> usar enquanto se aproxima o loop em vez de iniciar a ativação da função de ativação por carrapatos incomuns.


Eu gostaria de estar em oposição a um par de moedas para um EA.

Minha longa abordagem temr é UM EA MULTICURRENCY MULTISTRATEGY. Eu preparei há algum tempo o esquema Universal Expert Advisor, que implementa algumas dessas idéias.

Mais tarde, não incluído em meu post, segui desenvolvendo este código e iniciei o projeto de código do Google chamado Universaltrader. Este projeto poderia atender às suas expectativas. A única coisa que não foi implementada ali é a abordagem do ciclo (fácil de implementar).


Algumas das vantagens da MULTICURRENCY MULTISTRATEGY EA:

  • todas as estratégias em conjunto
  • possível afinar/ajustar todas as estratégias em conjunto e também independentemente
  • possível ligar / desligar diferentes estratégias / pares de moedas
  • Tenho certeza de que há muito mais

desanviligia:

  • possibilidade de fazer o backtest de apenas um par de moedas de cada vez - você tem que fazer o backtest de tantas vezes quantos pares de moedas você está negociando, com os outros pares desligados
  • problema de desempenho - notei o problema de desempenho apenas no backtest, mas estou certo de que na comercialização real também é relevante - depende da complexidade das estratégias implementadas e do número delas.

Este projeto precisa ser melhorado ainda assim, se alguém tiver interesse, posso convidá-lo para este projeto de código Google.


Roteiro atual anexado aqui:

Arquivos anexados:
 
FXtrader2008 wrote >>

Jacques, aprecio seu interesse contínuo por esta linha. Ainda estou depurando minha EA para sua primeira moeda, mas pretendo usá-la em várias, se for considerado adequado. Com base nessa premissa, venho contemplando uma estratégia sobre como implementar essa noção. Assim, meu interesse por este fio condutor.

De acordo com seu pedido, preparei gráficos para mais três pares e, ao fazê-lo, descobri que dois dos pares tinham mais de 32.000 ticks em um período de 24 horas (o limite de dados gráficos em Excel). Como resultado, tive que quebrar o gráfico em dois períodos (1ª 12 horas, e 2ª 12 horas). Para manter as coisas relativamente consistentes, parti os três pares em períodos de 12 horas.

Uma coisa a ter em mente, a escala vertical nestes gráficos é proporcional entre as linhas horizontais, mas a escala horizontal NÃO é proporcional ao tempo (ou seja, não se pode assumir que 1/12 dos carrapatos representa uma hora).

Acho que o grande destaque destes gráficos é que todos os pares têm períodos em um período de 24 horas onde há intervalos significativos entre carrapatos. Como resultado, se você combinar vários pares em um único EA, acho que seria sábio empregar um loop "While". A referência do StraightTrader a https://book.mql4.com/special/index intitulada "General Characteristics of Complex Programs" tem uma boa discussão sobre esta técnica e um gráfico na seção de abertura deste artigo.

GBPJPY 44.834 ticks em 24 horas

EURJPY 37.140 ticks em 24 horas

GBPUSD 29.313 carrapatos em 24 horas

EURUSD 22.627 carrapatos em 24 horas

Abraço!

Muito obrigado por seus gráficos.

Vamos optar por um loop em vez de uma ativação do tick run, será mais científico para aqueles que precisam de precisão minuciosa e não é uma grande coisa a ser implementada. Outra vantagem é que você pode anexar o EA a qualquer par de moedas que desejar (é útil quando ele desenha objeto no gráfico).

Saúde

 
cloudbreaker wrote >>

E você pode recuperar os mais recentes preços de compra e venda de símbolos fora do gráfico atual, usando a função MarketInfo().

Portanto, você tem as seguintes opções.

- Tenha o mesmo EA anexado a muitos gráficos e operando para o símbolo nativo de cada gráfico (usando as variáveis Ask e Bid embutidas)

- Ter um EA anexado a um gráfico específico que executa para todos os símbolos escolhidos (com função MarketInfo() para símbolos não nativos) - usando apenas os carrapatos dos símbolos nativos como dispositivo de ativação

- Ter EAs de mestre e escravo anexados a diferentes gráficos onde um é acionado pelo outro (por exemplo, um escreve um valor em um arquivo, o outro lê constantemente o arquivo até encontrar esses dados e depois negocia)

Neste momento, estou usando a mais simples destas estratégias - tenho um EA em três períodos de tempo de quatro moedas, portanto doze ao todo. Todas elas estão programadas para funcionar no primeiro tick do período de tempo. No entanto, estou tendo um problema porque o MT4 nem sempre executa todas as EA. Coloquei uma declaração impressa logo após a função de início só para ver o que estava acontecendo, e estava chegando a apenas três dos quatro EA de H1, por exemplo, mas faltavam diferentes pares de tempos diferentes, e o EA era idêntico, exceto pelas configurações das otimizações para cada par.

Pergunta - o MT4 executa apenas uma EA de cada vez quando várias EA estão configuradas para funcionar simultaneamente? A execução de uma EA depende de alguma forma da execução de outra (além do contexto comercial estar ocupado), ou elas são completamente independentes?

Se assim for, eu poderia usar a segunda opção, estou apenas tentando manter a EA tão simples quanto possível, porque para mim, pelo menos, quanto mais complexidade eu escrevo, mais erros eu cometo.

 
joetrader:

Neste momento, estou usando a mais simples destas estratégias - tenho um EA em três períodos de tempo de quatro moedas, portanto doze ao todo. Todas elas estão programadas para funcionar no primeiro tick do período de tempo. No entanto, estou tendo um problema porque o MT4 nem sempre executa todas as EA. Coloquei uma declaração impressa logo após a função de início só para ver o que estava acontecendo, e estava chegando a apenas três dos quatro EA de H1, por exemplo, mas faltavam diferentes pares de tempos diferentes, e o EA era idêntico, exceto pelas configurações das otimizações para cada par.

Pergunta - o MT4 executa apenas uma EA de cada vez quando várias EA estão configuradas para funcionar simultaneamente? A execução de uma EA depende de alguma forma da execução de outra (além do contexto comercial estar ocupado), ou elas são completamente independentes?

Se assim for, eu poderia usar a segunda opção, estou apenas tentando manter a EA tão simples quanto possível, porque para mim, pelo menos, quanto mais complexidade eu escrevo, mais erros eu cometo.

Tenho vários EA's rodando em gráficos sem problemas como esse. Tanto quanto posso dizer, eles funcionam simultaneamente, somente quando notam um ao outro é que o contexto comercial é usado por um deles. Quanto à EA em si, ela é completamente independente - cada uma tem sua própria cópia de variáveis, etc. Deixe-me ver se entendi bem - você está executando 12 EA's anexados a 12 gráficos? Talvez você tenha problemas de memória?

 
gordon wrote >>

Tenho vários EA's rodando em gráficos sem problemas como esse. Tanto quanto posso dizer, eles funcionam simultaneamente, somente quando notam um ao outro é que o contexto comercial é usado por um deles. Quanto à própria EA, ela é completamente independente - cada uma tem sua própria cópia de variáveis, etc. Deixe-me ver se entendi bem - você está executando 12 EA's anexados a 12 gráficos? Talvez você tenha problemas de memória?

Certo. 12 EA's em 12 gráficos. Um computador bem novo com 6GB de memória, então eu não pensaria que seria memória, mas vale a pena considerar, e não vou descartar isso. Mas você respondeu minha pergunta - se os EA devem poder funcionar simultaneamente, então talvez eu esteja apenas fazendo algo errado. Não é a primeira vez! Vou verificar o código e estudar mais um pouco. Obrigado por sua ajuda.

 
Você está executando os gráficos em instâncias separadas do cliente MT4? Se você estiver abrindo todos os gráficos em uma instância, então eles estarão compartilhando um único contexto comercial e você precisará codificar na lógica para compartilhar esse contexto - se o comportamento de seus EAs significar que mais de um é provável que esteja realizando uma operação comercial ao mesmo tempo. CB
 
cloudbreaker wrote >>
Você está executando os gráficos em instâncias separadas do cliente MT4? Se você estiver abrindo todos os gráficos em uma instância, então eles estarão compartilhando um único contexto comercial e você precisará codificar na lógica para compartilhar esse contexto - se o comportamento de seus EAs significar que mais de um é provável que esteja realizando uma operação comercial ao mesmo tempo. CB

Sim - estou executando-as no mesmo cliente MT4. Mas estou usando uma das soluções de contexto comercial ocupado deste artigo https://www.mql5.com/en/articles/1412 e não recebo nenhum erro de contexto comercial ocupado.

Não parece nem chegar ao ponto de tentar abrir uma posição. Para alguns não parece começar a EA de forma alguma. Digo isto porque coloquei uma declaração impressa no início da minha função inicial.

Aqui está minha função inicial:

void start()
{
//---- go trading only for first ticks of new bar
if(Volume[0]>1) return;
Print("Tick Check");

if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
else CheckForClose();
}

Estou negociando em CADJPY,EURCHF,GBPUSD, & USDJPY

E eu entendo isso:

2010.01.22 8:59:45 [EAName]USDJPY,H1: Verificação de carrapato

2010.01.22 8:59:45 [EAName]CADJPY,H1: Verificação de carrapato

2010.01.22 8:59:45 [EAName]GBPUSD,H1: Verificação de carrapato

2010.01.22 9:59:45 [EAName]EURCHF,H1: Verificação de carrapato

2010.01.22 9:59:46 [EAName]GBPUSD,H1: Verificação de carrapato

2010.01.22 9:59:46 [EAName]CADJPY,H1: Verificação de carrapato

Algumas horas todas as quatro serão comercializadas, outras apenas três. Se for uma hora para os H4's negociarem, três deles poderão negociar, mas geralmente não todos os quatro junto com três ou quatro dos H1's.

Criei uma alternativa onde aumentei o volume para 3 ou 4 ticks só para ter certeza de que tudo é comercializado, mas estou tentando entender melhor o MetaTrader para poder resolver o problema raiz.

Então minha pergunta é - já que minha EA tem apenas um tick para correr, ela correria cada EA simultaneamente, e talvez seja por isso que nem todas elas estejam correndo? Tenho um loop em minha EA que se compara a 1500 dos fractais passados para encontrar um stopploss, o que pode levar algum tempo.

Mais uma vez, pode haver apenas um problema no meu código em algum lugar.

 
Acho que você tem um problema com seu código e isto não tem nada a ver com o assunto de múltiplas EA's. Você precisa identificar o problema para aqueles que não começam a usar os métodos padrão Print()/Alert() para ver o que não funciona.
 
tigersoft:
Aqui está um código simples para abrir EURUSD e USDCHF em um gráfico. Até mesmo ea é adicionado em outro gráfico para abrir EURUSD e USDCHF.

//+------------------------------------------------------------------+
//|                                                          jkh.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

bool wannaBuy = true;
bool wannaBuy1 = true;
extern double LotSize = 0.01;
extern string symbol1 = "EURUSD";
extern string symbol2 = "USDCHF";
extern int MaxDifference = 6;
extern int Slippage = 3;
extern int Magicnumber1 = 786;
extern int Magicnumber2 = 123;
int sendticket = 3;
string pairs[18];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
pairs[0] = symbol1;
pairs[1] = symbol2;
wannaBuy = true;
wannaBuy1 = true;

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   // Send order for EURUSD & USDCHF
   if (wannaBuy) {   
   int ticket1;
   RefreshRates();
   ticket1 = OrderSend(symbol1, OP_BUY, LotSize, MarketInfo(symbol1,MODE_ASK), Slippage, 0, 0, 0,0,Magicnumber1,0) & OrderSend(symbol2, OP_BUY, LotSize, MarketInfo(symbol2,MODE_ASK), Slippage, 0, 0, 0,0,Magicnumber2,0);
   if (ticket1 <0 )
   {
   Print ("OrderSend failed with error #", GetLastError());
   return(0);
   }
   wannaBuy = false;
   }

//----
   return(0);
  }
//+------------------------------------------------------------------+

não funciona?

para testes posteriores
obteve o erro de fim de pedido 4106

nome de símbolo desconhecido para USDCHF para a função de envio de pedidos

O orderend trabalha para EURUSD se eu escolher o símbolo EURUSD para a configuração ou o gráfico EURUSD.

Se eu mudar para outro gráfico, terei o símbolo desconhecido tanto para EURUSD quanto para USDCHF

Obrigado! com antecedência

Razão: