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

 
joo:

Dichiarare due array Equity[] e Time[] a livello globale in EA.

Scrivere il valore del capitale e del tempo nell'array appropriato quando si testa l'EA.

Usate uno script per leggere il file alla fine del test e tracciare l'equità sul grafico richiesto.

Questo è il modo migliore per i vostri scopi, non capisco perché avete bisogno di un indicatore.

Eh, se potessi capire chiaramente e precisamente qual è la difficoltà in quello che ho già fatto, allora sarebbe più facile...

( I valori che cambiano in OnCalculated ci sono già, quindi cos'altro è necessario? )

Ho già pensato alle variabili globali, ma per definizione:

datetime  GlobalVariableSet(
   string  name,      // имя
   double  value      // устанавлимое значение
   );

E come scrivere un array o almeno un riferimento a Value per poterlo recuperare in seguito... Domanda.

Per quanto riguarda gli oggetti, voglio combinare due cose:

1. Le linee di accordi indicano a seconda del risultato (rosso - tutti non redditizi, blu - tutti redditizi)

2. e nell'indicatore per costruire un grafico dei rendimenti dal deposito iniziale in basso.

Altrimenti, quando si usano gli oggetti in piccola scala, anche i cerchi di accordi impediscono di vedere la dinamica dei prezzi (di cui, tra l'altro, voglio sbarazzarmi, ma di nuovo, non so come).

Sto parlando di testare gli Expert Advisors su grandi timeframes, dove esattamente questa combinazione di curve, come la capisco ora, darà l'idea più completa della distribuzione dei trade perdenti e profittevoli nel corso della storia senza necessità di confrontare tradizionalmente la direzione di apertura di ogni trade con la direzione del movimento.

 

sergey1294:
Даже не знаю как вам объяснить. AccountInfoDouble(ACCOUNT_EQUITY) хранит последнее значение эквити. После тестирования как сказал Ренат индикатор инициилизируется заново и пересчитывается. По этому данные эквити накопленные в буфере индикатора за время прогона стираются.

E questo - sulla cancellazione - è già "caldo"!

Ma cosa impedisce di scrivere questi valori in OnCalculated in un altro array di Indicator estraneo e "non cancellabile", per poi ripristinarli senza una procedura più ingombrante e dispendiosa di scrittura e lettura di file?

O è già una questione a livello di sistema (di auto-scaricamento forzato degli array, che non posso aggirare)?

Anche se ho letto che questo tipo di risorse (creazione e cancellazione di variabili in memoria) possono essere gestite anche manualmente...

 
DV2010:

Eh, se potessi capire chiaramente e precisamente qual è la difficoltà in quello che ho già fatto, allora sarebbe più facile tirarsi indietro...

( I valori che cambiano in OnCalculated ci sono già, quindi cos'altro è necessario? )

Ho già pensato alle variabili globali, ma per definizione:

E come scrivere un array o almeno un riferimento a Value per poterlo recuperare in seguito... Domanda.

Per quanto riguarda gli oggetti, voglio combinare due cose:

1. Le linee di accordi indicano a seconda del risultato (rosso - tutti non redditizi, blu - tutti redditizi)

2. e nell'indicatore per costruire un grafico dei rendimenti dal deposito iniziale in basso.

Altrimenti, quando si usano gli oggetti in piccola scala, anche i cerchi di accordi impediscono di vedere la dinamica dei prezzi (di cui, tra l'altro, voglio sbarazzarmi, ma di nuovo, non so come).

Nel mio caso sto parlando di testare gli Expert Advisors su grandi timeframe, dove esattamente questa combinazione di curve, come la capisco ora, darà il quadro più completo della distribuzione dei trade perdenti e profittevoli nel corso della storia senza necessità di confrontare tradizionalmente la direzione di apertura con la direzione di movimento per ogni trade.

Intendevo le variabili globali del programma, non del terminale.

Gli oggetti possono essere disegnati anche su un grafico a 1 minuto per ottenere la massima precisione (frequenza). Poi, dopo aver letto gli oggetti dal grafico, è possibile disegnare linee con l'indicatore (se c'è un desiderio incredibilmente forte di farlo con l'indicatore), si può anche inserire un fattore di correzione nelle impostazioni dell'indicatore, in modo da poter visualizzare l'equità di qualsiasi deposito iniziale.

Di nuovo, tutte le linee e i diagrammi possono anche essere costruiti da uno script.

 
joo:

Intendevo variabili globali del programma, non variabili del terminale.

Gli oggetti possono essere tracciati anche su un grafico di un minuto per la massima precisione (frequenza). Poi, leggendo gli oggetti dal grafico, si possono costruire linee utilizzando l'indicatore. Si può anche inserire il fattore di correzione nelle impostazioni dell'indicatore, in modo da poter vedere l'equità di qualsiasi deposito iniziale.

Per quanto riguarda le variabili globali del programma - come ho capito, ci possono essere variabili globali nel codice dell'indicatore e nel codice dell'Expert Advisor.

Una di queste variabili è un array di valori Indicator da cui vengono cancellati dopo il test per qualche motivo (probabilmente di natura sistemica).

Ma allora ho capito bene che è necessario prendere i valori per la visualizzazione della storia Equty, sia la storia da variabili globali, oggetti o da un file, in OnCalculated Indicator?

 
DV2010:

Ma allora ho capito bene, che è necessario prendere i valori per visualizzare la storia Equty da variabili globali, oggetti o da un file, solo in OnCalculated Indicator?

Esattamente.
 
joo:
Esattamente.

Possiamo usare le variabili globali del programma in questo caso?

Perché le variabili globali dell'Expert Advisor non saranno visibili nell'indicatore, e quindi dobbiamo usare le variabili globali dell'indicatore, che, a differenza dell'array di valori dell'indicatore, dovrebbero essere "indelebili" dopo il lavoro di OnCalculated nella modalità Expert Advisor?

E un'altra, se possibile, domanda sugli oggetti del grafico attuale. Ho cercato di trovare come estrarre la lista degli oggetti che vi appartengono, ma è ancora difficile da trovare. Potresti suggerire come farlo programmaticamente?

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Основы языка / Переменные / Глобальные переменные - Документация по MQL5
 
DV2010:

E anche, se potete, una domanda sugli oggetti dell'attuale orario. Ho cercato di scoprire come estrarre la lista degli oggetti che vi appartengono, ma è ancora difficile da trovare. Puoi dirmi come farlo programmaticamente?

Usare la funzione ObjectsTotal per ottenere il numero di oggetti sul grafico

int  ObjectsTotal(
   long  chart_id,     // идентификатор графика
   int   nwin=-1,      // индекс окна
   int   type=-1       // тип объекта     
   );
Ottenere l'ID del grafico usando ChartID
 

Approssimativamente, va più o meno così:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2010, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
input int TradeHistoy=10000;

//Глобальные пременные
double   Equity[];
datetime EquityTime[];
int      cnt;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   ArrayResize(Equity,TradeHistoy);ArrayInitialize(Equity,0.0);
   ArrayResize(EquityTime,TradeHistoy);ArrayInitialize(Equity,1);
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

//Записать накопленные данные в файл
   D_ArrayToCsv("DATA",Equity,TradeHistoy,";");
   D_ArrayToCsv("TIME",Equity,TradeHistoy,";");

  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {

//В нужном месте эксперта проверить значение эквити
//записать эквити и время замера 
   if(cnt<TradeHistoy)
     {
      Equity[cnt]=AccountInfoDouble(ACCOUNT_EQUITY);
      EquityTime[cnt]=TimeTradeServer();
     }

  }
//+------------------------------------------------------------------+

void D_ArrayToCsv(string filename,double &mass[],int line,string Separator)
  {
// запись массива в файл
   string str;
   int handle=FileOpen(filename,FILE_CSV|FILE_WRITE,Separator);
//Цикл записи строчек в файл
   for(int l=0;l<line;l++)
     {
      str=DoubleToString(mass[l],8);
      FileWrite(handle,str);
     }
   FileClose(handle);
  }
//+------------------------------------------------------------------+
Poi puoi fare quello che vuoi con i file che hai creato.
 

Grazie, Rosh, per la dritta sugli oggetti, penso di poter gestire questa parte del mio compito ora.

...Ma con le operazioni sui file, che ho appena cercato di padroneggiare, è un po' più complicato (cosa di cui avevo davvero paura!).

: )

Alcune sorprese in una volta sola:

1. Il file scrivibile in loop per qualche motivo scrive solo un valore invece di diversi.

2. Anche se l'operazione FileWriteArrayottiene con successoun puntatore e controlla che l'array passato non sia vuoto, l'operazione

il numero di articoli scritti è uguale a -1.

3.La documentazione dice che durante i test le operazioni di apertura vengono eseguite nella cartella MQL5\tester\files, e durante l'operazione principale - in MQL5/files, e quindi è sorta subito la domanda su come l'indicatore potesse ricevere i dati registrati durante la fase di test, durante il lavoro principale (e il percorso della cartella non è semplice e molto probabilmente può cambiare nel tempo - \tester\Agent-127.0.0.1-3000\MQL5\Files )

 
DV2010:


3.La documentazione dice che durante la fase di test le operazioni di apertura vengono eseguite nella cartella MQL5\tester\files, e durante la fase di funzionamento principale - in MQL5/files, e quindi è sorta la questione di come l'indicatore possa ricevere i dati registrati durante la fase di test, durante il lavoro principale (e il percorso della cartella non è semplice e molto probabilmente può cambiare nel tempo - \tester\Agent-127.0.0.1-3000\MQL5\Files )

Devi trasferire a mano.

Ecco il vostro codice per leggere dal file:

void CsvTo1D_Array(string nameFile,double &array[],int line,string Separator)
{
        int end=0;
        int handle=FileOpen(nameFile,FILE_CSV|FILE_READ,Separator);

        if (handle!=1)
        {
                Alert("Файл ",nameFile," не найден!");
        }
        else
        {
                for (int l=0;l<line;l++)
                {
                        array[l]=StringToDouble(FileReadString(handle));
                }
                FileClose(handle);
        }
}
//+------------------------------------------------------------------+