Equity-Oszillator von MQL5 bedeutet - Seite 6

 
joo:

Es ist am besten, so selten wie möglich in die Datei zu schreiben, daher ist es am besten, dies als Array zu tun. Die Werte sollten nicht öfter als einmal pro Minute gemessen werden, da es sonst zu Problemen bei der Darstellung auf dem Diagramm kommt (und es ist unverhältnismäßig ressourcenintensiv). Das heißt, am Ende des Laufs. Aber auch diese Variante ist möglich:

Der Algorithmus sieht folgendermaßen aus:

1) Führen Sie den Experten im Prüfgerät aus.

2) Wir haben den Wert von Interesse gemessen.

3) Dieser Wert wird in der Datei gespeichert.

4) Wir schreiben true in eine separate Datei, was bedeutet, dass wir einen neuen Wert haben.

5) Starten Sie eine Endlosschleife, die Exit-Bedingung ist false in der Flag-Datei.

6) In einem separaten Diagramm liest das Skript die Datei mit dem Flag, wenn es einen neuen Wert gibt, zeichnet es ein Risiko in das Diagramm und schreibt false in die Datei.

So ungefähr wird der visuelle Modus der Prüfung im Tester aussehen.

Warten Sie ein wenig, der Wettbewerb ist bald vorbei, vielleicht werden dann elegantere und schönere Lösungen präsentiert.

joo, Moment, welcher andere Wert ist von Interesse, wenn alle Werte von Interesse sind? :)

Ich denke, es ist folgendermaßen:

1. Im OnTick des Expert Advisors bilden wir ein programmatisches Array von Zählzuständen,

2. Am Ende des Tests schreiben Sie dieses Programm-Array als Ganzes in eine Datei (besser ist es, jeden Parameter in eine separate Datei zu schreiben),

3. dann das angegebene eindimensionale Array im Indikator OnInit abrufen

4. und kopieren Sie es in das Indikator-Array in OnCalculated.

Das einzige Problem ist, dass selbst das Schreiben des Arrays aus irgendeinem Grund immer noch ein Problem darstellt (siehe oben)

 
DV2010:

Moment, was ist der andere Wert von Interesse, wenn ich an allen Werten interessiert bin? :)

Sie sind mir alle egal.

DV2010:

Ich denke, es ist folgendermaßen

1. Lassen Sie uns ein Programm-Array von Zählzuständen in OnTick des Expert Advisors bilden,

2. Am Ende des Tests schreiben Sie dieses Programm-Array als Ganzes in eine Datei (besser ist es, jeden Parameter in eine separate Datei zu schreiben),

Das können Sie tun.

DV2010:

3. dann das angegebene eindimensionale Array im Indikator OnInit abrufen

Warum dann in Oninite? Müssen Sie es nur einmal machen? Sie sagten, dass Sie die Tests fast in Echtzeit überwachen müssen.

DV2010:

4. und kopieren Sie es in das Indikator-Array in OnCalculated.

Das einzige Problem ist, dass selbst das Schreiben des Arrays aus irgendeinem Grund immer noch ein Problem darstellt (siehe oben)

Das Problem wird sein, dass Sie die postischen Daten nicht im Diagramm anzeigen können. Es sei denn, Sie sammeln die Zecken, dann ....... Wie dem auch sei, ich habe Sie bereits gewarnt: Speichern Sie nicht mehr als einmal pro Minute Daten. Wenn Sie jedoch eine Analyse durchführen möchten, ohne an ein Handelsinstrument gebunden zu sein, können Sie sie auch in eine Excel-Datei hochladen.

 

Juhu, nein! :)

Alles, was ich bisher brauche, ist, dass der Tester seine Arbeit macht und die Oszillatoren der Kurven der Kontoindikatoren, die ich haben will, in der Historie erscheinen!

Sagen Sie mir, Ihrer Meinung nach, warum mein Expert Advisor, dessen Code ich oben zitiert und unten verlinkt habe, sich weigert, Daten aufzuzeichnen?

Dateien:
 
DV2010:

Rosch

Ich kann nicht verstehen, was genau der Grund dafür ist, aber im Gegensatz zu meinen Indikatoren erhalten Sie eine Meldung, wenn Sie mit Ihrem beginnen:

Jetzt habe ich einen ähnlichen einfachen Expert Advisor auf der Grundlage Ihres Codes erstellt, der alle Equity-Werte in eine Datei schreiben sollte (ich habe nur die Ausgabe aller Werte geändert, einschließlich der geschriebenen Null-Bytes, die Variablen global gemacht und das Öffnen und Schreiben der Datei in OnInit und OnTick aufgeteilt), aber obwohl kein Schreibfehler auftritt und die Datei erstellt wird, sind der Datensatz und die Datei leer.

Ist etwas nicht in Ordnung?

FileClose(filename);
 
Rosh:

Du hast doch nichts vermasselt, oder?

Ich habe, aber der Unterschied mit korrigiert ( FileClose(handle); ) ist wenig spürbar :)

Er schreibt immer noch nicht! :) Gleichzeitig schweigt er wie ein Partisan (es sei denn, man zählt die 0 Bytes, die geschrieben werden, als eine "Erklärung").

 
DV2010:

Durcheinander, aber der Unterschied mit dem korrigierten ( FileClose(handle); ) fühlt sich wenig :)

Er schreibt immer noch nicht! :) Gleichzeitig schweigt er wie ein Partisan (es sei denn, man zählt als "Erklärung", dass 0 Bytes geschrieben werden).

Ich weiß nicht, was Sie da machen. Hier ist eine Variante, die funktioniert

//+------------------------------------------------------------------+
//|                                          Demo_File_Common_EA.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//--- input parameters
input string   filename="equity.txt";
int handle;
string common_folder;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   common_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
//---
   handle=FileOpen(filename,FILE_WRITE|FILE_READ|FILE_COMMON);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   FileClose(handle);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(handle!=INVALID_HANDLE)
     {
      FileSeek(handle,0,SEEK_END);
      uint written=FileWrite(handle,TimeToString(TimeCurrent()),AccountInfoDouble(ACCOUNT_EQUITY));
      if(written>0)
        {
         //PrintFormat("Записано %d байт в общую папку всех терминалов - %s",written,common_folder);
        }
     }
   else
     {
      Print("Не удалось открыть на запись файл ",filename,".  Ошибка ",GetLastError());
     }

  }
//+------------------------------------------------------------------+
 
Rosh:

Ich weiß nicht, was Sie da machen. Hier ist eine Option, die funktioniert

Großartig! Um also in eine Datei zu schreiben, müssen Sie zusätzlich zu FileWrite auch einen Zeiger über FileSeek setzen.
Документация по MQL5: Файловые операции / FileWrite
Документация по MQL5: Файловые операции / FileWrite
  • www.mql5.com
Файловые операции / FileWrite - Документация по MQL5
 

... Zu einem gestern bereits angesprochenen Thema.

Ich habe es in OnTick und in OnCalculated eingefügt:

Print("ObjectsTotal =", ObjectsTotal(ChartID()));

aber nach dem Testen, trotz des Vorhandenseins von Objekten, die sich auf Eröffnungs- und Schlusspositionen beziehen (die Parameter Pfeile und Linien im Terminal sind zu sehen unter: Charts>Objects>Objects List), ist der Rückgabewert aus irgendeinem Grund 0.

Wer kann mir sagen, warum das so ist?

Kann es sein, dass der Prüfer die Objekte, die er automatisch erstellt, nicht sieht?

 
DV2010:

Wer kann mir sagen, warum dies der Fall ist?

Sieht der Prüfer die Objekte, die er automatisch erstellt, überhaupt nicht?

Die grafischen Objekte, die während der Prüfung erstellt werden, haben nichts mit den Objekten zu tun, die auf dem Diagramm zu sehen sind, das nach Abschluss der Prüfung geöffnet wird. Das bedeutet, dass es keine Möglichkeit gibt, die Einstiegs-/Ausstiegspfeile zu erreichen, die nach Beendigung des Tests auf dem Diagramm erscheinen werden.
 
Rosh:
Grafische Objekte, die während der Prüfung erstellt werden, sind in keiner Weise mit Objekten im Diagramm verbunden, das nach der Prüfung geöffnet wird. Mit anderen Worten: Es gibt keine Möglichkeit, die Einstiegs-/Ausstiegspfeile zu erreichen, die nach Abschluss der Tests auf dem Diagramm erscheinen werden.

Das ist genau das, was ich befürchtet habe!

Nun, dann muss ich meine eigenenObjekte zeichnen, obwohl ich nur die Farbe der Linien in Abhängigkeit vom Vorzeichen des Ergebnisses (Gewinn oder Verlust) der entsprechenden Positionen ändern muss, denn aus der Sicht der schnellsten Analyse der Verteilung von Gewinn- und Verlustgeschäften ist die Ergebnisfarbe viel wichtiger als die Farbe der Richtung. Wichtiger - und sei es nur, weil man die Richtung nach oben oder unten ohnehin auf dem Chart sehen kann (sowohl durch die Neigung der Linie als auch durch die Farbe der Pfeile), während man, um den Gewinn oder Verlust eines Handels mit dem Standardansatz zu verstehen, jedes Mal die Art der Position mit der Marktrichtung vergleichen muss).

Und es ist gut, wenn es nur ein paar Positionen im Tester gibt. Was aber, wenn es Hunderte oder Tausende sind? Beim Standardansatz wäre es in diesem Fall unmöglich, die Verteilung der Verlust- und Gewinnpositionen zu erkennen, während bei der Darstellung von Verlustgeschäften mit roten Linien und Gewinngeschäften mit blauen Linien die Verteilung höchstwahrscheinlich sogar auf der kleinsten Skala zu erkennen ist.

Warum ist das wichtig? Denn ein Handelssystem kann sich in verschiedenen Zeitrahmen unterschiedlich verhalten, und um seine Schwachstellen zu erkennen und diese zu beheben, müssen Sie eine Vorstellung von der Preisdynamik haben, mit der diese Serien von Verlustgeschäften verbunden sind.

Viele Anfragen von Händlern sind privater Natur und haben sowohl Plus- als auch Minuspunkte, d.h. aus der Kategorie "mehr oder weniger". Die Möglichkeit, die Art der Geschäftszeilen an der Schnittstelle des MetaTrader einzustellen, würde meiner Meinung nach die Analyse der Historie für viele Händler viel komfortabler machen, während es vom programmatischen Standpunkt aus gesehen meiner Meinung nach einfach zu machen ist und keine Minuspunkte gibt. Mit anderen Worten, wir brauchen eine Alternative zur traditionellen Variante der Verarbeitung nach Positionsart, eine Variante der Verarbeitung nach Ergebnissen von Geschäften. Vielleicht können Sie das hinzufügen oder zumindest unter den Forumsteilnehmern zur Abstimmung stellen?

Es gibt zwei Möglichkeiten, dies umzusetzen:

1. Die Verbindung der Objektzeichnung mit dem OnTcik EA, so dass diese Objekte programmatisch verändert werden können.

2. Einstellung auf der Ebene der Fensterschnittstelle hinzufügen.

Die Oszillatoren der Kontostände werden dieses Problem teilweise lösen, aber nur teilweise, weil die bequemste Darstellung der Geschäfte Wirksamkeit - ist ihre visuelle Darstellung, am nächsten an den Preis Dynamik.

Generell sind meiner Meinung nach der Tester und die Visualisierung der Effizienz der Geschäfte der schwächste Punkt der aktuellen Version 5. Bisher haben wir hier nur die Hinterlassenschaften der Vorgängerversionen in Form des Charts und der Ergebnisse, aber beide erlauben uns nur ein Urteil über die Effektivität des Expert Advisors im Allgemeinen, und der Eindruck kann trügerisch sein (es ist schon so oft vorgekommen, dass die Equity-Grafik des Expert Advisors stetig ansteigt, während eine genauere Untersuchung größere relative Drawdowns und andere "Überraschungen" offenbart).

Grund der Beschwerde: