Domanda sul consulente multivaluta - pagina 4

 

OK, VassaV, ho capito!

Ecco un'altra domanda. Nel solito codice, quando una posizione viene aperta, viene mostrata:

//---------проверяем условие на покупку----------------------------
  if   ( бла-бла-бла  )
   {
  Lots=GetSizeLot(); 
  ticket=OrderSend("GBPUSD",0,Lots,Ask,Slippage,Bid-SL_long*Point,Ask+TP_long*Point,
                                                         "мульти",MagicNum,0,CLR_NONE);
  if    (ticket<0) { Print("Ошибка открытия ордера BUY #", GetLastError()); return (0); }  
 ... ... ...

Qui abbiamo il valore del "biglietto". Nella mia EA, lo schema è un po' diverso, come questo:

if (GBP) {     //если  "выключатель" включен
if (!ExpertOrder(MagicGBP)) { //если ордеров по паре GBPUSD нет
 
//-------Проверяем условие на покупку-------------
if  (    бла-бла-бла     )
    {  
  //---- Цикл открытия ордера  -------------------------------------------                      
int Cnt=1;
  while (Cnt <= 5) 
  { //-----покупаем--------------
    Lots=GetSizeLot();
   if (OrderSend("GBPUSD",OP_BUY,Lots,ask_GBP,3,bid_GBP - sl_GBPUSD_long*point_GBP,
           ask_GBP+tp_GBPUSD_long*point_GBP,"M_1", MagicGBP, 0, Blue) > 0)  break;    
    else 
{ Print ("Ошибка открытия Buy #", ErrorDescription( GetLastError() ),
                                                  " попытка ", Cnt);
                               
        if (Cnt==5) return(0);  //если за 5 попыток не закрыли - выходим
        Cnt++;
        Sleep(15000); // ждём 15 секунд
      }   
    }
  }

Ma ho anche bisogno del valore del "biglietto"! Per questa coppia. Non posso farlo per tutta la mattina! Chi lo sa, - Per favore, dimmi come?

 

A tutti quelli che volevano un consiglio ma non hanno avuto il tempo di rispondere, grazie!

Penso di averlo risolto da solo (questo pomeriggio). Funziona così:

 //---- Цикл открытия ордера  -------------------------------------------                      
int Cnt=1;
  while (Cnt <= 5) 
  { //-----покупаем--------------
    Lots=GetSizeLot();
   ticketGBP = OrderSend("GBPUSD",OP_BUY,Lots,ask_GBP,3,bid_GBP - sl_GBPUSD_long*point_GBP,
           ask_GBP+tp_GBPUSD_long*point_GBP,"M_1", MagicGBP, 0, Blue);
         if (ticketGBP > 0)  break;    
    else 
{ Print ("Ошибка открытия Buy #", ErrorDescription( GetLastError() ),
                                                  " попытка ", Cnt);
                               
        if (Cnt==5) return(0);  //если за 5 попыток не закрыли - выходим
        Cnt++;
        Sleep(15000); // ждём 15 секунд
      }
 

La condizione di testare l'Expert Advisor per 5 minuti al Campionato, e solo 3 settimane prima della fine del trimestre, è stato quasi un INIZIO per tutti!

Individualmente, il mio Expert Advisor è testato sulla storia di 12 mesi su una coppia, - non più di 3-4 minuti. Funziona su tutte le zecche.

Ma quando unisco diversi EA in un unico EA multicurrency, il tempo di test aumenta fino a 7-10 minuti!

E disabilito tutte le coppie tranne una che eseguo.

Voglio chiedere ai professionisti (e non solo) di condividere la loro esperienza e i modi per diminuire il tempo dei test.

Lastruttura di Expert Advisor è la seguente:

 
//---- input parameters---------
 
ЗАДАЕМ ВНЕШНИЕ ПАРАМЕТРЫ ПО КАЖДОЙ ПАРЕ
 
int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
 
//*********************************************************************
 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПЕРВОЙ ПАРЕ 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ВТОРОЙ ПАРЕ
... ... ... ...
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПОСЛЕДНЕЙ ПАРЕ
 
 =========================================================
 
int Orders=OrdersTotal ();     //получаем кол-во открытых ордеров
if (Orders<3)                 //если  открытых ордеров <3
  { 
if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ } 
if (выключатель 2 вкл) {ОТКРЫВАЕМ ВТОРУЮ ПАРУ } 
... ... ... 
if (выключатель N вкл) {ОТКРЫВАЕМ ПОСЛЕДНЮЮ ПАРУ }  
  }
//========================================================================
for (int x=0; x<OrdersTotal(); x++)                                             {
    if (OrderSelect(x, SELECT_BY_POS, MODE_TRADES)) 
{       
if (UseTrailing 1) - ТРЕЙЛИНГ ПЕРВОЙ ПАРЫ
... ... ...
if (UseTrailing N) - Трейлинг последней пары
}
//======================================================================
   return(0);
  }
 
rid:

La condizione di testare l'Expert Advisor per 5 minuti nel campionato in sole 3 settimane prima della fine del periodo è stata quasi un INIZIO per tutti!

Individualmente il mio Expert Advisor viene testato sullo storico di 12 mesi su una coppia - non più di 3-4 minuti. Funziona su tutte le zecche.

Ma quando unisco diversi EA in un unico EA multicurrency, il tempo di test aumenta fino a 7-10 minuti!

E disabilito tutte le coppie tranne una - che sto testando.

Voglio chiedere agli specialisti (e non solo) di condividere i loro approcci e modi per diminuire il tempo dei test.

Lastruttura di Expert Advisor è così:

 
//---- input parameters---------
 
ЗАДАЕМ ВНЕШНИЕ ПАРАМЕТРЫ ПО КАЖДОЙ ПАРЕ
 
int init()
  {
   return(0);
  }
int deinit()
  {
   return(0);
  }
 
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  { 
 
//*********************************************************************
 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПЕРВОЙ ПАРЕ 
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ВТОРОЙ ПАРЕ
... ... ... ...
double ЗАДАЕМ ПЕРЕМЕННЫЕ ПО ПОСЛЕДНЕЙ ПАРЕ
 
 =========================================================
 
int Orders=OrdersTotal ();     //получаем кол-во открытых ордеров
if (Orders<3)                 //если  открытых ордеров <3
  { 
if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ } 
if (выключатель 2 вкл) {ОТКРЫВАЕМ ВТОРУЮ ПАРУ } 
... ... ... 
if (выключатель N вкл) {ОТКРЫВАЕМ ПОСЛЕДНЮЮ ПАРУ }  
  }
//========================================================================
for (int x=0; x<OrdersTotal(); x++)                                             {
    if (OrderSelect(x, SELECT_BY_POS, MODE_TRADES)) 
{       
if (UseTrailing 1) - ТРЕЙЛИНГ ПЕРВОЙ ПАРЫ
... ... ...
if (UseTrailing N) - Трейлинг последней пары
}
//======================================================================
   return(0);
  }

è testato lentamente, principalmente a causa degli indicatori

non sono visibili in questa struttura, ma molto probabilmente li avete, altrimenti ci vorrebbe un minuto al massimo per i test.

Gli indicatori devono essere cambiati o spostati nel codice dell'EA.

 

Loky,

Ho capito bene?

I miei indicatori sono dove imposto le variabili. E a quanto pare

double ЗАДАЕМ ПЕРЕМЕННЫЕ (индикаторов) ПО ПЕРВОЙ ПАРЕ

dovrebbe probabilmente essere spostato all'interno in

if (выключатель 1 вкл) {ОТКРЫВАЕМ ПЕРВУЮ ПАРУ }

per ogni coppia di conseguenza?

 
Date un'occhiata a Prototype-IX come esempio. Un esempio di un Expert Advisor multivaluta.

Ti permette di testare su una qualsiasi delle 12 coppie di valute e su diversi timeframe.
15:18:05 Ingressi ProtoType-IX: EMN=10000; Slippage=3; RiskDelta=5; PeriodWPR=8; CriteriaWPR=25; ATRPeriod=40; kATR=0.5; ZeroBar=8; MinTargetinSpread=5; TP_SL_Criteria=2; MaxOpenedOrders=3; MaxOrderSize=5; <br / translate="no"> 15:18:05 2006.10.17 09:38 ProtoType-IX EURUSD,M15: indexPeriod=2 PeriodTesting=15 Symbol index=3 SymbolTesting=EURUSD
15:18:05 2006.10.17 09:38 NRTR_GATOR EURUSD,M15: caricato con successo
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,M30: caricato con successo
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,H1: caricato con successo
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,H4: caricato con successo
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,Daily: caricato con successo
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,M30: Attenzione, il trend non è definito. Bar dalla fine del 4
15:18:09 2007.01.02 00 00:00 NRTR_GATOR EURUSD,M30: Attenzione, il trend non è definito, non può essere
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,H1: Attenzione: il trend non è definito, non può esserlo. Barra dalla fine di 1
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,H1: Attenzione: il trend non è definito, non può essere
......................................

15:18:23 2007.08.17 22:17 Tester: stop loss #242 a 1,3483 (1,3483 / 1,3485)
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,Daily: rimosso
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,H4: rimosso
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,H1: rimosso
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,M30: rimosso
15:18:23 2007.08.17 22:59 ProtoType-IX EURUSD,M15: Test completato


Ci sono voluti 18 secondi per testare su 15 minuti nel modello "Every ticks".
 

Grazie a coloro che hanno risposto alla domanda. Le cose si stanno schiarendo gradualmente e i tacchini sono stati messi dentro. E ora il limite è raggiunto.

Rosh, - ho provato già una dozzina di volte ad avvicinare l'esperto da te nominato. Ma... ogni volta che ho fatto marcia indietro... Con le mie modeste conoscenze non riesco ancora ad afferrare il codice e la sua struttura. Sono confuso, e non è del tutto chiaro da dove cominciare e come strutturare la sua ricerca. Ci sono molte incertezze, e non posso arrivare a tutto in una volta. Comincio a capire tutto e presto mi fermo a pensare - da dove ho cominciato e per cosa ...

E cogliendo l'occasione, ho una domanda sull'articolo "Esempio di creazione di un Expert Advisor" ^

 
klerk:
il principio di Expert Advisor multivaluta è approssimativamente il seguente:
1. nel calcolo degli indicatori per specificare specifiche valute e intervalli di tempo, per esempio: iRSI("GBPUSD",60,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i); //ma qui c'è un errore
2. ottenere prezzi, punti, ecc. utilizzando MarketInfo.
3. usare iLow(...) invece di Low[0] per esempio
e si applicano a tutte le coppie di valute.
Buona fortuna.
L'unico inconveniente è che tutti i simboli scambiati devono avere grafici aperti con i loro timeframe.

Se i grafici non sono aperti, o sono aperti con timeframes diversi da quelli utilizzati, dovete costantemente eseguire

Controlla su ogni starnuto - anche iRSI può non funzionare ... fino a quando il terminale si resetta ...

Rispettosamente - S.D.
 

Online, ho impostatof=1 min nell'EA (negli indici) per tutte le coppie (per verificare le sue prestazioni).

E l'ho messo sul grafico della prima coppia sul timef=1 min. Ma su altre coppie dell'EA il timeframe è spesso diverso. E tuttavia l'EA opera su tutte le coppie esattamente in termini di tempo-minuti, come è implementato nel codice!

O forse non ho capito bene?

 
klerk:
Il principio dell'Expert Advisor multivaluta è il seguente:
1. specificare specifiche valute e intervalli di tempo nel calcolo degli indicatori, per esempio: iRSI("GBPUSD",60,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i); //ma qui c'è un errore
2. ottenere prezzi, punti, ecc. utilizzando MarketInfo.
3. usare iLow(...) invece di Low[0] per esempio
e
scriverlo su tutte le coppie di valute.
Buona fortuna.


Potreste dirmi se la sostituzione della costruzione sarà corretta:

H=High[iHighest("USDJPY", PERIOD_H4, MODE_HIGH, 50, 1)];

nel codice di Expert Advisor multivaluta quando si lavora sullo strumento di qualcun altro su tale strumento:

double H_current, H_previous;
H_current=0; H_previous=0;
 
for (int n=1; n<51; n++)
  {
    H_previous=H_current;
    H_current=iHigh("USDJPY", PERIOD_H4, n);
    H=MathMax(H_previous, H_current);
  }

In caso contrario, per favore consigliate qual è l'errore e come farlo correttamente?

Grazie in anticipo.

Motivazione: