Libreria di classi generiche - bug, descrizione, domande, caratteristiche d'uso e suggerimenti - pagina 17
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Un grande esempio teorico! In pratica, qualcuno ha mai operato migliaia di transazioni?
p.s. non sto cercando di dimostrare che è una merda e che nessuno ne ha bisogno. Sto cercando di capire il valore per il trading reale. Non sono un teorico in generale, ma un puro praticante.
Brevemente sull'attuale implementazione diCHashMap:
Per prima cosa, scopriamo cos'èEntry<TKey,TValue>.
Essenzialmente è un nodo come in CLinkedList che contiene:
m_entries[] - array di "celle" dove sono posizionati chiave e valore aggiunti, hash_code, next. La dimensione dell'array corrisponde alla Capacità.
m_count - specifica l'indice della prima cella inutilizzata in m_entries. Il valore iniziale è 0, che cresce fino alla capacità, il prossimo è la ricostruzione di tutti gli array con l'aumento della capacità e delle dimensioni di tutti gli array.
m_buckets[] - array di indici su m_entries[]. Il valore predefinito è -1. La dimensione della matrice corrisponde alla capacità.
Nessuna collisione, aggiungendo un valore unico al contenitoreCHashMap:
Senza collisioni, ottenere il valore per chiave nel contenitoreCHashMap:
Risoluzione delle collisioni:
Collisione, ottenere il valore per chiave nel contenitoreCHashMap:
Rimozione di un valore dal contenitoreCHashMap:
Ricostruire la tabella hash (processo per aumentare la capacità) :
Forum sul trading, sistemi di trading automatico e test di strategia
Libreria di classi generiche - bug, descrizione, domande, uso e suggerimenti
Sergey Dzyublik, 2017.12.09 01:12
Ho fatto conoscenza con l'implementazione diCHashMap
Onestamente, mi è piaciuto.
Ci sono diversi suggerimenti per un possibile miglioramento:
1) A mio modesto parere, l'implementazione contiene una selezione non proprio corretta della capacità - sia la dimensione iniziale 3 che quelle successive quando si ricostruisce la tabella hash.
Sì, è corretto che un numero primo dovrebbe essere scelto per l'uniformità della distribuzione.
Tuttavia, l'implementazione di CPrimeGenerator non soddisfa le aspettative e contiene omissioni di numeri primi.
Lo scopo di un tale "generatore" è chiaro - fornire un fattore di incremento dell'ordine di 1,2 con la generazione automatica di numeri primi.
Tuttavia, non è un coefficiente troppo piccolo? In C++ per i vettori, il coefficiente è di solito 1,5-2,0, a seconda della libreria (poiché influenza fortemente la complessità media dell'operazione).
La via d'uscita potrebbe essere un coefficiente costante seguito dall'arrotondamento del numero al primo tramite una ricerca binaria di una lista di numeri primi.
E una dimensione iniziale di 3 è troppo piccola, non viviamo nel secolo scorso.
2) Attualmente la tabella hash viene ricostruita (Resize) solo quando la capacità è piena al 100% (tutte le m_entries[] sono riempite).
A causa di questo, ci può essere una quantità significativa di collisioni per le chiavi che non sono distribuite molto uniformemente.
Come opzione, considerate l'introduzione di un fattore di riempimento che riduce il 100% del limite necessario per eseguire una ricostruzione della tabella hash.
In pratica, qualcuno ha mai operato su migliaia di transazioni?
Sì, milioni di chiamate di storia in un solo passaggio sono praticate da molti.
Sui forti ogni primo.
È chiaro.
L'invio di ordini tramite algoritmo hft e il loro ritiro per l'analisi sono cose diverse. Questi hash non sono necessari per l'invio, e non lo sono nemmeno per l'analisi, perché vengono analizzati in modo diverso.
Quindi, senza offesa. Avete anche bisogno di teoria.
È chiaro.
Inviare gli ordini con l'algoritmo hft e ritirarli dopo per l'analisi sono cose diverse. Non avete bisogno di questi hash per l'invio, e nemmeno per l'analisi, perché non è quello che viene analizzato.
Quindi, senza offesa. Abbiamo anche bisogno di teoria.
Non uso la lavastoviglie, uso una spugna.
Senza offesa alcuna. Le lavapiatti sono zoppe, a cosa servono.
È chiaro.
L'invio di ordini tramite l'algoritmo hft e il loro innalzamento in seguito per l'analisi sono cose diverse. Non hai bisogno di questi hash per inviarli e non ne hai bisogno per l'analisi, dato che analizziamo qualcos'altro dopo.
Quindi, senza offesa. Abbiamo anche bisogno di teoria.
Quali rancori? Continuate a scrivere le vostre stampelle.
Brevemente sull'attuale implementazione diCHashMap
Grazie, lo userò quando analizzerò il codice sorgente.
Quali rancori? Continuate a scrivere le vostre stampelle.
Grazie, lo userò quando analizzerò le fonti.
Omesso il controllo dell'esistenza della chiave nel contenitore quando si aggiunge una nuova coppia chiave-valore, eseguita per prima.
Ma non è importante.
Per favore, sistemate qualcosa del genere in tutto il generico.