Come eseguire l'EA per più coppie?

 
Ciao
Sono nuovo del Forex e di MetaTrader e sto cercando di capire alcune basi.
Supponendo di avere un EA che è collegato a un grafico di EURUSD, MA voglio trovare setups in più coppie da quell'EA. Ma l'EA funziona solo quando arriva un tick fresco per EURUSD. Giusto? Ora vedo questo come una caratteristica limitante di MT in quanto il mio EA può elaborare per molte coppie ma inizia solo con il tick fresco della coppia collegata (EURUSD in questo caso). Questo probabilmente si traduce in tick mancati di coppie non collegate. Da qui la seguente domanda

L'EA può funzionare per più coppie, senza collegarsi a un grafico? Se no, allora qual è la soluzione al problema di cui sopra? Per favore consigliatemi.

Grazie
Pankaj
 

È solo il modo in cui funziona mt4. Penso che non ci sia una soluzione per questo. Ma questa cosa mi è venuta in mente proprio ora. Se si ottiene il tick di EURUSD almeno 1-2 minuti prima della nuova candela (diciamo che è la candela H1) è possibile eseguire il ciclo while per cercare nuove candele su altre coppie. In questo caso se il nuovo tick per EURUSD non arriva nemmeno per 5 minuti o più, il ciclo while è già in esecuzione e si ottengono tutte le nuove candele su altre coppie. Spero che tu capisca questo.

Ma la domanda è: perché hai bisogno di questo? È meglio eseguire l'EA su diversi grafici, poiché l'EA in esecuzione su EURUSD non sarebbe in grado di eseguire un trade su un'altra coppia.

 

Ciao a tutti,

Preferisco tenere a mente che stiamo ancora lavorando in tempo reale, quindi dimentico di usare il ciclo while o la funzione wait per tenere la mano sulla comunicazione!

Attaccare il tuo EA a una coppia come EURUSD ti fornisce abbastanza segnali per gestire tutte le altre coppie, i tick sono molto frequenti. Non è una questione di minuti, ma di secondi (eseguire un ciclo per 2 minuti mi sembra davvero folle). Se non è una questione di secondi, basta pensare al perché o vedere con un altro broker.

se hai davvero bisogno di più di quello che otterrai attaccando il tuo EA a eurusd, pensa di eseguire istanze separate del tuo EA attaccato ad ogni valuta. Scusa ma tendo a pensare "o ripensa il tuo sistema".

Scusate se questo post è un po' brusco. Volevo condividere con voi il mio punto di vista.

Buona fortuna.

 
wrm:

È meglio eseguire l'EA su grafici diversi in quanto l'EA in esecuzione su EURUSD non sarebbe in grado di eseguire un trade su un'altra coppia.

Questo non è corretto. La funzione OrderSend() può essere eseguita per qualsiasi simbolo specificato come primo parametro, indipendentemente dal grafico.

E puoi recuperare i prezzi di domanda e offerta più recenti per i simboli al di fuori del grafico corrente usando la funzione MarketInfo().

Quindi hai le seguenti opzioni.

- Avere lo stesso EA collegato a molti grafici e operare per il simbolo nativo di ogni grafico (usando le variabili integrate Ask e Bid)

- Avere un EA collegato a un grafico specifico che esegue per tutti i simboli scelti (con la funzione MarketInfo() per i simboli non nativi) - usando solo i tick del simbolo nativo come dispositivo di attivazione

- Avere EA master e slave collegati a diversi grafici dove uno è innescato dall'altro (es. uno scrive un valore in un file, l'altro legge costantemente il file finché non trova questi dati e poi negozia)

 
cloudbreaker:

Questo non è corretto. La funzione OrderSend() può essere eseguita per qualsiasi simbolo specificato come primo parametro, indipendentemente dal grafico.

E puoi recuperare i prezzi di domanda e offerta più recenti per i simboli al di fuori del grafico corrente usando la funzione MarketInfo().

Quindi hai le seguenti opzioni.

- Avere lo stesso EA collegato a molti grafici e operare per il simbolo nativo di ogni grafico (usando le variabili integrate Ask e Bid)

- Avere un EA collegato a un grafico specifico che esegue per tutti i simboli scelti (con la funzione MarketInfo() per i simboli non nativi) - usando solo i tick del simbolo nativo come dispositivo di attivazione

- Avere EA master e slave collegati a grafici diversi dove uno è innescato dall'altro (ad esempio, uno scrive un valore in un file, l'altro legge costantemente il file finché non trova questi dati e poi negozia)


Molto perspicace. Grazie a tutti voi. Andrò con la 2a opzione perché corrisponde a quello che ho pensato prima.


wrm: Voglio mantenere le cose il meno possibile. Se tecnicamente possibile, manterrò un solo EA. L'unica ragione per mantenere un EA separato è nel caso in cui ho bisogno di tracciare un grafico, cosa di cui non ho bisogno.


Naturalmente, testerò una volta che l'EA sarà lì. Se non funziona come voglio allora lo cambierò.

 
//+------------------------------------------------------------------+
//|                                                          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);
  }
//+------------------------------------------------------------------+
Ecco un semplice codice per aprire EURUSD e USDCHF su un grafico. Anche l'ea viene aggiunto su un altro grafico in modo da aprire EURUSD e USDCHF.
 
tigersoft:
Ecco un semplice codice per aprire EURUSD e USDCHF su un grafico. Anche l'ea è aggiunto su un altro grafico in modo da aprire EURUSD e USDCHF.

Abbastanza pulito. Grazie tigersoft

 
cloudbreaker:

Questo non è corretto. La funzione OrderSend() può essere eseguita per qualsiasi simbolo specificato come primo parametro, indipendentemente dal grafico.

E puoi recuperare i prezzi di domanda e offerta più recenti per i simboli al di fuori del grafico corrente usando la funzione MarketInfo().

Quindi hai le seguenti opzioni.

- Avere lo stesso EA collegato a molti grafici e operare per il simbolo nativo di ogni grafico (usando le variabili integrate Ask e Bid)

- Avere un EA collegato a un grafico specifico che esegue per tutti i simboli scelti (con la funzione MarketInfo() per i simboli non nativi) - usando solo i tick del simbolo nativo come dispositivo di attivazione

- Avere EA master e slave collegati a grafici diversi dove uno è innescato dall'altro (es. uno scrive un valore in un file, l'altro legge costantemente il file finché non trova questi dati e poi negozia)


Ciao, potresti elaborare l'opzione #3?


E inoltre, come funzionerebbe il calcolo dei prezzi/indicatori con i simboli non nativi usando l'opzione #2? Capisco l'invio di ordini a simboli non nativi, ma non come controllare le condizioni di entrata su simboli non nativi.

 
skyhr:

Ciao, potresti elaborare l'opzione #3?


E inoltre, come funzionerebbe il calcolo dei prezzi/indicatori con i simboli non nativi usando l'opzione #2? Capisco l'invio di ordini a simboli non nativi, ma non come controllare le condizioni di entrata su simboli non nativi.

Usa la funzione MarketInfo() per i simboli non nativi. E' un amico :)

 
skyhr:

Ciao, potresti elaborare l'opzione #3?


E inoltre, come funzionerebbe il calcolo dei prezzi/indicatori con i simboli non nativi usando l'opzione #2? Capisco l'invio di ordini a simboli non nativi, ma non come controllare le condizioni di entrata su simboli non nativi.

Opzione 3 - semplicemente scrivere un valore in un file da un EA che monitora un particolare simbolo. Fai in modo che un altro EA monitori quel file ed esegua un particolare pezzo di logica quando quel valore è presente.

Opzione 2 - Usare la funzione MarketInfo() per recuperare i prezzi ask e bid per i simboli non nativi piuttosto che usare le variabili Ask e Bid che sono valide solo per il simbolo nativo.

 
cloudbreaker:

Opzione 3 - scrivere semplicemente un valore in un file da un EA che monitora un particolare simbolo. Fai in modo che un altro EA monitori quel file ed esegua una particolare parte di logica quando quel valore è presente.

Opzione 2 - Usare la funzione MarketInfo() per recuperare i prezzi ask e bid per i simboli non nativi piuttosto che usare le variabili Ask e Bid che sono buone solo per il simbolo nativo.

Penso che entrambi gli approcci siano buoni.

L'unica cosa che vorrei aggiungere è che l'opzione #2 ha dei vantaggi in termini di prestazioni grazie al minor overhead. Tutto sarà in memoria che ovviamente è più veloce dell'operazione su file.

Un vantaggio per l'opzione #3 è se si desidera utilizzare i dati del file per qualcosa che MT4 non può fare.