History Centre aggiornato - storia gratuita di citazioni minute dal 1999 - pagina 8

 
Rosh:
Ahimè, metti il "Max bars on the chart" (circa 3 milioni per oggi) e puoi guardare qualsiasi data.
cioè non è possibile impostare un segmento arbitrario?
Per esempio, solo nell'agosto 2005?
 
No, e perché. L'articolo 'I segreti del terminale client di MetaTrader 4' descrive alcune cose utili che rendono la vita più facile, eccone una:

 
Avete mai voluto rimuovere il limite del numero di barre nella cronologia e nella finestra in generale? O fare una casella di controllo come illimitato. Questo farebbe sì che gli utenti non abbiano alcun dubbio al riguardo.
Si può sostituire la limitazione del numero di barre nella finestra con una logica più intelligente di scambiare la storia da un file. Ci sarà un buffer per la visualizzazione se ci spostiamo sui dati al di fuori di questo buffer allora in questo buffer viene caricato da un file i nuovi dati della storia al posto dei precedenti - può scorrere un po' in ritardo, naturalmente. Anche se se l'intera storia è caricata o come scorrimento nella profondità della storia può essere messa in un buffer creato da VirtualAlloc in questo caso la memoria sarà caricata dal file di swap dei dati a cui il terminale accede al momento invece dei vecchi che sono cancellati dalla memoria e rimangono nel file di swap - lo stesso buffering ma a livello del sistema operativo.
 
elritmo:
Volete rimuovere la limitazione del numero di barre nella cronologia e nella finestra in generale? O fare una casella di controllo come illimitato. Gli utenti non avrebbero alcuna domanda in proposito.
Si può sostituire la limitazione del numero di barre nella finestra con una logica più intelligente di scambiare la storia da un file. Ci sarà un buffer per la visualizzazione se ci spostiamo sui dati al di fuori di questo buffer allora in questo buffer viene caricato da un file i nuovi dati della storia al posto dei precedenti - può scorrere un po' in ritardo, naturalmente. Anche se se l'intera storia è caricata o come scorrimento nella profondità della storia può essere messa in un buffer creato da VirtualAlloc in questo caso la memoria sarà caricata dai dati del file di swap a cui il terminale accede al momento invece dei vecchi dati che sono cancellati dalla memoria e rimangono nel file di swap - lo stesso buffering ma a livello del sistema operativo.
Dio non voglia che si paghi!
Limitare la cronologia è anche necessario per coloro che mettono il terminale su un server per il trading automatico. Hanno bisogno della storia minima per far funzionare gli indicatori e limitare lo spazio su disco.
 
fare una casella di controllo come illimitato o infinito. Chi ha bisogno di essere limitato lo farà facilmente. Per impostazione predefinita, non ci sono restrizioni, quindi non devi chiedere: perché non sono in grado di vedere tutta la mia storia?
 
Sì, e la memoria di tutti è illimitata per default...

Se si visualizza tutta la storia, ci saranno domande sul perché le cose sono così lente.
 

È possibile caricare la cronologia da un file mentre si scorre. Ma mi sembra che rallenti perché la memoria viene trasferita attraverso la pila. Ci sono altri approcci per riservare la memoria. Raccomandiamo di usare l'allocazione di memoria VirtualAlloc per gli array enormi. Heap può essere usato liberamente per gli array dinamici che non superano 1Mbyte
In MT presumo che per l'allocazione della memoria si usi l'operatore new[] e la funzione cpymem o malloc e realloc che poi chiamano HeapAlloc e HeapRealloc. Il messaggio Out of memory appare se non si riesce a trovare un pezzo fresco di spazio di indirizzo per mettere gli elementi uno dopo l'altro (non sono sicuro di questo :)). O forse la dimensione del file di swap è insufficiente ad un certo punto.

Ecco un esempio di come potete usare la memoria virtuale per le serie temporali invece dell'heap

MemManager::MemManager(int reg_size, int unt_size, void*& p) {
    unit_size = unt_size;
    SYSTEM_INFO si;
    GetSystemInfo(&si);
    page_size = si.dwPageSize;
    region_size = (reg_size / page_size) * page_size;
    if(reg_size % page_size != 0) region_size += page_size;
    next_page = region = (char*)VirtualAlloc(0, region_size, MEM_RESERVE, PAGE_READWRITE);
    p = region;
    capacity = 0;
}
 
MemManager::~MemManager() {
     VirtualFree(region, 0, MEM_RELEASE);
}
 
void MemManager::realloc(int sz) {
    size = sz*unit_size;
    if(size <= capacity)
        return;
    int tmp_size = size - capacity;
    int inc_size = (tmp_size / page_size) * page_size;
    if (tmp_size % page_size != 0) inc_size += page_size;
    char* p = (char*)VirtualAlloc(next_page, inc_size, MEM_COMMIT, PAGE_READWRITE);
    next_page += inc_size;
    capacity += inc_size;
}
 
Sì, sì, anch'io ho molte idee su come migliorare l'economia nel mondo.
Posso anche dare preziosi consigli agli aratori su come arare e alle donne su come partorire.
E io sono il più intelligente qui, anche se sono molto povero... .
 

Quelli intelligenti usano le idee degli altri ;o) Un po' come i giapponesi dopo la seconda guerra mondiale...

 
Dimmi che la cronologia per 6E, Euro FX Currencies -Globex manca nel centro cronologico? Perché vengono scaricati solo gli ultimi due giorni?