Como executar a EA para múltiplos pares?

 
Hi
Sou novo no Forex e no MetaTrader e estou tentando descobrir algumas noções básicas.
Assumindo que tenho um EA que está anexado a um gráfico de EURUSD, MAS quero encontrar configurações em múltiplos pares desse EA. Mas o EA só funciona quando um novo tick para o EURUSD chega. Certo? Agora eu vejo isso como a característica limitante do MT, pois meu EA pode processar para muitos pares, mas inicia apenas com o novo tick do par anexo (EURUSD, neste caso). Isto provavelmente resulta em carrapatos perdidos de pares soltos. Daí a seguinte pergunta...

A EA pode correr para múltiplos pares, sem se apegar a um gráfico? Se não, então o que é trabalhar para o problema acima? Por favor, informe.

Obrigado
Pankaj
 

É assim mesmo que funciona o mt4. Acho que não há trabalho para isto. Mas uma coisa me veio agora à cabeça. Se você conseguir que o EURUSD marque pelo menos 1-2 minutos antes da vela nova (digamos que é a vela H1) você pode correr enquanto procura por novas velas em outros pares. Neste caso, se o novo tick para EURUSD não chegar nem por 5 minutos ou mais, o loop já está funcionando e você recebe todas as velas novas em outros pares. Espero que você entenda isto.

Mas a pergunta é: por que você precisa disto? É melhor rodar a EA em gráficos diferentes, pois a EA rodando em EURUSD não seria capaz de executar uma troca em outro par.

 

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.

 
wrm:

É melhor executar a EA em gráficos diferentes, pois a EA rodando em EURUSD não seria capaz de executar uma negociação em outro par.

Isso não é correto. A função OrderSend() pode ser executada para qualquer símbolo que você especificar como primeiro parâmetro, independente do gráfico.

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)

 
cloudbreaker:

Isso não é correto. A função OrderSend() pode ser executada para qualquer símbolo que você especificar como primeiro parâmetro, independente do gráfico.

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)


Muito perspicaz. Graças a todos vocês. Irei com a 2ª opção, pois esta combina com o que eu pensava antes.


wrm: Eu quero manter as coisas o menos possível. Se tecnicamente possível, manterei apenas um EA. A única razão para manter uma EA separada é no caso de eu precisar traçar um gráfico, que eu não preciso.


Obviamente, testarei quando a EA estiver presente. Se não funcionar do jeito que eu quero, então eu o mudarei.

 
//+------------------------------------------------------------------+
//|                                                          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);
  }
//+------------------------------------------------------------------+
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.
 
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.

Bastante limpo. Obrigado, tigersoft.

 
cloudbreaker:

Isso não é correto. A função OrderSend() pode ser executada para qualquer símbolo que você especificar como primeiro parâmetro, independente do gráfico.

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)


Olá, você poderia desenvolver a opção nº 3?


E também, como os cálculos de preço/indicador funcionariam com símbolos não nativos usando a opção nº 2? Entendo o envio de pedidos a símbolos não nativos, mas não como verificar as condições de entrada em símbolos não nativos.

 
skyhr:

Olá, você poderia desenvolver a opção nº 3?


E também, como os cálculos de preço/indicador funcionariam com símbolos não nativos usando a opção nº 2? Entendo o envio de pedidos a símbolos não nativos, mas não como verificar as condições de entrada em símbolos não nativos.

Use a função MarketInfo() para símbolos não nativos. É um amigo :)

 
skyhr:

Olá, você poderia desenvolver a opção nº 3?


E também, como os cálculos de preço/indicador funcionariam com símbolos não nativos usando a opção nº 2? Entendo o envio de pedidos a símbolos não nativos, mas não como verificar as condições de entrada em símbolos não nativos.

Opção 3 - basta escrever um valor em um arquivo de um EA monitorando um determinado símbolo. Tenha outro EA monitorando esse arquivo e execute uma determinada peça de lógica quando esse valor estiver presente.

Opção 2 - Use a função MarketInfo() para recuperar os preços de compra e venda de símbolos não nativos em vez de usar as variáveis Ask e Bid, que são boas apenas para o símbolo nativo.

 
cloudbreaker:

Opção 3 - basta escrever um valor em um arquivo a partir de um símbolo específico da EA monitorando um determinado símbolo. Tenha outro EA monitorando esse arquivo e execute uma determinada peça de lógica quando esse valor estiver presente.

Opção 2 - Use a função MarketInfo() para recuperar os preços de compra e venda de símbolos não nativos em vez de usar as variáveis Ask e Bid que são boas apenas para o símbolo nativo.

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.

Razão: