[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 61

 

Liebe Experten, bitte beantworten Sie die Frage:

MetaEditor verfügt über Textdateien mit Vorlagen für die Programmerstellung. Sie werden vom Assistenten bei der Erstellung eines Programms verwendet. Im Vorlagentext werden die Parameter für den Typ der erstellten Programmdatei angegeben. Zwischen den Parametern befinden sich Tags, die im Code nicht angezeigt werden. Aber das Terminal erkennt sie irgendwie. Wenn ein Expert Advisor erstellt wird, wird die Startfunktion nach dem nächsten Tick gestartet, wenn ein Indikator erstellt wird, wird die Startfunktion ohne Tick gestartet. Wohin gehören die Etiketten und alles, was sich darin befindet?

 

Ich habe zwei weitere Tests durchgeführt, um zu sehen, woher das alles kommt:


1. ich lese aus der ini nicht in ein Array von Strings, sondern in separate Variablen. Das Ergebnis ist wie erwartet, d.h. das Kopieren ist kein Wert, sondern eine Referenz:

int    numCross=0;

string Cross_1="-", Cross_2="-", Cross_3="-";
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
  string sectionName = "common";
  
  numCross = ReadIniInteger( config_path, sectionName, "numCross", 0);
  ArrayResize( CrossName, numCross);
  for (int i=0; i<numCross; i++) CrossName[i] = "-";
  
  sectionName = "cross1";
  Cross_1 = ReadIniString( config_path, sectionName, "name", "-");
  Print("init.1: Cross_1=", Cross_1);
  sectionName = "cross2";
  Cross_2 = ReadIniString( config_path, sectionName, "name", "-");
  Print("init.1: Cross_2=", Cross_2);
  sectionName = "cross3";
  Cross_3 = ReadIniString( config_path, sectionName, "name", "-");
  Print("init.1: Cross_3=", Cross_3);
  Print("init.1: read complete");

  Print("init.2: Cross_1=", Cross_1);
  Print("init.2: Cross_2=", Cross_2);
  Print("init.2: Cross_3=", Cross_3);
  Print("-------------------------------");
  
  sectionName = "cross1";
  Cross_1 = StringSubstr( ReadIniString( config_path, sectionName, "name", "-"), 0, 0);
  Print("init.3: Cross_1=", Cross_1);
  sectionName = "cross2";
  Cross_2 = StringSubstr( ReadIniString( config_path, sectionName, "name", "-"), 0, 0);
  Print("init.3: Cross_2=", Cross_2);
  sectionName = "cross3";
  Cross_3 = StringSubstr( ReadIniString( config_path, sectionName, "name", "-"), 0, 0);
  Print("init.3: Cross_3=", Cross_3);
  Print("init.3: read complete");

  Print("init.4: Cross_1=", Cross_1);
  Print("init.4: Cross_2=", Cross_2);
  Print("init.4: Cross_3=", Cross_3);

  return(0);
}


das erzielte Ergebnis:

2009.04.10 14:31:42 example AUDUSD,H4: init.4: Cross_3=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.4: Cross_2=GBPUSD
2009.04.10 14:31:42 example AUDUSD,H4: init.4: Cross_1=EURUSD
2009.04.10 14:31:42 example AUDUSD,H4: init.3: read complete
2009.04.10 14:31:42 example AUDUSD,H4: init.3: Cross_3=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.3: Cross_2=GBPUSD
2009.04.10 14:31:42 example AUDUSD,H4: init.3: Cross_1=EURUSD
2009.04.10 14:31:42 example AUDUSD,H4: -------------------------------
2009.04.10 14:31:42 example AUDUSD,H4: init.2: Cross_3=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.2: Cross_2=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.2: Cross_1=USDJPY

2009.04.10 14:31:42 example AUDUSD,H4: init.1: read complete
2009.04.10 14:31:42 example AUDUSD,H4: init.1: Cross_3=USDJPY
2009.04.10 14:31:42 example AUDUSD,H4: init.1: Cross_2=GBPUSD
2009.04.10 14:31:42 example AUDUSD,H4: init.1: Cross_1=EURUSD


2. das Array der Zeichenkette zurückgeben, aber anstatt dass die Funktion die Werte der ini Zeichenkette liest

string ReadIniString(string FileName, string SectionName, string KeyName, 
                     string Default = "")
  {
   string ReturnedString = "";
   int nValue = GetPrivateProfileStringA( SectionName, KeyName, Default, 
                                          ReturnedString, 255, FileName);
   if( nValue > 0)
       return( ReturnedString);
   else 
       return( Default);
  }

eine Testfunktion verwendet, die nichts von der Win-Api aufruft

string CrossName[];
int    numCross=0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
  string sectionName = "common";
  
  numCross = ReadIniInteger( config_path, sectionName, "numCross", 0);
  ArrayResize( CrossName, numCross);
  for (int i=0; i<numCross; i++) CrossName[i] = "-";
  
  for (int i=0; i< numCross; i++)
  {
    sectionName = StringConcatenate("cross", i+1);
    CrossName[ i] = someFunc( i+1);
    Print("init.1: CrossName[", ( i+1), "]=", CrossName[ i]);
  }
  Print("init.1: read complete");
  
  for ( i=0; i< numCross; i++)
  {
    Print("init.2: CrossName[", ( i+1), "]=", CrossName[ i]);
  }
  

  Print("-------------------------------");
  for ( i=0; i< numCross; i++)
  {
    sectionName = StringConcatenate("cross", i+1);
    CrossName[ i] = StringSubstr( someFunc( i+1), 0, 0);
    Print("init.3: CrossName[", ( i+1), "]=", CrossName[ i]);
  }
  Print("init.3: read complete");
  
  for ( i=0; i< numCross; i++)
  {
    Print("init.4: CrossName[", ( i+1), "]=", CrossName[ i]);
  }

  return(0);
}
//+------------------------------------------------------------------+
string someFunc(int val)
{
  string ReturnedString = "CROSS_"+ val;
  return( ReturnedString);
}
//+------------------------------------------------------------------+

Ergebnis

2009.04.10 14:41:12 Beispiel AUDUSD,H4: init.4: CrossName[3]=CROSS_3
2009.04.10 14:41:12 Beispiel AUDUSD,H4: init.4: CrossName[2]=CROSS_2
2009.04.10 14:41:12 Beispiel AUDUSD,H4: init.4: CrossName[1]=CROSS_1
2009.04.10 14:41:12 Beispiel AUDUSD,H4: init.3: vollständig gelesen
2009.04.10 14:41:12 Beispiel AUDUSD,H4: init.3: CrossName[3]=CROSS_3
2009.04.10 14:41:12 Beispiel AUDUSD,H4: init.3: CrossName[2]=CROSS_2
2009.04.10 14:41:12 Beispiel AUDUSD,H4: init.3: CrossName[1]=CROSS_1
2009.04.10 14:41:12 Beispiel AUDUSD,H4: -------------------------------

2009.04.10 14:41:12 Beispiel AUDUSD,H4: init.2: CrossName[3]=CROSS_3
2009.04.10 14:41:12 Beispiel AUDUSD,H4: init.2: CrossName[2]=CROSS_2
2009.04.10 14:41:12 Beispiel AUDUSD,H4: init.2: CrossName[1]=CROSS_1
2009.04.10 14:41:12 Beispiel AUDUSD,H4: init.1: read complete
2009.04.10 14:41:12 Beispiel AUDUSD,H4: init.1: CrossName[3]=CROSS_3
2009.04.10 14:41:12 Beispiel AUDUSD,H4: init.1: CrossName[2]=CROSS_2
2009.04.10 14:41:12 Beispiel AUDUSD,H4: init.1: CrossName[1]=CROSS_1

hat gezeigt, dass das Problem offenbar in der Umwandlung von

LPTSTR lpReturnedString [out] Ein Zeiger auf den Puffer, der den abgerufenen String win api von GetPrivateProfileString fi  to mql4 string empfängt .
 
xruss >> :

Logischerweise dachte ich daran, den ORDtype zu bestimmen, bevor das Signal gebildet wird. wie wird es sonst in den Handelskriterien berücksichtigt. und ein weiterer Haken - Positionen werden nicht einmal mit einer leeren Historie eröffnet((

Ich habe Ihnen unter vier Augen geantwortet - ich denke, dass es so produktiver sein wird.

 
Reshetov >> :

Es ist viel einfacher, das Rad nicht neu zu erfinden, und nehmen Sie einen der vorgefertigten Expert Advisors, Handel auf dem Martingal und sehen, wie es bereits umgesetzt wird.


Zum Beispiel Universum 3.0.


Danke, ich stimme Ihnen vollkommen zu - alles wurde vor langer Zeit erfunden.

 

Ausführung der Funktion init() beim Testen von EA im Tester.


Ich möchte einige externe Variablen in der init()-Funktion des EA normalisieren

und verwenden diese normalisierten Werte, um den Indikator von start() aus aufzurufen.

Ich möchte diese Normalisierung nicht in start() einbeziehen.

Wird die Funktion init() jedes Mal ausgeführt, wenn eine externe Variable während der Optimierung des EA im Strategietester geändert wird?
 
begemot61 писал(а) >>

Ausführung der Funktion init() beim Testen von EA im Tester.


Ich möchte einige externe Variablen in der init()-Funktion des EA normalisieren

und verwenden diese normalisierten (neuen) Werte für den Aufruf des Indikators aus start().

Ich möchte diese Normalisierung nicht in start() einbeziehen.

Wird die Funktion init() jedes Mal ausgeführt, wenn eine externe Variable während der Optimierung des EA im Strategietester geändert wird?

Ja, das wird es sein

 

int start()
{
if (OrdersTotal() == 0
&& TimeDayOfWeek(TimeCurrent()) == 5
&& TimeHour(TimeCurrent()) == 12
&& TimeMinute(TimeCurrent()) == 30
&& TimeSeconds(TimeCurrent()) >= 00)
{
Alert("Тра ляля");
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"sell",999999,0,Red);
}


Kann mir jemand sagen, warum sich eine Bestellung hier nicht öffnen lässt? Was mache ich falsch?
 
Dimoncheg писал(а) >>
Hat jemand eine Idee, warum eine Bestellung hier nicht geöffnet wird? Was mache ich falsch?

Okay, das hier... Wir müssen bis Freitag warten. Wenn es in dieser Minute einen Tick gibt, sollte er sich öffnen.

 
Roger >> :

Okay, das hier... Wir müssen bis Freitag warten. Wenn es in dieser Minute einen Tick gibt, sollte er sich öffnen.

>> Das ist es ja, ich mache es am Freitag oder an jedem anderen Tag der Woche und der Alarm funktioniert, aber die Bestellung öffnet sich nicht.

Grund der Beschwerde: