Comment se protéger contre la copie des transactions longues du testeur ? - page 3

 
George Merts:
Oui, je comprends. Mais encore une fois, dans le testeur de stratégie - vous obtenez les ticks séquentiellement, et vous ne savez pas quand vous aurez le dernier tick.
Vous pouvez connaître l'heure de la première barre (start), et le nombre de barres dans l'historique du symbole, c'est suffisant.
 

dll n'est pas nécessaire

Il est possible de faire quelque chose pour afficher la première barre et le nombre de barres par caractère(n'importe lequel). Mais c'est pour les anciennes constructions. Et je ne sais pas si cela fonctionnera dans le testeur. Mais j'ai accès à l'historique dans MT4 sans 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:
Vous pouvez trouver l'heure de la première barre (début) et le nombre de barres dans l'historique des symboles, c'est suffisant.

Dans le testeur de stratégie, l'heure de la première barre est l'heure du tick entrant. Et il augmentera constamment avec l'arrivée des ticks dans le testeur de stratégie.

Un exemple concret :

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

La date actuelle est le 1.05.2015, nous commençons le testeur de stratégie pour l'année dernière. Sur le premier tick dans le testeur de stratégie, nous obtiendrons le temps de barre zéro du 1.1.2015. Bien que le temps réel sur l'ordinateur soit 1.5.2015. Au fur et à mesure que les ticks arrivent dans le testeur de stratégie, la date se déplace, ainsi que la barre de zéro.

En utilisant l'opération du fichier, nous pouvons obtenir que même si notre dernier (barre zéro) a une date du 1.1.2015, l'heure réelle est le 1.05.2015. En conséquence, nous ne traitons les ticks dans le testeur que jusqu'au 1.04.2015.

Au fur et à mesure que de nouveaux jours réels arrivent - dans le testeur, nous obtiendrons une date de plus en plus tardive, et, en conséquence, le processus tique de plus en plus, mais pas plus près qu'un mois de la date réelle.

Maintenant, l'utilisateur a décidé de nous tromper et de régler la date sur l'ordinateur six mois à l'avance. Maintenant, dans le testeur, avec la date 1.05.2015 nous obtiendrons la date 1.11.2015, et les ticks seront traités jusqu'au 1.10.2015, malgré le fait que la date réelle - toujours 1.05.2015, et dans le terminal vraiment les données seulement à cette date. Cependant, il n'y a aucun moyen d'obtenir cette valeur du testeur au début du test.

C'est là le problème.

Autrement dit, si nous pouvions obtenir du testeur la dernière date réelle de la série chronologique enregistrée dans le testeur, le problème serait résolu. Mais le problème est qu'on ne sait pas très bien comment s'y prendre.

 
Alexandr Bryzgalov:

dll n'est pas nécessaire

Il est possible de faire quelque chose pour afficher la première barre et le nombre de barres par caractère(n'importe lequel). Mais c'est pour les anciennes constructions. Et je ne sais pas si cela fonctionnera dans le testeur. Mais j'ai accès à l'historique dans MT4 sans dll.

Inite la date sera le 1.01.2015 et en conséquence toutes les barres seront tirées seulement à partir de cette date. Bien que la date réelle soit le 1.05.2015.
 
George Merts:

Dans le testeur de stratégie, l'heure de la première barre est l'heure du tick entrant. Et il augmentera constamment avec l'arrivée des ticks dans le testeur de stratégie.

Un exemple concret :

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

La date actuelle est le 1.05.2015, nous commençons le testeur de stratégie pour l'année dernière. Sur le premier tick dans le testeur de stratégie, nous obtiendrons le temps de barre zéro du 1.1.2015. Bien que le temps réel sur l'ordinateur soit 1.5.2015. Au fur et à mesure que les ticks arrivent dans le testeur de stratégie, la date se déplace, ainsi que la barre de zéro.

En utilisant l'opération du fichier, nous pouvons obtenir que même si notre dernier (barre zéro) a une date du 1.1.2015, l'heure réelle est le 1.05.2015. En conséquence, nous ne traitons les ticks dans le testeur que jusqu'au 1.04.2015.

Au fur et à mesure que de nouveaux jours réels arrivent - dans le testeur, nous obtiendrons une date de plus en plus tardive, et, en conséquence, le processus tique de plus en plus, mais pas plus près qu'un mois de la date réelle.

Maintenant, l'utilisateur a décidé de nous tromper et de régler la date sur l'ordinateur six mois à l'avance. Maintenant, dans le testeur, avec la date 1.05.2015 nous obtiendrons la date 1.11.2015, et les ticks seront traités jusqu'au 1.10.2015, malgré le fait que la date réelle - toujours 1.05.2015, et dans le terminal vraiment les données seulement à cette date. Cependant, il n'y a aucun moyen d'obtenir cette valeur du testeur au début du test.

C'est là le problème.

Autrement dit, si nous pouvions obtenir du testeur la dernière date réelle de la série chronologique enregistrée dans le testeur, le problème serait résolu. Mais le problème est qu'on ne sait pas très bien comment s'y prendre.

Il existe un fichier historique, nous devons l'ouvrir (FileOpenHistory), le lire, trouver la première (THE LAST BAR in history), lire son heure et compter le nombre total de barres.

Cela sera suffisant pour manipuler l'arrêt du conseiller expert au bon moment dans le testeur.

 
Ne récupérez pas la dernière date, récupérez la première date dans le fichier d'historique et le nombre total de barres dans le fichier d'historique en le lisant depuis l'init.
 
Alexandr Bryzgalov:

Il existe un fichier historique, vous devez l'ouvrir, le lire, trouver la première (la barre la plus à gauche dans l'historique), lire son temps, compter le nombre total de barres.

Cela sera suffisant pour manipuler l'arrêt de l'EA au bon moment dans le testeur.

D'accord, mais comment y accéder depuis le testeur de stratégie? La variante suggérée ci-dessus obtient les barres en utilisant les fonctions standard, qui dans Inite sur le testeur de stratégie nous renverra 1.01.2015 (Si nous exécutons le test à partir de cette date).
 
Alexandr Bryzgalov:
Vous n'avez pas besoin d'obtenir la dernière date, vous devez obtenir la première date dans le fichier historique et le nombre total de barres dans le fichier historique en le lisant depuis le fichier init.

А ! Voilà qui est intéressant.

Je vais devoir l'essayer.

 
George Merts:
C'est exact, mais comment y accéder depuis le testeur de stratégie?

S'agit-il donc d'une opération normale sur un fichier, ou le testeur n'est-il pas autorisé à accéder à l'historique ?

Je ne l'ai pas essayé moi-même, mais il n'y a pas d'interdiction dans l'aide.

 
Je suis peut-être hors du circuit, mais dans OnTesterInit() si vous vérifiez TimeLocal et TimeGMT, trouvez la différence en jours, quelle heure affichera-t-il, l'heure réelle ou l'heure du testeur ?