Auguri per MT5 - pagina 23

 

Non è molto conveniente che le classi non possano essere descritte alla fine del programma, ma solo all'inizio.

 

Sarebbe bene fare un cursore nell'editor che divida la finestra di editing in due indipendenti, come in Word. Sarebbe conveniente copiare, scrivere e guardare due sezioni del programma allo stesso tempo.

 
MetaDriver:

Vorrei...

L'unica eccezione (e non necessaria) sono i fine settimana, che possono anche essere saltati, ma di nuovo GARANTITO per essere in sincronia tra i diversi strumenti.

Lo sapevate che in realtà nei fine settimana il forex lavora

è solo che la maggior parte dei broker non lavora

---

Alcuni ti fanno anche dei preventivi nel fine settimana e ti lasciano lavorare sui tuoi ordini.

che è molto conveniente.

possono allargare lo spread nel fine settimana perché non c'è liquidità

ma è possibile coprire e cambiare le cose

 

Sarebbe una buona idea aggiungere una funzione alle librerie standard per gestire una stringa della forma: Decomporre la stringa in moduli limitati da "inizio", "fine" e scriverli in un array di stringhe. Per esempio: int count=(string, array,"<h1>","</h1>",flag); Dove stringa è la stringa di input, array è l'array di stringhe di output, "<h1>" - L'inizio del modulo nella stringa, "</h1>" - Fine del modulo in stringa. flag - specifica se includere o meno i limitatori di modulo nelle stringhe dell'array di output, count - numero di moduli trovati.

In questo caso, int count=(string, array,"<h1>","</h1>",flag); - creerà l'array di tutte le intestazioni, che sono in stringa.

Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека - Документация по MQL5
 
Questo può anche essere fatto con strumenti esistenti, vedi l'articolo Parsing HTML con MQL4
Разбор HTML средствами MQL4 - Статьи по MQL4
  • www.mql5.com
Разбор HTML средствами MQL4 - Статьи по MQL4: примеры использования экспертов, тестирования и оптимизации
 
Rosh:
Questo può essere fatto con strumenti esistenti, leggi l'articolo Parse HTML con strumenti MQL4
Beh, è chiaro che si può fare passo dopo passo con gli strumenti esistenti. Ma è meglio avere una funzione già pronta che fa tutto in una volta che due pagine di codice....
 
Rinng:
Beh, è comprensibile che tu possa farlo passo dopo passo con gli strumenti disponibili. Ma meglio che due pagine di codice per avere una funzione già pronta che fa tutto in una volta....
Aggiungilo a una libreria o a un file mqh e nessun problema ;))
 

Nell'editor, sarebbe utile nascondere/aprire alcuni blocchi di codice del programma. Per esempio "funzioni", "definizioni", "classi"..., o potete nascondere/aprire dei sottocodici, per esempio per, se...

Документация по MQL5: Основы языка / Операторы / Оператор цикла for
Документация по MQL5: Основы языка / Операторы / Оператор цикла for
  • www.mql5.com
Основы языка / Операторы / Оператор цикла for - Документация по MQL5
 
Rosh писал(а) :
Leggi Organizzazione di accesso ai dati, ti dice come richiedere la storia correttamente.

Rapporto. E partizionato. E quello che ho padroneggiato. È abbastanza possibile capirlo, se necessario. Devo ancora imparare MQL, quindi quasi ogni domanda che ho sul linguaggio rischia di essere stupida.

Non ne capisco un altro: "Il parametro "Max bars in charts" limita il numero di barre disponibili per i grafici, indicatori e programmi mql5 in formato HC. Questa limitazione si applica a tutti i dati temporali ed è progettata principalmente per risparmiare risorse.

Quando si impostano valori elevati di questo parametro, bisogna ricordare che se c'è una storia abbastanza profonda di dati di prezzo per i timeframe bassi, il consumo di memoria per la memorizzazione dei buffer delle serie temporali e degli indicatori può raggiungere centinaia di megabyte e raggiungere il limite di memoria per il programma client terminal (2 GB per applicazioni a 32 bit di MS Windows).

Forse, non ho capito bene cosa c'è in questo episodio, e allo stesso tempo voglio sottolineare ancora una volta che non farò domande qui e ora sui programmi MQL, ma la motivazione di cui sopra per risparmiare risorse sembra strana in relazione alla richiesta automatica di storia da parte del terminale quando si lavora direttamente con un grafico manualmente. Il tuo codice è chiuso, quindi non posso giudicare come funziona il tutto. Non so se ogni candela è un oggetto reale con un gran numero di proprietà e attributi o se è un disegno grafico semplificato dell'immagine strutturale del mercato. Se tralasciamo il tema del download della storia mancante e ci concentriamo su quella che abbiamo già, allora solleviamo una questione sulla razionalità dell'approccio del disegno. Anche se si imposta un certo e grande numero massimo di barre nel grafico nelle impostazioni, anche se si comprimono le barre del grafico ad un ago e si usa una risoluzione molto alta del monitor, non credo che l'intera immagine userà la RAM se le barre sono correttamente caricate dal DBMS della storia allo schermo. State usando il principio LIFO? Il numero massimo di barre sul grafico può essere infinitamente grande, ma ciò che è dietro lo schermo (quello a destra e a sinistra) non dovrebbe essere affatto in memoria, e quando si scorre, dovrebbe essere caricato in RAM con lo scarico del frame di sinistra istantaneamente, perché non stiamo lavorando con la rete, ma solo con la storia disponibile localmente. Di quali orribili limitazioni di 2Gb potremmo parlare?

...Probabilmente sono molto fuori dal giro, quindi perdonate il bifolco in anticipo.

 

Ogni barra di prezzo è descritta dalla struttura MqlRates (senza altre caratteristiche) con una dimensione di 52 byte:

struct MqlRates
  {
   datetime time;         // время начала периода
   double   open;         // цена открытия
   double   high;         // наивысшая цена за период
   double   low;          // наименьшая цена за период
   double   close;        // цена закрытия
   long     tick_volume;  // тиковый объем
   int      spread;       // спред
   long     volume;       // объем
  };

Per stimare la dimensione dei database di lavoro, è necessario guardare nella directory /bases/nome del server/simbolo/. Per esempio, per EURUSD si può vedere quanto segue:

In questa directory si trovano i contenitori originali dei minuti compressi come vengono dati dal server di trading. Si può vedere che in media i contenitori minuti prendono circa 15 mb su 1 anno. Questo è un formato di compressione molto specifico per minimizzare il traffico.

La directory cache contiene i database di lavoro che sono stati compressi come necessario:


Qui si può vedere che i minuti dal 1993 (in realtà, fino al 1999 invece i minuti sono database giornalieri) prendono 231 megabyte, non compressi e pronti all'uso. Gli orologi adiacenti, tuttavia, occupano solo 4 mb.

Se moltiplichiamo 52 byte per 4 400 000 barre, il valore risultante è di circa 230 MB. Un semplice indicatore di media mobile con un buffer di lavoro (doppio) richiederà 4 400 000 * 8 = 35 megabyte di memoria.


Quando il trader imposta "Massimo di barre nella finestra" nelle impostazioni del terminale, specifica esplicitamente "non più del numero specificato di barre da caricare in memoria per lavorare". Se viene caricata l'intera cronologia dei minuti (lavoriamo sul grafico M1), vengono applicati alcuni pesanti indicatori multi-buffer e vengono utilizzati Expert Advisors, il costo della memoria può essere significativo. E non possiamo pensare "lavoro con una finestra e vedo 500 barre, quindi posso scaricare il resto". Non puoi scaricarli - gli indicatori, gli esperti, ecc. vivono e lavorano su questi dati.

Abbiamo implementato un modello di caching molto efficace, quando i dati e gli indicatori sono sempre memorizzati in un unico numero. Ciò significa che l'apertura di 5 finestre su EURUSD:M1 non richiede la creazione di 5 buffer di dati, e diversi indicatori, assolutamente uguali nei parametri, hanno una sola copia. Quando gli indicatori o i grafici non vengono utilizzati per un lungo periodo di tempo, i loro dati vengono automaticamente rilasciati e riportati su quando necessario.

Inoltre, abbiamo una versione a 64 bit del terminale client, che può gestire un'enorme quantità di storia senza alcuna limitazione. Questa versione sarà rilasciata non appena avremo finito di testare MQL5 in ambiente a 64 bit.

Motivazione: