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

 
Aleksey Vyazmikin:

Siete d'accordo che al momento dell'apertura della barra dei minuti l'OI dovrebbe essere preso per l'entrata precedente? Per esempio, prendiamo l'apertura alle 10:00 del mattino 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, basta provare.

Sì, e la lettura da file dovrebbe funzionare in caso di interruzione dei dati e presenza di dati nel file, ma il mercato è chiuso e non ho controllato.

Non ha molta importanza. È importante che i dati scritti siano sempre caricati correttamente nell'indicatore. Il problema è che tali errori sono ammessi prima che il file di allenamento sia stato salvato. Se specifichiamo questa regola, che sia così, la cosa più importante è che l'indicatore reale esegua correttamente questa regola.

Alexey, grazie per l'indicatore, ma ho una domanda su un Expert Advisor in tempo reale. Se non viene usato, salverà ogni minuto e non ogni cambio di OM in un minuto.

Non uso la barra zero nel mio lavoro. Inoltre, eseguo tutti i calcoli 30 secondi dopo il segnale sulla prima barra. Di conseguenza, nessun calcolo viene eseguito tra il segnale. Ma il segnale sulla prima barra in 30 secondi si applica a tutti gli indicatori che partecipano al modello e in teoria questi indicatori dovrebbero calcolare l'intera storia dall'ultimo riferimento (segnale) a quello attuale a condizione che non siano nel grafico. Questo è il foro che l'indicatore dovrebbe leggere dal file per ottenere il valore corrente con precisione.

Il punto è che io uso dati dipendenti dalle citazioni (l'ho chiamato così io stesso :-)) che sono sensibili alle lacune e ai buchi nella storia.

Per favore, aiutatemi a portare il codice degli indicatori che uso e vi ringrazierò con un paio di idee chiave nella preparazione dei kit di formazione. + ho 37 sterline sul mio servizio te le darò senza problemi. Ma solo a condizione che la piena affidabilità dei dati sia garantita per l'EA nel trading reale.

Il problema principale che ho è che quando alimento il mio EA con AI su un grafico e ottengo un segnale fresco ho bisogno di ricompilarlo e poi richiederà dati adeguati dagli indicatori. Ma il problema è con gli indicatori. Li mando in un grafico, visualizza la storia correttamente e continua a presentare i dati. Lo ricompilo dopo un po' di tempo e Tail che è stato disegnato sull'account reale cambia i suoi valori.

C'è anche un indicatore delta cumulativo che calcola correttamente rispetto alle barre. Tuttavia, quando la storia di questo indicatore è lunga, si tratta di 3 mesi su М5, non ha il tempo di essere calcolato per un ciclo poiché prende i dati da copitic, il quale stesso capisce quanti cicli riceve.

Recentemente l'aggiornamento ha iniziato a mangiare la memoria quando si crea un file di allenamento, perché viene richiesto per 14 strumenti in 3-6 mesi di storia. Di conseguenza, 8 giga di RAM non sono semplicemente sufficienti. E questo strumento scrive la barra zero in tempo reale, cosa di cui non ho bisogno. Mi basta caricare solo il primo quando appare la barra dello zero.

Se vuoi dare un aiuto scrivi in un messaggio personale e più in particolare accetta. Grazie!!!!

File:
CumDelta.mq5  55 kb
 
Mihail Marchukajtes:

Non ha molta importanza. L'importante è che i dati registrati siano sempre caricati correttamente nell'indicatore. La questione è che tali errori sono accettabili prima che il file di allenamento venga salvato. Se specifichiamo questa regola, che sia così, la cosa più importante è che l'indicatore reale esegua correttamente questa regola.

Alexey, grazie per l'indicatore, ma ho una domanda su un Expert Advisor in tempo reale. Se non viene usato, salverà ogni minuto e non ogni cambio di OM in un minuto.

Non uso la barra zero nel mio lavoro. Inoltre, eseguo tutti i calcoli 30 secondi dopo il segnale sulla prima barra. Di conseguenza, nessun calcolo viene eseguito tra il segnale. Ma il segnale sulla prima barra in 30 secondi si applica a tutti gli indicatori che partecipano al modello e in teoria questi indicatori dovrebbero calcolare l'intera storia dall'ultimo riferimento (segnale) a quello attuale a condizione che non siano nel grafico. Questo è il foro che l'indicatore deve leggere dal file per ottenere adeguatamente il valore corrente.

Il punto è che non possiamo riprodurre perfettamente la formazione e l'applicazione, soprattutto nel mercato veloce. Ora si scopre che il ritardo è fino a 10 secondi rispetto ai nuovi dati (se parliamo di storia) e se analizziamo solo l'apertura della barra, il ritardo sarà di 60 secondi o più. Se lavoriamo con i dati ottenuti all'apertura della barra (non spostati), ci sarà un errore nell'indicatore, cioè potremmo avere un'anticipazione del futuro. In generale dobbiamo pensare ancora una volta all'ideologia, ora i dati sono più recenti, ma è tutta teoria. Può essere sufficiente prendere i dati registrati quando appare una nuova barra e allenarsi su di essa.

Bene, possiamo fare uno script che rimuoverà semplicemente le linee non necessarie in un minuto e la dimensione del file sarà 10 volte inferiore.

Mihail Marchukajtes:

Il problema principale è che quando mando l'EA con l'AI al grafico e ottengo un segnale fresco, deve essere ricompilato e poi richiede dati adeguati dagli indicatori. Ma il problema è con gli indicatori. Li mando in un grafico, visualizza la storia correttamente e continua a presentare i dati. Lo ricompilo dopo un po' di tempo e Tail che è stato disegnato sull'account reale cambia i suoi valori.

Prova la versione dell'indicatore che ho dato. Se il problema persiste, probabilmente è nell'EA, non negli indicatori. Si prega di mostrare il codice per ottenere i dati dall'indicatore.

 
Mihail Marchukajtes:
Se la rottura è globale dal broker, non possiamo farci niente. Il consulente per il salvataggio dei dati è sul server UPU e i dati sono stati scritti senza alcuna perdita.

Ora è previsto che il consulente salvi i dati in parallelo con il lavoro dell'indicatore e del consulente di trading, così quando la connessione viene persa o il terminale viene chiuso, i nuovi dati storici saranno presi dal file, permetterà di continuare a lavorare con urgenza e poi sostituire il file con VPS e riavviare il consulente.

 
Mihail Marchukajtes:

\Alexey, grazie per l'indicatore, ma ho una domanda sull'Expert Advisor. È possibile farlo scrivere al minuto, ma non ad ogni cambio di OM in un minuto?

Se non pensi troppo, controlla questa variante

   MqlTick last_tick;
   if(SymbolInfoTick(Name_instrFS,last_tick))
      StartDate=last_tick.time;
   else StartDate=TimeCurrent();
   if(isNewBar(Name_instrFS,0,PERIOD_M1))
   {
      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;
   }
 
Aleksey Vyazmikin:

Se non è troppo disturbo, controlla.

Alexey, grazie mille. Lo controllerò sicuramente e vi informerò sui risultati. Per quanto riguarda il guardare nel futuro, non importa e non accadrà se l'EA scriverà allo stesso modo dell'indicatore. Se non c'è differenza tra loro, non avrà importanza. In alternativa, quando appare una nuova barra, aspettiamo il primo cambiamento di OI e registriamo il nuovo valore della prima barra precedente. Possiamo anche registrare non un nuovo valore, ma il vecchio che era ultimo per la prima barra. Cioè, in effetti, inizieremo a scriverlo alla fine della barra precedente.

La cosa importante non è l'OI che assegniamo alla barra dei minuti, ma come l'indicatore viene letto dal file.

 
Mihail Marchukajtes:

Alexei, grazie mille. Controllerò sicuramente tutto e vi farò sapere il risultato. Per quanto riguarda il guardare nel futuro, non è assolutamente importante e non accadrà se l'EA scrive come legge l'indicatore. Se non c'è differenza tra loro, non avrà importanza. In alternativa, quando appare una nuova barra, aspettiamo il primo cambiamento di OI e registriamo il nuovo valore della prima barra precedente. Possiamo anche registrare non un nuovo valore, ma il vecchio che era ultimo per la prima barra. Cioè, in effetti, inizieremo a scriverlo alla fine della barra precedente.

La cosa importante non è l'OI che assegneremo alla barra dei minuti, ma come l'indicatore verrà letto dal file.

Si prega di guardare il codice completo e chiedere

interest=SymbolInfoDouble(Name_instrFS,SYMBOL_SESSION_INTEREST); 


  if ((interest!=inter))
  {

   MqlTick last_tick;
   /*if(SymbolInfoTick(Name_instrFS,last_tick)) 
    StartDate=last_tick.time;
    else StartDate=TimeCurrent();*/
    StartDate=iTime(Name_instrFS,PERIOD_M1,1);
  if(isNewBar(Name_instrFS,0,PERIOD_M1))
   {  
    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(inter,0)); 
         FileClose(h); 
         Sleep(100);
         break; 
       }
    }   
    inter=interest;
   // byOR=byORD;
   // sellOR=sellORD;
  }
}


Se si apre una nuova barra e non c'è nessun cambiamento di OI entro 5 tick, entrerà nella condizione di nuova barra?

Penso che dovrebbe perché sarà la prima chiamata della nuova funzione bar e solo dopo che il risultato sarà cambiato in un falsh? Giusto?

 
Ho simulato il lavoro del codice nella mia testa e ho trovato un collo di bottiglia. L'ultima barra della sessione di ieri sarà scritta al primo cambio all'apertura della barra dei minuti della sessione di oggi, in caso di reinizializzazione dell'EA, il valore dell'OI sarà perso, il che porterà a una spiacevole entrata a zero nell'ultima barra della sessione di ieri. Penso che la soluzione sia ancora quella di non scrivere il valore precedente dell'OM nella prima barra, ma esattamente l'OM attuale, cioè quello che sarà il primo nella nuova barra. Ok, volevo sincronizzarli perfettamente, ma penso che andrà bene così com'è... Quindi... solo pensando ad alta voce...
 
Aleksey Vyazmikin:

Questo è il punto, è impossibile riprodurre perfettamente la formazione e l'applicazione, soprattutto in un mercato veloce. Ora si scopre che il ritardo è fino a 10 secondi rispetto ai nuovi dati (se stiamo parlando di storia), e se usiamo solo l'apertura della barra, il ritardo sarà di 60 secondi o più. Se lavoriamo con i dati ottenuti all'apertura della barra (non spostati), ci sarà un errore nell'indicatore, cioè potremmo avere un'anticipazione del futuro. In generale dobbiamo pensare ancora una volta all'ideologia, ora i dati sono più recenti, ma è tutta teoria. Può essere sufficiente prendere i dati registrati quando appare una nuova barra e allenarsi su di essa.

Bene, possiamo fare uno script che semplicemente rimuove le linee non necessarie in un minuto e la dimensione del file sarà 10 volte inferiore.

Prova la versione dell'indicatore che ho dato. Se il problema persiste, probabilmente è nell'EA e non negli indicatori. Si prega di mostrare il codice per ottenere i dati dall'indicatore.

Ho controllato l'indicatore sulla cronologia e ho un errore. Il fatto è che la prima candela di un minuto ha il tempo 10:00 nella finestra delle quotazioni, ma il valore per questa candela è preso dalla candela precedente. Cioè, la candela si è aperta alle 10:00:00 e si è chiusa alle 10:00:59. Questo è il valore che deve essere scritto, vero? E l'indicatore durante la costruzione prende il valore della barra dalle 23:59:59.
 
Mihail Marchukajtes:
Ho controllato l'indicatore sulla storia e l'errore è evidente. Il fatto è che la prima candela di un minuto ha il tempo 10:00 nella finestra delle quotazioni, ma il valore per questa candela è preso dalla candela precedente. Significa che la candela si è aperta alle 10:00:00 e chiusa alle 10:00:59. Questo è il valore che dobbiamo scrivere, vero? E l'indicatore prende il valore delle 23:59:59 quando traccia la barra.
L'ho fatto. Ora non importa se il file è scritto per minuto o per tick, scriverà i valori corretti per la candela. Cioè, se una candela ha un tempo aperto, ci scriviamo il valore alla chiusura di questa candela...
 
Mihail Marchukajtes:
Ho controllato l'indicatore sulla storia e l'errore è evidente. Il fatto è che la prima candela di un minuto ha il tempo 10:00 nella finestra delle quotazioni, ma il valore per questa candela è preso dalla candela precedente. Cioè, la candela ha aperto alle 10:00:00 e chiuso alle 10:00:59. Questo è il valore che deve essere scritto, vero? E l'indicatore prende il valore delle 23:59:59 quando costruisce la barra.

Se l'EA lavora sull'apertura della barra, anche se con un ritardo, è corretto alimentarlo con i dati sulla chiusura della candela, cioè guardare nel futuro? Questo è il motivo per cui si usano i dati più freschi prima di questa candela, cioè un piccolo ritardo, invece di andare avanti.


Mihail Marchukajtes:

Si prega di rivedere il codice completo e chiedere


Se si apre una nuova barra e non c'è nessun cambiamento di OI entro 5 tick, entrerà nella condizione di una nuova barra?

Penso che dovrebbe perché sarà la prima chiamata della funzione della nuova barra e solo dopo di essa il risultato cambierà in un falsh? Giusto?

Dov'è il conteggio delle 5 zecche qui? Succede che in tutto il minuto non c'è nessuna transazione, e allora si perde la barra, ed è per questo che ho rimosso il confronto per i cambiamenti OI, in modo che i dati vengano scritti immediatamente all'apertura di una nuova candela. Forse mi è sfuggito qualcosa, avrei dovuto testarlo con i dati ma ieri non li avevo e sono giorni feriali :(