Wie Sie sich vor dem Kopieren von Long Trades des Testers schützen können - Seite 3

 
George Merts:
Ja, das verstehe ich. Aber wie gesagt, im Strategietester erhält man die Ticks nacheinander, und man weiß nicht, wann der letzte Tick kommt.
Sie können den Zeitpunkt des ersten Taktes (Start) und die Anzahl der Takte in der Historie des Symbols kennen, das reicht aus.
 

dll wird nicht benötigt

Inite gibt es etwas, das Sie tun können, um den ersten Balken und die Anzahl der Balken nach Zeichen(beliebig) zu ziehen. Aber das ist für alte Builds. Und ich weiß nicht, ob es im Testgerät funktioniert. Aber ich habe Zugriff auf die Geschichte in MT4 ohne dll

int init()
{
        int    _GetLastError = 0, cnt_ticks = 0, cnt_bars = 0, temp[13];
        // запоминаем символ графика, обнуляем хэндл окна off-line графика
        _Symbol = Symbol();
   hwnd = 0;

        // открываем файл, в который будем записывать историю
        string file_name = StringConcatenate( "!Eqv", _Symbol, TicksInBar, ".hst" );
        int sd_=iBars("!Eqv"+ _Symbol,TicksInBar)-1;
   double Open_[],
          Close_[],
          High_[],
          Low_[];
   int Time_[];
   ArrayResize(Open_,sd_+1);
   ArrayResize(High_,sd_+1);
   ArrayResize(Low_,sd_+1);
   ArrayResize(Close_,sd_+1);
   ArrayResize(Time_,sd_+1);
        for(int sd=iBars("!Eqv"+ _Symbol,TicksInBar)-1;sd>=0;sd--)
        {
           Time_[sd]=iTime("!Eqv"+ _Symbol,TicksInBar,sd);
           Open_[sd]=iOpen("!Eqv"+ _Symbol,TicksInBar,sd);
           Close_[sd]=iClose("!Eqv"+ _Symbol,TicksInBar,sd);
           High_[sd]=iHigh("!Eqv"+ _Symbol,TicksInBar,sd);
           Low_[sd]=iLow("!Eqv"+ _Symbol,TicksInBar,sd);
           //Print(sd," ",GetLastError()," ",Time_[sd]," ",Low_[sd]," ",High_[sd]," ",Close_[sd]," ",Open_[sd]);
        }

        return(0);
}
 
Alexandr Bryzgalov:
Sie können den Zeitpunkt des ersten Balkens (Start) und die Anzahl der Balken in der Symbolhistorie herausfinden, das reicht aus.

Im Strategietester ist der Zeitpunkt des ersten Balkens der Zeitpunkt des eingehenden Ticks. Und sie wird sich mit dem Eintreffen der Ticks im Strategietester ständig erhöhen.

Ein konkretes Beispiel:

-----------------------------------------------

Das aktuelle Datum ist der 1.05.2015, wir starten den Strategietester für das letzte Jahr. Beim ersten Tick im Strategietester erhalten wir die Null-Bar-Zeit vom 1.1.2015. Die tatsächliche Zeit auf dem Computer ist jedoch 1.5.2015. Wenn die Ticks in den Strategietester kommen, wird das Datum verschoben, und der Null-Balken ebenso.

Mit Hilfe der Datei-Operation können wir feststellen, dass unser letzter (Null-Balken) zwar das Datum 1.1.2015 hat, die tatsächliche Zeit aber der 1.05.2015 ist. Dementsprechend verarbeiten wir im Tester nur Zecken bis zum 1.04.2015.

Wenn neue reale Tage kommen - im Tester werden wir immer spätere Daten bekommen, und dementsprechend tickt der Prozess immer weiter, aber nicht näher als einen Monat zum realen Datum.

Jetzt hat der Benutzer beschlossen, uns zu betrügen und das Datum auf dem Computer sechs Monate im Voraus einzustellen. Nun, im Tester, zusammen mit dem Datum 1.05.2015 werden wir das Datum 1.11.2015 zu bekommen, und die Zecken werden bis 1.10.2015 verarbeitet werden, trotz der Tatsache, dass das eigentliche Datum - noch 1.05.2015, und im Terminal wirklich Daten nur zu diesem Zeitpunkt. Es gibt jedoch keine Möglichkeit, diesen Wert zu Beginn des Tests vom Prüfer zu erhalten.

Das ist das Problem.

Das heißt, wenn wir das tatsächliche letzte Datum der im Prüfgerät aufgezeichneten Zeitreihe vom Prüfgerät erhalten könnten, wäre das Problem gelöst. Aber das Problem ist, dass nicht klar ist, wie man das macht.

 
Alexandr Bryzgalov:

dll wird nicht benötigt

Inite gibt es etwas, das Sie tun können, um den ersten Balken und die Anzahl der Balken nach Zeichen(beliebig) zu ziehen. Aber das ist für alte Builds. Und ich weiß nicht, ob es im Testgerät funktioniert. Aber ich habe Zugriff auf die Geschichte in MT4 ohne dll

Inite wird das Datum der 1.01.2015 sein und dementsprechend werden alle Balken erst ab diesem Datum gezogen werden. Das tatsächliche Datum ist jedoch der 1.05.2015.
 
George Merts:

Im Strategietester ist der Zeitpunkt des ersten Balkens der Zeitpunkt des eingehenden Ticks. Und sie wird mit dem Eintreffen der Ticks im Strategietester ständig zunehmen.

Ein konkretes Beispiel:

-----------------------------------------------

Das aktuelle Datum ist der 1.05.2015, wir starten den Strategietester für das letzte Jahr. Beim ersten Tick im Strategietester erhalten wir die Null-Bar-Zeit vom 1.1.2015. Die tatsächliche Zeit auf dem Computer ist jedoch 1.5.2015. Wenn die Ticks in den Strategietester kommen, wird das Datum verschoben, und der Null-Balken ebenso.

Mit der Dateioperation können wir herausfinden, dass, obwohl unser letzter (Null-Balken) ein Datum vom 1.1.2015 hat, die reale Zeit der 1.05.2015 ist. Dementsprechend verarbeiten wir im Tester nur Zecken bis zum 1.04.2015.

Wenn neue echte Tage kommen - im Tester werden wir immer spätere Daten bekommen, und dementsprechend werden wir Ticks immer weiter verarbeiten, aber nicht näher als einen Monat vor dem echten Datum.

Jetzt hat der Benutzer beschlossen, uns zu betrügen und das Datum auf dem Computer sechs Monate im Voraus einzustellen. Nun, im Tester, zusammen mit dem Datum 1.05.2015 werden wir das Datum 1.11.2015 zu bekommen, und die Zecken werden bis 1.10.2015 verarbeitet werden, trotz der Tatsache, dass das eigentliche Datum - noch 1.05.2015, und im Terminal wirklich Daten nur zu diesem Zeitpunkt. Es gibt jedoch keine Möglichkeit, diesen Wert zu Beginn des Tests vom Prüfer zu erhalten.

Das ist das Problem.

Das heißt, wenn wir das tatsächliche letzte Datum der im Prüfgerät aufgezeichneten Zeitreihe vom Prüfgerät erhalten könnten, wäre das Problem gelöst. Aber das Problem ist, dass nicht klar ist, wie man das macht.

Es gibt eine Verlaufsdatei, wir sollten sie öffnen (FileOpenHistory), sie lesen, den ersten (DEN LETZTEN BAR im Verlauf) finden, seine Zeit lesen und die Gesamtzahl der Bars zählen.

Dies reicht aus, um das Anhalten des Expert Advisors zum richtigen Zeitpunkt im Testgerät zu manipulieren.

 
Ermitteln Sie nicht das letzte Datum, sondern das erste Datum in der Verlaufsdatei und die Gesamtzahl der Takte in der Verlaufsdatei, indem Sie sie aus der Init-Datei lesen
 
Alexandr Bryzgalov:

Es gibt eine Verlaufsdatei, die Sie öffnen und lesen müssen. Suchen Sie den ersten (den LINKSTEN BAR in der Historie), lesen Sie seine Zeit und berechnen Sie die Gesamtzahl der Bars.

Dies reicht aus, um das Anhalten des EA zum richtigen Zeitpunkt im Tester zu manipulieren.

Gut, aber wie können wir vom Strategietester aus darauf zugreifen? Die oben vorgeschlagene Variante erhält die Balken mit Hilfe von Standardfunktionen, die uns in Inite auf dem Strategietester den 1.01.2015 zurückgeben (wenn wir den Test ab diesem Datum ausführen)
 
Alexandr Bryzgalov:
Sie brauchen nicht das letzte Datum, sondern nur das erste Datum in der Verlaufsdatei und die Gesamtzahl der Takte in der Verlaufsdatei, indem Sie sie aus der Datei init

А ! Das ist sehr interessant.

Ich werde es ausprobieren müssen.

 
George Merts:
Richtig, nur wie kommt man vom Strategietester darauf?

Handelt es sich also um einen normalen Dateivorgang, oder darf der Prüfer nicht auf den Verlauf zugreifen?

Ich habe es nicht selbst ausprobiert, aber in der Hilfe ist es nicht verboten.

 
Ich bin vielleicht nicht ganz auf dem Laufenden, aber wenn Sie in OnTesterInit() TimeLocal und TimeGMT prüfen und den Unterschied in Tagen feststellen, welche Zeit wird dann angezeigt, die Echtzeit oder die Testerzeit?