L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 1849

 
Mihail Marchukajtes:
Standard con icustom... Ma legge i dati dal file dove viene scritto ogni tick, e l'indicatore legge i dati quando appare una nuova barra e si scopre che prende un valore sbagliato.

Per cominciare, non tutte le zecche sono scritte

  if ((interest!=inter))
  {

   MqlTick last_tick;
   if(SymbolInfoTick(Name_instrFS,last_tick)) 
    StartDate=last_tick.time;
    else StartDate=TimeCurrent();
    for (int i=0;i<100 && !IsStopped();i++)
    { 
      h=FileOpen("OpenI\\"+Name_instr+"_OI.csv",FILE_WRITE|FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON|FILE_SHARE_READ,",");
       if(h!=INVALID_HANDLE)                                                         
       {  
         
         FileSeek(h,0,SEEK_END);
         FileWrite(h,StartDate,DoubleToString(interest,0)); 
         FileClose(h); 
         Sleep(100);
         break; 
       }
    }   
    inter=interest;
   // byOR=byORD;
   // sellOR=sellORD;
  }

L'OI viene scritto solo se è cambiato e se è cambiato più di 10 (100 cicli di scrittura di linee identiche moltiplicati per 0,1 secondi di attesa dopo ogni scrittura) secondi fa. In effetti, molti tic vengono saltati, quindi la sincronizzazione esatta non è più possibile durante la riproduzione. Anche se non sto lavorando con i tick - specificare nel tester tutti i tick o solo quelli in cui ha avuto luogo la compravendita dello strumento (asset)?

È meglio creare un simbolo basato sui risultati di un minuto chiuso - ci sono meno dati spazzatura, la sincronizzazione nell'indicatore è più conveniente.


Per quanto riguarda l'indicatore - supponiamo che qualcosa sia stato disegnato correttamente sulla storia.

E poi sulla barra zero si verificherà la seguente situazione

  BufOI[0]=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_INTEREST);
 LastUPdate=FileGetInteger("OpenI\\"+FileName1,FILE_MODIFY_DATE,true);
  if ((LastUPdate!=UPdate))
     {
       int h=FileOpen("OpenI\\"+FileName1,FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON,",");
       string str=FileReadString(h);                            // читаем очередную строку из файла

    BufOI[1]=StringToDouble(str);
       FileClose(h);
   BufOI[0]=BufOI[1];

 UPdate=LastUPdate;   

Prendiamo i dati OM dal server e non sono presenti nel tester - e non vengono utilizzati.

Poi, se c'è una nuova data di modifica del file, che si aggiorna una volta ogni 15 minuti dal vivo, ma non nel tester, leggiamo i dati dal file (l'ultima linea) FileName1=_Symbol+FileNames+"_TMP.csv" e assegniamo i dati alla prima barra e chiudiamo il file e assegniamo il valore alla barra zero. Beh, è chiaro che questa variante non funzionerà nel tester.

Avete bisogno di due modalità dell'indicatore - per la storia e per il tempo reale, credo.


Hai controllato la correttezza dei dati sulla cronologia - sembra strano quando leggi i dati dal file...

         while(!FileIsEnding(h))
           {
            ArrayResize(oi,ct+2,1000);
            string str=FileReadString(h);                            // читаем очередную строку из файла
            if(cnt==0) oi[ct].time=StringToTime(str);                 //если запись первая, т.е. дата, то конвертируем из стринга в дататайм
            else if(cnt==2) oi[ct].oi=StringToDouble(str);   //если запсиь вторая, т.е. ОИ, то конвертируем в инт и 

            cnt++; // увеличиваем счетчик прочитанных строк
            if(FileIsLineEnding(h)) {cnt=0; ct++;}
           }

Si scopre che i dati sono stati letti

 
Aleksey Vyazmikin:

Per cominciare, non tutte le zecche sono scritte

L'OI viene scritto solo se è cambiato e se è cambiato più di 10 (100 cicli di registrazione delle stesse linee moltiplicati per 0,1 secondi di attesa dopo ogni registrazione) secondi fa. In effetti, molti tic vengono saltati, quindi la sincronizzazione esatta non è più possibile durante la riproduzione. Anche se non sto lavorando con i tick - specificare nel tester tutti i tick o solo quelli in cui ha avuto luogo la compravendita dello strumento (asset)?

È meglio creare un simbolo basato sui risultati di un minuto chiuso - ci sono meno dati spazzatura, la sincronizzazione nell'indicatore è più conveniente.


Per quanto riguarda l'indicatore - supponiamo che qualcosa sia stato disegnato correttamente sulla storia.

E poi sulla barra zero si verificherà la seguente situazione

Prendiamo i dati OM dal server e non sono presenti nel tester - e non vengono utilizzati.

Poi, se c'è una nuova data di modifica del file, che si aggiorna una volta ogni 15 minuti dal vivo, ma non nel tester, leggiamo i dati dal file (l'ultima linea) FileName1=_Symbol+FileNames+"_TMP.csv" e assegniamo i dati alla prima barra e chiudiamo il file e assegniamo il valore alla barra zero. Beh, è chiaro che questa variante non funzionerà nel tester.

Avete bisogno di due modalità dell'indicatore - per la storia e per il tempo reale, credo.


Hai controllato la correttezza dei dati sulla cronologia - sembra strano quando leggi i dati dal file...

Si scopre che i dati sono stati letti...

Sono assolutamente d'accordo con te. E scrive diversi valori in un minuto, non è ogni tick, ma comunque. Poi costruisce qualsiasi TF da questi dati.

Riguardo al fileТМP che era la mia scrittura. Ho fatto in modo che l'indicatore venisse aggiornato ad ogni arrivo di una nuova candela ed era più o meno giusto sul conto reale. Ma ad un certo momento prenderà o l'ultimo valore della candela precedente o il primo valore della candela già aperta. Ho chiesto all'autore di cambiarlo per una candela minuto ma non si è realizzato.

Ricordo che per ogni segnale dovevo ricompilare l'EA per inizializzare correttamente l'indicatore e ottenere i risultati corretti. Questo potrebbe cambiare il segnale attuale. Questo è ciò che è stato veramente inquietante....

Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
Идея автоматической торговли привлекательна тем, что торговый робот может без устали работать 24 часа в сутки и семь дней в неделю. Робот не знает усталости, сомнений и страха,  ему не ведомы психологические проблемы. Достаточно четко формализовать торговые правила и реализовать их в виде алгоритмов, и робот готов неустанно трудиться. Но прежде...
 
Mihail Marchukajtes:

Sono assolutamente d'accordo con te. E i dati scrivono diversi valori in un minuto, non è ogni tick, ma comunque. Poi costruisce qualsiasi TF da questi dati

Quindi che senso ha scrivere OI multipli in un minuto se si prendono i dati dall'indicatore - non ci sarà meno TF. E sì, mi sbaglio, c'è un'uscita dal ciclo, se scritto con successo, ma ancora 0,1 secondi di intervallo minimo. Costruisci il tuo modello sulle zecche?

Mihail Marchukajtes:

Ho scritto sul file TMP. Ho fatto aggiornare l'indicatore quando arriva una nuova candela e ha funzionato correttamente per davvero. Ma ad un certo momento prenderà o l'ultimo valore della candela precedente o il primo valore della candela già aperta. Ho chiesto all'autore di cambiarlo per gli indicatori minuti, ma non c'è stato alcun risultato.

Per un commercio reale, solo questa linea nell'indicatore è sufficiente - perché leggere i dati dal file quando puoi prenderli dal mercato?

BufOI[rates_total-1]=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_INTEREST);

Rende correttamente la storia nel visualizzatore?

 
Mihail Marchukajtes:

Mi sono ricordato che per ottenere risultati effettivi sull'input NS, dovevo ricompilare l'Expert Advisor ad ogni segnale in modo che l'indicatore si inizializzasse correttamente e producesse i risultati corretti. Questo potrebbe cambiare il segnale attuale. Questo è quello che mi dava veramente fastidio....

Questo è strano. Forse dovremmo rifiutare qualsiasi indicatore per l'EA e leggere direttamente dal file nella struttura e cercare il valore nella struttura dell'array?

Per favore, scaricate l'archivio di XI su Si per un paio di giorni - è difficile ragionare in astratto.
 
elibrarius:

Anch'io ho avuto un'idea simile, ma per ora sono occupato con qualcos'altro. Spero di sperimentarlo presto.
Ha anche lo svantaggio che il modello imparerà da 10 volte meno dati. Mi sembra che in questo caso la capacità di generalizzazione diminuisca.

Si potrebbe fare in un modo diverso - imparare su 9/10, e tagliare sul restante 1/10 di un campione.

 
Aleksey Vyazmikin:

Si può anche fare in un altro modo: imparare su 9/10 e tagliare sul restante 1/10 del campione.

Aleksey Vyazmikin:

Quindi, che senso ha scrivere OI diverse volte in un minuto, se si prendono i dati dall'indicatore - non ci sarà meno TF. E sì, mi sbaglio, c'è un'uscita dal ciclo lì, se scritto con successo, ma ancora 0,1 secondi di intervallo minimo. Il modello è costruito su zecche?

Quindi per il conto reale questa linea è sufficiente nell'indicatore - perché leggere i dati dal file, se possono essere presi dal mercato?

È stato disegnato correttamente nel visualizzatore nello Strategy Tester?

Sì, ma in caso di fallimento della connessione ci sarà un buco. Non c'è nessun controllo della pienezza della storia. Sono completamente d'accordo sui minuti.

Archivio OI

http://fayloobmennik.cloud/7399404

 
Mihail Marchukajtes:

Sì, ma in caso di fallimento della connessione, ci sarà un buco. Non c'è un controllo della completezza della storia. Per quanto riguarda i minuti, sono totalmente d'accordo.

Archivio OI

http://fayloobmennik.cloud/7399404

Quindi, come verranno scritti i dati nel file se la connessione viene interrotta?

 
Romano:

I dati fondamentali hanno molti indicatori che danno valori numerici.
Anche qui sul sito, il calendario delle notizie fornisce statistiche sugli eventi.
Sì, sono d'accordo, nelle dichiarazioni del discorso mancano i valori numerici.
Ecco perché tali dati dovrebbero probabilmente essere classificati come 0 1.
La cosa principale è insegnare la differenza tra discorso positivo o negativo ))
Ma qui, questa è anche un'idea, per pensare! ))

per usare la fondazione, mancano alcuni numeri

per quanto mi ricordi, non ho trovato aggregati monetari, ce ne sono diversi

alcuni di essi non sono stati resi pubblici dal 2010 circa.

 
Mihail Marchukajtes:

Sì, ma in caso di fallimento della connessione, ci sarà un buco. Non c'è un controllo della completezza della storia. Per quanto riguarda i minuti, sono totalmente d'accordo.

Archivio OI

http://fayloobmennik.cloud/7399404

Siete d'accordo che al momento dell'apertura della barra dei minuti l'OI dovrebbe essere preso per l'entrata precedente? Per esempio, al momento dell'apertura alle 10:00 prendiamo l'OM come 23:49:55.

Penso che sia meglio usare l'indicatore su M1 e prendere tutte le informazioni necessarie dalla barra zero e fare diversi confronti nell'Expert Advisor considerando la richiesta di informazioni dal buffer dell'indicatore con l'offset richiesto.

Qual è il terzo valore nel file - il primo è la data, il secondo è OM e il terzo è OI? Ho pensato che fosse un delta ma non funziona.

Ho provato a modificare l'indicatore come ho scritto sopra, legge e visualizza OM, la velocità di lavoro è molto più veloce ora, prova a controllare.

Sì, e la lettura da file dovrebbe funzionare se ci sono dati nel file, ma il mercato è chiuso e non ha controllato.

File:
OI_Test.mq5  16 kb
 
Aleksey Vyazmikin:

Quindi, come verranno scritti i dati nel file quando la connessione è interrotta?

Se la connessione viene tagliata globalmente dal broker, allora non si può fare nulla. Il consigliere per il salvataggio dei dati è sul server UPU e posso dire che i dati sono stati scritti senza alcuna perdita.
Motivazione: