Questions des débutants MQL5 MT5 MetaTrader 5 - page 442

 

Bonsoir à tous,

1.

Stratégie - une barre est apparue, un ordre en suspens a été placé avec un stoploss et un takeprofit (sl, tp), rien d'autre.

Supposons que dans la barre actuelle, après un certain temps, un prix apparaîtra pour le déclenchement de l'ordre, plus tard le prix sl viendra, et ensuite le prix tp .

Essayez d'expliquer - supposons que le prix d'ouverture de la nouvelle barre sera quelque part entre les limites de prix sl et tp. Comment ce calcul est-il effectué ?

Logiquement, c'est impossible, car le testeur ne dispose que du prix ouvert de la barre suivante ? Et il n'est pas égal au prix spécifié dans la condition de déclenchement de l'ordre en attente, ce qui signifie que l'ordre ne doit pas être déclenché.

Mais : pendant l'exécution du testeur, les transactions sont en quelque sorte exécutées et les stops sont déclenchés. De quelle manière ?

2.

le testeur crée fxt à chaque démarrage. et c'est du temps. Je n'ai pas trouvé de paramètre permettant d'éviter cela... Dans l'idée : le créer une fois et si je ne change rien, utiliser ce fichier, mais non, le terminal le réécrit

 
Pouvez-vous me dire si l'EA a besoin d'un tick pour exécuter init() ?
 
-Aleks-:
Pouvez-vous me dire si l'EA a besoin d'un tick pour exécuter init() ?

Non. Vous ne le faites pas. Voici le code pour vous aider à voir cela :

//+------------------------------------------------------------------+
//|                                                  test_expert.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright  "Copyright 2015, MetaQuotes Software Corp."
#property link       "http://www.mql5.com"
#property version    "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 
   Print(__FUNCTION__);
   return(INIT_FAILED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Print(__FUNCTION__);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   Print(__FUNCTION__);
  }
//+------------------------------------------------------------------+
Attachez-le au tableau et voyez quelles fonctions fonctionnent le week-end.
 
-Aleks-:
Pouvez-vous me dire si l'EA a besoin d'un tick pour exécuter init() ?
Je ne pense pas.
 
Karputov Vladimir:

Non. Vous ne le faites pas. Voici le code pour vous aider à le voir :

Attachez-le au tableau et voyez quelles fonctions fonctionnent le week-end.
Tapochun:
Je ne pense pas.
Merci pour cette réponse rapide. Alors je ne comprends pas pourquoi ça ne marche pas - il n'y a pas d'impression...
 
-Aleks-:
Merci pour votre réponse rapide. Alors je ne comprends pas pourquoi ça ne marche pas - il n'y a pas d'impression...
Où est votre imprimante ? Puis-je avoir le code pour le reproduire ?
 
Karputov Vladimir:
Et où en est votre imprimante ? Je peux avoir le code, pour la reproduction ?

Il s'avère que l'initialisation n'a pas lieu lorsque le terminal est chargé, mais qu'elle a lieu lorsque l'horizon temporel est modifié.

J'ai besoin de vérifier si la lecture d'un fichier par une douzaine d'EAs pendant l'initialisation ne serait pas un problème...

J'utilise une classe.

int init()
  {
//Автоматическая настройка
   if(Use_SetupLoad==true)
     {
      CSVReader FileLoads(FileLoadSetup);
      FileLoads.SetDelimiter(';');
      FileLoads.SetCommon(true);
      int StrokaSetup=0;
      if(FileLoads.Load(1))
        {
         PrintFormat("File %s loaded. Total rows=%d, Total columns=%d",FileLoads.FileName(),FileLoads.TotalRows(),FileLoads.TotalColumns());
         
         for (int i=1;i<30; i++)
         //for (int i=1; i<100 || StrokaSetup!=0; i++)
         {
           if (Magic==FileLoads.GetIntValue(i,13))
           {
            StrokaSetup=i ;
            Print ("StrokaSetup=",StrokaSetup);
            break;
            }
         //   if (i==100) i=1;
         //  Print (FileLoads.GetIntValue(i,13));
         }
         /*
         for (int i=1; i<30; i++)
         {
         Print (FileLoads.GetIntValue(i,13));         
         }
         */
         if(StrokaSetup!=0)
           {
            pipsXH=FileLoads.GetIntValue(StrokaSetup,4)/10;
            if (pipsXH>0)
            {
            pMAH=FileLoads.GetIntValue(StrokaSetup,3);
   //         typeMAH=FileLoads.GetIntValue(StrokaSetup,3);
   //         priceMAH=FileLoads.GetIntValue(StrokaSetup,2);
            
  //          if (pipsXH<0)
  //          PrintFormat("pMAH=%d",pMAH,"typeMAH=%d",typeMAH,"priceMAH=%d",priceMAH,"pipsXH=%d",pipsXH);
            }
            else pipsXH=(-1);
            
            pipsXL=FileLoads.GetIntValue(StrokaSetup,7)/10*(-1);
            if (pipsXL>0)
            {
            pMAL=FileLoads.GetIntValue(StrokaSetup,6);
     //       typeMAL=FileLoads.GetIntValue(StrokaSetup,3);
     //       priceMAL=FileLoads.GetIntValue(StrokaSetup,2);
            
      //      PrintFormat("pMAL=%d",pMAL,"typeMAL=%d",typeMAL,"priceMAL=%d",priceMAL,"pipsXL=%d",pipsXL);
            }
            else pipsXL=(-1);
                        
            pMAT=FileLoads.GetIntValue(StrokaSetup,9);
      //      typeMAT=FileLoads.GetIntValue(StrokaSetup,3);
      //      priceMAT=FileLoads.GetIntValue(StrokaSetup,2);
      //      PrintFormat("pMAT=%d",pMAT,"typeMAT=%d",typeMAT,"priceMAT=%d",priceMAT);
            
            lot=FileLoads.GetDoubleValue(StrokaSetup,11);
      //    PrintFormat("pMAH=%d",pMAH,"pipsXH=%d",pipsXH,"pMAL=%d",pMAL,"pipsXL=%d",pipsXL,"lot=%d",lot);            
            Print("Magic=",Magic," pMAH=",pMAH," pipsXH=",pipsXH," pMAL=",pMAL," pipsXL=",pipsXL," lot=",lot);            
            
           }

        }
      else PrintFormat("Error in loading data from %s",FileLoads.FileName());
     }
///Конец автоматической настройки///  
   return(INIT_SUCCEEDED);
  } 

Un morceau de classe responsable de la lecture d'un fichier

//+------------------------------------------------------------------+
//| Load                                                             |
//+------------------------------------------------------------------+
bool CSVReader::Load(int start_line)
  {
   int filehandle=FileOpen(m_filename,FILE_CSV|FILE_READ|FILE_ANSI|FILE_SHARE_READ,'\n');
   if(filehandle==INVALID_HANDLE)
     {
      Alert("Error in open of file ",m_filename,", error",GetLastError());
      return(false);
     }
//---
   int line_index=0;
   while(!FileIsEnding(filehandle))
     {
      string str=FileReadString(filehandle);
      //--- skip 0th row
      if(line_index>=start_line)
         if(str!="")
           {
            if(line_index==1) AddData(str,true);
            else AddData(str,false);
           }
      line_index++;
     }
//---
   FileClose(filehandle);
   return(true);
  } 
 
-Aleks-:

Il s'avère que l'initialisation n'a pas lieu lorsque le terminal est chargé, mais qu'elle a lieu lorsque l'horizon temporel est modifié.

J'ai besoin de vérifier si la lecture d'un fichier par une douzaine d'EAs pendant l'initialisation ne serait pas un problème...

J'utilise une classe.

Morceau de classe responsable de la lecture des fichiers

Il y a donc beaucoup de contrôles et de conditions dans votre code avant l'impression. Passez-le en mode débogage et vérifiez ce qui ne fonctionne pas.
 
Karputov Vladimir:
Il y a donc beaucoup de contrôles et de conditions dans votre code avant l'impression. Passez en mode débogage et vérifiez ce qui ne fonctionne pas.
Dans le testeur, tout fonctionne - mais il n'y a pas d'impression lorsque le terminal est chargé - c'est ce qui m'a dérouté.
 
-Aleks-:
Dans le testeur, tout fonctionne - mais il n'y a pas d'imprimante lorsque le terminal est chargé - c'est ce qui m'a dérouté.
Cela vaut donc la peine d'ajouter d'autres imprimantes et de voir où va l'algorithme.
Raison: