Come proteggersi dalla copia di operazioni lunghe dal tester - pagina 3

 
George Merts:
Sì, l'ho capito. Ma di nuovo, nel tester di strategia - si ottengono tick in sequenza, e non si sa quando si avrà l'ultimo tick.
Si può conoscere il tempo della prima barra (inizio), e il numero di barre nella storia del simbolo, questo è sufficiente.
 

la dll non è necessaria

Inite c'è qualcosa che puoi fare per estrarre la prima barra e il numero di barre per carattere(qualsiasi). Ma questo è per le vecchie costruzioni. E non so se funzionerà nel tester. Ma ho accesso alla storia in MT4 senza 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:
Puoi scoprire il tempo della prima barra (inizio), e il numero di barre nella storia del simbolo, questo è sufficiente.

Nel tester della strategia, il tempo della prima barra è il tempo del tick in arrivo. E aumenterà costantemente con l'arrivo dei tick nel tester di strategia.

Un esempio concreto:

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

La data attuale è 1.05.2015, iniziamo il tester di strategia per l'anno scorso. Al primo tick nel tester della strategia otterremo il tempo della barra zero di 1.1.2015. Anche se il tempo reale sul computer è 1.5.2015. Man mano che i tick arrivano nel tester della strategia - la data si sposterà, e anche la barra zero.

Usando il funzionamento del file, possiamo ottenere che anche se il nostro ultimo (barra zero) ha una data di 1.1.2015, il tempo reale è 1.05.2015. Di conseguenza, elaboriamo le zecche nel tester solo fino al 1.04.2015.

Man mano che arrivano nuovi giorni reali - nel tester otterremo sempre più tardi la data, e, di conseguenza, il processo ticchetta sempre di più, ma non più vicino di un mese alla data reale.

Ora - l'utente ha deciso di imbrogliarci, e ha impostato la data sul computer sei mesi avanti. Ora, nel tester, insieme alla data 1.05.2015 otterremo la data 1.11.2015, e i tick saranno elaborati fino al 1.10.2015, nonostante il fatto che la data reale - ancora 1.05.2015, e nel terminale dati realmente solo a questa data. Tuttavia, non c'è modo di ottenere questo valore dal tester all'inizio del test.

Questo è il problema.

Cioè, se potessimo ottenere dal tester la vera ultima data della serie temporale registrata nel tester - il problema sarebbe risolto. Ma il problema è che non è chiaro come farlo.

 
Alexandr Bryzgalov:

la dll non è necessaria

Inite c'è qualcosa che puoi fare per estrarre la prima barra e il numero di barre per carattere(qualsiasi). Ma questo è per le vecchie costruzioni. E non so se funzionerà nel tester. Ma ho accesso alla storia in MT4 senza dll

Inite la data sarà 1.01.2015 e di conseguenza tutte le barre saranno tirate solo da questa data. Anche se la data reale è 1.05.2015
 
George Merts:

Nel tester della strategia, il tempo della prima barra è il tempo del tick in arrivo. E aumenterà costantemente con l'arrivo dei tick nel tester di strategia.

Un esempio concreto:

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

La data attuale è 1.05.2015, iniziamo il tester di strategia per l'anno scorso. Al primo tick nel tester della strategia otterremo il tempo della barra zero di 1.1.2015. Anche se il tempo reale sul computer è 1.5.2015. Man mano che i tick arrivano nel tester della strategia - la data si sposterà, e anche la barra zero.

Usando il funzionamento del file, possiamo ottenere che anche se il nostro ultimo (barra zero) ha una data di 1.1.2015, il tempo reale è 1.05.2015. Di conseguenza, elaboriamo le zecche nel tester solo fino al 1.04.2015.

Man mano che arrivano nuovi giorni reali - nel tester otterremo sempre più tardi la data, e, di conseguenza, il processo ticchetta sempre di più, ma non più vicino di un mese alla data reale.

Ora - l'utente ha deciso di imbrogliarci, e ha impostato la data sul computer sei mesi avanti. Ora, nel tester, insieme alla data 1.05.2015 otterremo la data 1.11.2015, e i tick saranno elaborati fino al 1.10.2015, nonostante il fatto che la data reale - ancora 1.05.2015, e nel terminale dati realmente solo a questa data. Tuttavia, non c'è modo di ottenere questo valore dal tester all'inizio del test.

Questo è il problema.

Cioè, se potessimo ottenere dal tester la vera ultima data della serie temporale registrata nel tester - il problema sarebbe risolto. Ma il problema è che non è chiaro come farlo.

C'è un file di storia, dovremmo aprirlo (FileOpenHistory), leggerlo, trovare la prima (THE LAST BAR nella storia), leggere il suo tempo e contare il numero totale di barre.

Questo sarà sufficiente per manipolare l'arresto dell'Expert Advisor al momento giusto nel tester.

 
Non ottenere l'ultima data, ottenere la prima data nel file di cronologia e il numero totale di barre nel file di cronologia leggendolo dall'init
 
Alexandr Bryzgalov:

C'è un file di storia, bisogna aprirlo, leggerlo, trovare la prima (la BARRA PIÙ A SINISTRA nella storia), leggere il suo tempo, contare il numero totale di barre.

Questo sarà sufficiente per manipolare l'arresto dell'Expert Advisor al momento giusto nel tester.

Va bene, ma come possiamo accedervi dallo Strategy Tester? La variante proposta sopra ottiene le barre utilizzando le funzioni standard, che in Inite sul tester della strategia ci restituirà 1.01.2015 (Se eseguiamo il test da quella data)
 
Alexandr Bryzgalov:
Non avete bisogno di ottenere l'ultima data, dovete ottenere la prima data nel file di cronologia e il numero totale di barre nel file di cronologia leggendolo dall'init

А ! Questo è interessante.

Dovrò fare una prova.

 
George Merts:
È vero, ma come si fa ad accedervi dallo strategy tester?

Quindi è una normale operazione di file, o il tester non può accedere alla cronologia?

Non l'ho provato personalmente, ma non ci sono divieti nella guida

 
Forse sono fuori dal giro, ma in OnTesterInit() se controllate TimeLocal e TimeGMT, trovate la differenza in giorni, che ora mostrerà, l'ora reale o quella del tester?