Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 442

 

Guten Abend, meine Damen und Herren,

1.

Strategie - Balken erschienen, Pending Order mit Stoploss und Takeprofit (sl, tp) gesetzt, sonst nichts.

Nehmen wir an, dass im aktuellen Balken nach einiger Zeit ein Preis erscheint, zu dem der Auftrag ausgelöst wird, später kommt der sl-Preis und dann der tp-Preis.

Bitte versuchen Sie, das zu erklären - nehmen wir an, dass der Eröffnungskurs des neuen Balkens irgendwo zwischen den Sl- und Tp-Kursgrenzen liegen wird. Wie wird diese Berechnung durchgeführt?

Logischerweise kann er das nicht, denn für den Tester gibt es nur den Preis des nächsten offenen Balkens? Und er ist nicht gleich dem Preis, der in der Bedingung für die Auslösung der schwebenden Order angegeben ist, was bedeutet, dass die Order nicht ausgelöst werden sollte.

Aber: Während des Testlaufs werden irgendwie Trades ausgeführt und Stops ausgelöst. Inwiefern?

2.

der tester erstellt bei jedem start fxt. und das ist zeit. Ich konnte keine Einstellung finden, die darauf hindeutet, dies zu vermeiden... Idee: einmal erstellen und wenn ich nichts ändere, diese Datei verwenden, aber nein, das Terminal schreibt sie neu

 
Können Sie mir sagen, ob der EA einen Tick benötigt, um init() auszuführen?
 
-Aleks-:
Können Sie mir sagen, ob der EA einen Tick benötigt, um init() auszuführen?

Nein, das tun Sie nicht. Hier ist der Code, mit dem Sie das sehen können:

//+------------------------------------------------------------------+
//|                                                  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__);
  }
//+------------------------------------------------------------------+
Befestigen Sie es an der Tabelle und sehen Sie, welche Funktionen am Wochenende funktionieren.
 
-Aleks-:
Können Sie mir sagen, ob der EA einen Tick benötigt, um init() auszuführen?
Das glaube ich nicht.
 
Karputov Vladimir:

Nein, das tun Sie nicht. Hier ist der Code, damit Sie ihn sehen können:

Befestigen Sie es an der Tabelle und sehen Sie, welche Funktionen am Wochenende funktionieren.
Tapochun:
Das glaube ich nicht.
Ich danke Ihnen für die prompte Antwort. Dann verstehe ich nicht, warum es nicht funktioniert - es gibt keinen Ausdruck...
 
-Aleks-:
Ich danke Ihnen für Ihre prompte Antwort. Dann verstehe ich nicht, warum es nicht funktioniert - es gibt keinen Ausdruck...
Wo steht Ihr Drucker? Kann ich den Code haben, um es zu reproduzieren?
 
Karputov Vladimir:
Und wie sieht es mit Ihrem Drucker aus? Kann ich den Code zur Reproduktion haben?

Es hat sich herausgestellt, dass die Initialisierung nicht beim Laden des Terminals erfolgt, sondern erst, wenn der Zeitrahmen geändert wird.

Ich muss prüfen, ob das Lesen einer Datei durch ein Dutzend EAs während der Initialisierung nicht ein Problem darstellt...

Ich verwende eine Klasse.

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

Ein Teil der Klasse, der für das Lesen einer Datei verantwortlich ist

//+------------------------------------------------------------------+
//| 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-:

Es hat sich herausgestellt, dass die Initialisierung nicht beim Laden des Terminals erfolgt, sondern erst, wenn der Zeitrahmen geändert wird.

Ich muss prüfen, ob das Lesen einer Datei durch ein Dutzend EAs während der Initialisierung nicht ein Problem darstellt...

Ich verwende eine Klasse.

Teil der Klasse, der für das Lesen von Dateien zuständig ist

Es gibt also eine ganze Reihe von Prüfungen und Bedingungen in Ihrem Code, bevor der Druck erfolgt. Gehen Sie es im Debug-Modus durch und prüfen Sie, was nicht funktioniert.
 
Karputov Vladimir:
Es gibt also eine ganze Reihe von Prüfungen und Bedingungen in Ihrem Code, bevor der Druck erfolgt. Gehen Sie in den Debug-Modus und prüfen Sie, was nicht funktioniert.
Im Testgerät funktioniert alles - aber es gibt keine Ausdrucke, wenn das Terminal geladen ist - das hat mich verwirrt.
 
-Aleks-:
Im Testgerät funktioniert alles - aber es gibt keine Drucker, wenn das Terminal geladen ist - das hat mich verwirrt.
Es lohnt sich also, weitere Drucker hinzuzufügen und zu sehen, wie sich der Algorithmus entwickelt.
Grund der Beschwerde: