L'oscillatore di equità di MQL5 significa - pagina 6

 
joo:

È meglio scrivere sul file il meno frequentemente possibile, quindi è meglio farlo come array. I valori non dovrebbero essere misurati più spesso di una volta al minuto, altrimenti ci saranno problemi con la loro visualizzazione sul grafico (ed è irragionevolmente intensivo in termini di risorse). Cioè, alla fine della corsa. Ma anche questa variante è possibile:

L'algoritmo emerge come segue:

1) Eseguire expert nel tester.

2) Abbiamo misurato il valore di interesse.

3) Registrate questo valore nel file.

4) Scriviamo true in un file separato, il che significa che abbiamo un nuovo valore.

5) Avviare un ciclo infinito, la condizione di uscita è falsa nel file di flag.

6) In un grafico separato lo script legge il file con la bandiera, se c'è un nuovo valore, disegna un rischio sul grafico, scrive falso sul file.

Questo è più o meno come sarà la modalità visiva dei test nel tester.

Aspettate un po', il concorso sarà finito, forse verranno presentate soluzioni più eleganti e belle.

joo, Aspetta, quale altro valore è interessante, se tutti i valori sono interessanti? :)

Penso che sia così:

1. nell'OnTick dell'Expert Advisor, formiamo un array programmatico di stati di conteggio,

2. alla fine del test, scrivete questo array di programmi nel suo insieme in un file (meglio scrivere ogni parametro in un file separato),

3. poi recuperare l'array unidimensionale specificato nell'indicatore OnInit

4. e copiarlo nella matrice dell'indicatore onCalculated.

L'unico problema è che anche la scrittura dell'array è ancora un problema per qualche motivo (vedi sopra)

 
DV2010:

Aspetta, qual è l'altro valore di interesse se sono interessato a tutti i valori? :)

Non mi importa di tutti loro.

DV2010:

Penso che sia così

1. formiamo un programma di array di stati di conteggio in OnTick di Expert Advisor,

2. alla fine del test, scrivete questo array di programmi nel suo insieme in un file (meglio scrivere ogni parametro in un file separato),

Puoi farlo.

DV2010:

3. poi recuperare l'array unidimensionale specificato nell'indicatore OnInit

Perché in oninite allora? Dovete farlo solo una volta? Hai detto che devi quasi monitorare i test in tempo reale.

DV2010:

4. e copiarlo nell'array di indicatori in OnCalculated.

L'unico problema è che anche la scrittura dell'array è ancora un problema per qualche motivo (vedi sopra)

Il problema sarà che non puoi visualizzare i dati postici sul grafico. A meno che, naturalmente, non si raccolgano le zecche, allora ....... Comunque, ti ho già avvertito: non salvare i dati più di una volta al minuto. Ma se vuoi analizzare, per esempio, senza legarti a uno strumento di trading, puoi anche caricarlo in un file excel.

 

joo, no! :)

Tutto ciò di cui ho bisogno finora è che il tester faccia il suo lavoro e ottenga gli oscillatori delle curve degli indicatori di conto che voglio sulla storia!

Ditemi, secondo voi, perché il mio Expert Advisor, il cui codice ho citato sopra e che linko qui sotto, si rifiuta di registrare i dati?

 
DV2010:

Rosh

Non riesco a capire quale sia esattamente la ragione, ma a differenza dei miei indicatori, quando inizi con i tuoi, ricevi un messaggio:

Ora ho fatto un semplice Expert Advisor simile, basato sul tuo codice, che dovrebbe scrivere tutti i valori di Equity nel file (ho cambiato solo l'output di tutti i valori, compresi i byte zero scritti, reso le variabili globali, e diviso l'apertura e la scrittura del file in OnInit e OnTick), ma nonostante l'assenza di errore di scrittura e il file venga creato, il record e il file sono vuoti.

C'è qualcosa che non va?

FileClose(filename);
 
Rosh:

Non hai sbagliato nulla, vero?

L'ho fatto, ma la differenza con la correzione ( FileClose(handle); ) si sente poco :)

Ancora non scrive! :) Allo stesso tempo tace come un partigiano (a meno che non conti 0 byte scritti come una "spiegazione").

 
DV2010:

Incasinato, ma la differenza con il corretto ( FileClose(handle); ) si sente poco :)

Ancora non scrive! :) Allo stesso tempo è silenzioso come un partigiano (a meno che non si conti come "spiegazione" che 0 byte sono scritti).

Non so cosa stai facendo lì. Ecco una variante che funziona

//+------------------------------------------------------------------+
//|                                          Demo_File_Common_EA.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp."
#property link      "http://www.mql5.com"
#property version   "1.00"
//--- input parameters
input string   filename="equity.txt";
int handle;
string common_folder;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   common_folder=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
//---
   handle=FileOpen(filename,FILE_WRITE|FILE_READ|FILE_COMMON);
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   FileClose(handle);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(handle!=INVALID_HANDLE)
     {
      FileSeek(handle,0,SEEK_END);
      uint written=FileWrite(handle,TimeToString(TimeCurrent()),AccountInfoDouble(ACCOUNT_EQUITY));
      if(written>0)
        {
         //PrintFormat("Записано %d байт в общую папку всех терминалов - %s",written,common_folder);
        }
     }
   else
     {
      Print("Не удалось открыть на запись файл ",filename,".  Ошибка ",GetLastError());
     }

  }
//+------------------------------------------------------------------+
 
Rosh:

Non so cosa stai facendo lì. Ecco un'opzione che funziona

Grande! Quindi, per scrivere su un file, oltre a FileWrite, dovete anche impostare un puntatore tramite FileSeek.
Документация по MQL5: Файловые операции / FileWrite
Документация по MQL5: Файловые операции / FileWrite
  • www.mql5.com
Файловые операции / FileWrite - Документация по MQL5
 

... Su una questione già sollevata ieri.

L'ho inserito in OnTick e in OnCalculated:

Print("ObjectsTotal =", ObjectsTotal(ChartID()));

ma dopo aver testato, nonostante la presenza di oggetti relativi alle posizioni di apertura e chiusura (i parametri delle frecce e delle linee nel terminale possono essere visti in: Charts>Objects>Objects List), il valore di ritorno è 0 per qualche motivo.

Chi può dirmi perché succede?

Può essere che il tester non veda gli oggetti creati automaticamente da lui stesso?

 
DV2010:

Chi può dirmi perché questo è il caso?

Il tester non vede affatto gli oggetti che crea automaticamente?

Gli oggetti grafici che vengono creati durante i test non hanno niente a che vedere con gli oggetti che sono presenti nel grafico che viene aperto dopo la fine dei test. Significa che non c'è modo di raggiungere le frecce di entrata/uscita che appariranno sul grafico al termine del test.
 
Rosh:
Gli oggetti grafici creati durante i test non sono collegati in alcun modo agli oggetti del grafico che viene aperto dopo i test. In altre parole, non c'è modo di raggiungere le frecce di entrata/uscita che appariranno sul grafico al termine del test.

Questo è esattamente ciò di cui avevo paura!

Bene, allora dovròdisegnare i mieioggetti, anche se tutto ciò di cui ho bisogno è solo di cambiare il colore delle linee a seconda del segno del risultato (profitto o perdita) delle posizioni corrispondenti, perché dal punto di vista dell'analisi più veloce della distribuzione dei trade redditizi e perdenti, il colore del risultato è molto più importante del colore della direzione. Più importante - se non altro perché sul grafico si vede comunque la direzione verso l'alto o verso il basso (sia dalla pendenza della linea che dal colore delle frecce), mentre per capire il profitto o la perdita di un trade usando l'approccio standard è necessario confrontare ogni volta il tipo di posizione con la direzione del mercato).

Ed è bene che ci siano solo poche posizioni nel tester. Ma cosa succede se ce ne sono centinaia o migliaia? Nell'approccio standard sarebbe impossibile vedere la distribuzione delle posizioni perdenti e redditizie in questo caso, mentre se i trade in perdita fossero mostrati con linee rosse e quelli redditizi - con quelle blu, la distribuzione può essere molto probabilmente vista anche alla scala più piccola.

Perché è importante? Perché un sistema di trading può comportarsi in modo diverso a diversi timeframe, e per identificare i suoi punti più deboli e lavorare su questi punti è necessario avere un'idea della dinamica dei prezzi a cui sono associate quelle serie di trade perdenti.

Le richieste di molti trader sono di natura privata e hanno sia i plus che i minus, cioè della categoria "in misura maggiore o minore". La possibilità di impostare il tipo di linee di deal all'interfaccia di MetaTrader, a mio parere, renderebbe l'analisi storica molto più comoda per molti trader, mentre dal punto di vista programmatico, penso sia facile da fare e non ci sono minus. In altre parole, abbiamo bisogno di un'alternativa alla variante tradizionale dell'elaborazione per tipo di posizione, la variante dell'elaborazione per risultato commerciale. Quindi forse si può aggiungere o almeno metterlo ai voti tra i partecipanti al forum?

Ci possono essere due modi per implementarlo:

1. Il collegamento del disegno degli oggetti con l'OnTcik Expert Advisor, in modo che questi oggetti possano essere modificati programmaticamente.

2. Aggiungere l'impostazione a livello di interfaccia della finestra.

Gli oscillatori degli stati dei conti risolveranno in parte questo problema, ma solo in parte, perché la rappresentazione più conveniente dell'efficacia degli scambi - è la loro rappresentazione visiva, più vicina alla dinamica dei prezzi.

Parlando in generale, secondo me, il tester e la visualizzazione dell'efficienza dell'affare sono il punto più debole dell'attuale versione 5. Finora abbiamo qui solo l'eredità delle versioni precedenti sotto forma di Grafico e Risultati, ma entrambi ci permettono di giudicare solo l'efficacia dell'Expert Advisor in generale, e l'impressione può essere ingannevole (è successo così tante volte che il grafico complessivo dell'Equity dell'Expert Advisor è in costante ascesa, mentre un esame più attento rivelerà drawdown relativi più grandi e altre "sorprese").