Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 180

 
Igor Makanu:

Ja, ich bin der gleichen Meinung, aber nicht nur die Historie und die Anzahl der Indikatorpuffer - z.B. wieder bei der Speicherzuweisung, wenn MT4 den ganzen Speicher verschlungen hat, dann wird er langsamer - anscheinend beginnt er Speicherbereiche freizugeben

Sicherlich können die Entwickler antworten, aber wir sprechen über MetaTrader 4, und hier ...

 
Alexander Fedosov:

Warum sollte man im Code irgendwelche Berechnungen anstellen?

Machen Sie keine Berechnungen - das Thema war nicht klug, und ich war daran interessiert, zu überprüfen, was der Optimierer tut, also habe ich den Code entworfen

Sie können ihn so in Ihren Code einfügen:

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   handle=FileOpen("tst.txt",FILE_READ|FILE_WRITE|FILE_TXT);
   FileSeek(handle,0,SEEK_END);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(handle!=INVALID_HANDLE)
     {
      FileWriteString(handle,DoubleToString(Value1),DoubleToString(Value2)+"\n");
      FileClose(handle);
     }
  }
//+------------------------------------------------------------------+
void OnTick()
  {
  }

z.B. einfach Optimierungsparameter in die Datei schreiben, wenn es hängt, kann man in der Datei den letzten Durchlauf lesen, was die Parameter waren und die Zeit der Datei wird die Zeit des "letzten Atems" des Testers sein

 
Artyom Trishkin:

Die Entwickler werden eine eindeutige Antwort geben können, aber wir sprechen über MetaTrader 4, und da ...

Und hier... wird sich nichts ändern. Wir nutzen, was wir haben.

 

Hallo, können Sie mich beraten, das Handelssystem öffnet eine Position nur, wenn eine neue Stunde bar öffnet unter bestimmten Bedingungen. Ich muss sicherstellen, dass der Handel nicht erneut eröffnet wird, wenn ich die Position mit einem Stop Loss auf dem aktuellen Balken schließe. Ich habe es auf diese Weise umgesetzt:

if (OrdersTotal()==0 && ticket!=-1) // keine offenen Lose, aber Ticket vorhanden

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // Zeitpunkt des Bestellschlusses

datetime tob=iTime(NULL,PERIOD_H1,0); // Eröffnungszeit des aktuellen Balkens

if (tob>tct) // erlaubt es nicht, einen neuen Auftrag zu eröffnen, wenn der Handel mit der gleichen Kerze geschlossen wurde, mit der er eröffnet wurde

{

FUNKTION ZUR ERÖFFNUNG EINER POSITION

}


Im Strategietester werden wiedereröffnete Positionen nicht mehr geöffnet, aber beim Live-Handel wird eine Position geöffnet. Können Sie mir sagen, was los ist?))

 
kmerlin:

Hallo, können Sie mir sagen, ob das Handelssystem eine Position nur bei der Eröffnung eines neuen stündlichen Balkens unter bestimmten Bedingungen eröffnet? Ich muss sicherstellen, dass der Handel nicht erneut eröffnet wird, wenn ich die Position mit einem Stop Loss auf dem aktuellen Balken schließe. Ich habe es auf diese Weise umgesetzt:

if (OrdersTotal()==0 && ticket!=-1) // keine offenen Lose, aber Ticket vorhanden

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // Zeitpunkt des Bestellschlusses

datetime tob=iTime(NULL,PERIOD_H1,0); // Eröffnungszeit des aktuellen Balkens

if (tob>tct) // lässt die Eröffnung eines neuen Auftrags nicht zu, wenn der Handel im selben Takt geschlossen wurde, in dem er eröffnet wurde

{

FUNKTION ZUR ERÖFFNUNG EINER POSITION

}


Im Strategietester werden wiedereröffnete Positionen nicht mehr geöffnet, aber beim Live-Handel wird eine Position geöffnet. Können Sie mir sagen, was los ist?)

Ist es das?

 
Alexander Fedosov:

Ist es das?


nicht wirklich. Was stimmt mit meiner Variante nicht? Die Hauptbedingung ist, dass ich nicht in der Lage bin, auf der aktuellen Stundenkerze wieder einzusteigen! Es ist eine ziemlich einfache Bedingung, was ist daran falsch und warum funktioniert es nicht?

 
kmerlin:

nicht wirklich. Was stimmt mit meiner Variante nicht? Die wichtigste Bedingung ist, dass es nicht möglich ist, auf der aktuellen Kerze wieder einzusteigen! Es ist eine ziemlich einfache Bedingung, was ist daran falsch und warum funktioniert es nicht?

if (OrdersTotal()==0 && ticket!=-1) // Открытых лотов нет но тикет существует

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // Время закрытия ордера

datetime tob=iTime(NULL,PERIOD_H1,0); // Время открытия бара текущего

if (tob>tct) // Не дает открыть повторный ордер если сделка закрылась на той же свече что и открылась

{

ФУНКЦИЯ ОТКРЫТИЯ ПОЗИЦИИ

}

Und welches Ticket haben Sie in OrderSelect gewählt?

 
Alexander Fedosov:

Welches Ticket haben Sie in OrderSelect ausgewählt?

Das Ticket wird zuletzt gesendet... Wenn ein Auftrag offen ist, können keine neuen Aufträge im System eröffnet und keine schwebenden Aufträge erteilt werden. Das letzte Ticket ist also der letzte Stopp- oder Gewinnauftrag.
 
kmerlin:
Das Ticket wird an den letzten Auftrag weitergegeben. Wenn ein Auftrag offen ist, ist die Eröffnung neuer Aufträge im System nicht möglich, und auch die ausstehenden Aufträge können nicht ausgeführt werden. Das letzte Ticket ist also der letzte Auftrag mit Stopp oder Gewinn.

Wie übergeben Sie das Ticket der letzten Bestellung?

Und OrdersTotal() übergibt die Gesamtzahl der offenen und schwebenden Aufträge.

Hier ist der neue Balken des aktuellen Zeitrahmens.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewBar()
  {
   static datetime prevtime=0;
   if(prevtime==Time[0])
      return(false);
   else
     {
      prevtime=Time[0];
      return(true);
     }
  }
 
Alexander Fedosov:

Wie übergeben Sie das Ticket der letzten Bestellung?

Und OrdersTotal() übergibt die Gesamtzahl der offenen und schwebenden Aufträge.

Hier ist der neue Balken des aktuellen Zeitrahmens.

Das Ticket wird als globale Variable deklariert. Ein Ticket wird zum Kauf oder Verkauf weitergegeben. In meinem System können nicht mehrere Aufträge eröffnet werden, sondern nur ein Auftrag, und es können auch keine schwebenden Aufträge vorhanden sein. Daher ist das letzte Ticket, so wie ich es verstehe, ein Auftrag, der mit Gewinn oder Stop geschlossen wird.

ok, mir schwirrt der Kopf... ich werde deinen Rat morgen noch einmal überdenken