Question sur le conseiller multi-devises - page 4

 

OK, VassaV, c'est bon !

Voici une autre question. Dans le code habituel, lorsqu'une position est ouverte, elle est affichée :

//---------проверяем условие на покупку----------------------------
  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); }  
 ... ... ...

Ici, nous avons la valeur "ticket". Dans mon EA, le schéma est quelque peu différent, comme ceci :

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 секунд
      }   
    }
  }

Mais j'ai aussi besoin de la valeur du "ticket" ! Pour cette paire. Je ne peux pas faire ça toute la matinée ! Qui sait, - S'il vous plaît, dites-moi comment ?

 

À tous ceux qui voulaient des conseils mais n'ont pas eu le temps de répondre, merci !

Je crois que j'ai trouvé la solution moi-même (cet après-midi). C'est comme ça :

 //---- Цикл открытия ордера  -------------------------------------------                      
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 condition de tester l'Expert Advisor pendant 5 minutes au Championnat, et seulement 3 semaines avant la fin du trimestre, était presque un DÉBUT pour tout le monde !

Individuellement, mon Expert Advisor est testé sur l'historique de 12 mois sur une paire, - pas plus de 3-4 minutes. Il fonctionne sur toutes les tiques.

Mais lorsque je réunis plusieurs EA en un seul EA multi-devises, le temps de test augmente jusqu'à 7-10 minutes !

Et je désactive toutes les paires sauf une que je dirige.

Je souhaite demander aux professionnels (et pas seulement) de partager leur expérience et les moyens de réduire la durée des tests.

Lastructure de l'Expert Advisor est la suivante :

 
//---- 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 condition de tester l'Expert Advisor pendant 5 minutes dans le championnat en seulement 3 semaines avant la fin de la période a presque été un DEBUT pour tout le monde !

Individuellement, mon conseiller expert est testé sur l'historique de 12 mois sur une paire - pas plus de 3-4 minutes. Il fonctionne sur toutes les tiques.

Mais lorsque je réunis plusieurs EA en un seul EA multi-devises, le temps de test augmente jusqu'à 7-10 minutes !

Et je désactive toutes les paires sauf une - que je teste.

Je souhaite demander aux spécialistes (et pas seulement) de partager leurs approches et leurs moyens de réduire le temps de test.

Lastructure de l'Expert Advisor est la suivante :

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

il est testé lentement, principalement en raison des indicateurs

ils ne sont pas visibles dans cette structure, mais vous les avez très probablement, sinon ils prendraient une minute maximum pour les tests.

Les indicateurs doivent être modifiés ou déplacés vers le code de l'EA.

 

Loky,

Est-ce que je vous ai bien compris ?

Mes indicateurs sont là où je fixe les variables. Et apparemment, ils

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

devrait probablement être déplacé à l'intérieur dans

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

pour chaque paire en conséquence ?

 
Prenons l'exemple de Prototype-IX. Un exemple de conseiller expert multi-devises.

Il vous permet d'effectuer des tests sur l'une des 12 paires de devises et sur plusieurs échelles de temps.
15:18:05 Entrées 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 : chargé correctement
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,M30 : chargé avec succès
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,H1 : chargé avec succès
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,H4 : chargé correctement
15:18:09 2006.10.17 09:38 NRTR_GATOR EURUSD,Daily : chargé avec succès
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,M30 : Attention, la tendance n'est pas définie. Barre de la fin de 4
15:18:09 2007.01.02 00 00:00 NRTR_GATOR EURUSD,M30 : Avertissement ! La tendance n'est pas définie, elle ne peut être
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,H1 : Attention, la tendance n'est pas définie, elle ne peut pas l'être. Barre de la fin de 1
15:18:09 2007.01.02 00:00 NRTR_GATOR EURUSD,H1 : Avertissement ! La tendance n'est pas définie, elle ne peut pas être
......................................

15:18:23 2007.08.17 22:17 Tester : stop loss #242 à 1.3483 (1.3483 / 1.3485)
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,Daily : supprimé
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,H4 : supprimé
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,H1 : enlevé
15:18:23 2007.08.17 22:59 NRTR_GATOR EURUSD,M30 : enlevé
15:18:23 2007.08.17 22:59 ProtoType-IX EURUSD,M15 : Test terminé


Il a fallu 18 secondes pour effectuer un test sur 15 minutes dans le modèle "Tous les tics".
 

Merci à ceux qui ont répondu à la question. Les choses s'éclaircissent progressivement. J'ai rentré les dindes à l'intérieur. Et maintenant la limite est atteinte.

Rosh, - j'ai déjà essayé une douzaine de fois d'approcher l'expert que vous avez nommé. Mais... à chaque fois que je me suis éloigné... Avec mes modestes connaissances, je n'arrive toujours pas à saisir le code et sa structure. Je suis confus, et je ne sais pas très bien par où commencer et comment structurer ses recherches. Les incertitudes sont nombreuses, et je ne peux pas tout aborder en même temps. Je commence à tout comprendre et bientôt je m'arrête pour réfléchir - où j'ai commencé et à quoi bon ...

Et profitant de cette occasion, j'ai une question à propos de l'article "Exemple de création d'un conseiller expert" ^.

 
klerk:
le principe de l'Expert Advisor multi-devises est approximativement le suivant :
1. dans le calcul des indicateurs pour spécifier des devises et des intervalles de temps spécifiques, par exemple : iRSI("GBPUSD",60,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i) ; //mais voici une erreur
2. obtenir des prix, des points, etc. en utilisant MarketInfo.
3. utiliser iLow(...) au lieu de Low[0] par exemple
et s'appliquent à toutes les paires de devises.
Bonne chance.
Le seul inconvénient est que tous les symboles négociés doivent avoir des graphiques ouverts avec leurs échéances.

Si les graphiques ne sont pas ouverts, ou s'ils sont ouverts avec des échéances différentes de celles utilisées, vous devez constamment exécuter

Vérifie à chaque éternuement - même l'iRSI peut ne pas fonctionner ... jusqu'à ce que le terminal se réinitialise ...

Respectueusement - S.D.
 

En ligne, j'ai fixéf=1 min dans l'EA (dans les indices) pour toutes les paires (pour vérifier ses performances).

Et je l'ai mis sur le graphique de la première paire sur le timef=1 min. Mais sur d'autres paires de l'EA, l'horizon temporel est souvent différent. Et pourtant l'EA opère sur toutes les paires exactement en termes de tempsf-minutes, comme cela est implémenté dans le code !

Ou peut-être que je ne vous ai pas bien compris ?

 
klerk:
Le principe de l'Expert Advisor multi-devises est le suivant :
1. spécifier des devises et des intervalles de temps spécifiques dans le calcul des indicateurs, par exemple : iRSI("GBPUSD",60,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i) ; //mais voici une erreur
2. obtenir des prix, des points, etc. en utilisant MarketInfo.
3. utiliser iLow(...) au lieu de Low[0] par exemple
et
l'écrire sur toutes les paires de devises.
Bonne chance.


Pouvez-vous me dire si la substitution de la construction sera correcte :

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

dans le code d'un conseiller expert multidevises lorsque vous travaillez sur l'instrument de quelqu'un d'autre sur un tel instrument :

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);
  }

Si ce n'est pas le cas, veuillez indiquer quelle est l'erreur et comment procéder correctement.

Merci d'avance.