Sì, grazie a Kenny e tutti su questo thread, è stato illuminante!Originariamente Scritto da ;
Publi |
Publi |
Sì, grazie a Kenny e tutti su questo thread, è stato illuminante!Originariamente Scritto da ;
ecco un approccio più generico, una funzione di hash. Dagli una stringa univoca e restituirà un numero univoco: Codice inserito** * crea un numero intero positivo per l'uso come numero magico. * * La funzione accetta una stringa come argomento e calcola * un valore hash di 31 bit. L'hash non ha * certamente la forza di una vera funzione di hash crittografica *, ma dovrebbe essere più che sufficiente per generare un * ID univoco da una stringa e le collisioni non dovrebbero verificarsi. * * usalo nella tua funzione init () in questo modo: * magic = makeMagicNumber (IndiorShortName () Symbol () Period ()); * * dove nome sarebbe il nome del tuo EA. Il tuo EA otterrà quindi un numero magico unico per ogni strumento e intervallo di tempo * e questo numero sarà sempre lo stesso, ogni volta che metti * lo stesso EA sullo stesso grafico. * * I numeri generati durante la modalità di test differiscono da quelli * generati su un grafico dal vivo. *int makeMagicNumber (stringa chiave) {int i, k; int h = 0; if (IsTesting ()) {chiave = _ tasto ; } for (i = 0; ilt; StringLen (chiave); i ) {k = StringGetChar (key, i); h = h k; h = bitRotate (h, 5);/ruota 5 bit} per (i = 0; ilt; StringLen (chiave); i ) {k = StringGetChar (chiave, i); h = h k;/ruota a seconda del valore del carattere h = bitRotate (h, k 0x0000000F); }/ora torniamo indietro nella nostra stringa per (i = StringLen (chiave); igt; 0; i -) {k = StringGetChar (chiave, i - 1); h = h k;/ruota a seconda degli ultimi 4 bit di h h = bitRotate (h, h 0x0000000F); } return (h 0x7fffffff); }** * Ruota un valore intero a 32 bit bit-saggio * il numero specifio di bit a destra. * Questa funzione è necessaria per i calcoli * nella funzione hash makeMacicNumber () *int bitRotate (int value, int count) {int i, tmp, mask; mask = (0x00000001 lt; lt; count) - 1; tmp = maschera di valore; valore = valore gt; gt; contare; valore = valore | (tmp lt; lt; (32 - count)); valore di ritorno); }Originariamente Scritto da ;
Ciao Bluemele
Interessante discussione, anzi ... Penso che incorporerò parte di questa roba nel nostro EA LB ... 7bit: interessante tagliare una stringa per creare un numero magico unico. Io uso un semplice algoritmo di hash DJB2 per costruire valori hash a 32 bit di stringhe. Viene utilizzato dai compilatori Java per creare le tabelle dei simboli (quindi è meglio averne una buona!). ?? molto semplice ma molto efficiente sulle stringhe (rapporto di collisione molto basso). [Modifica] ecco il codice mql: Codice inserito/ ---------------------------------- -------------------------------- int hash_string (string s)/ -------- -------------------------------------------------- -------- {//questo è l'hash della stringa djbgo algo int h = 5381, l = StringLen (s), i; for (i = 0; ilt; l; i ) h = h * 33 StringGetChar (s, i); ritorno (h); } SQ.
DJB2 è una funzione hash molto semplice, probabilmente la più semplice che può essere trovata e che funziona ancora in qualche modo. Non lo definirei buono. ?? semplice. Se guardi da vicino, noterai che lo spirito di djb2 si trova nel mio hash, infatti il ??????mio algoritmo è stato completamente ispirato a djb2 e crc32. djb2 ??????sposterà 5 bit e aggiungerà l'hash e la chiave originali (h * 33 k è equivalente a h * 32 h k che è equivalente a (hlt; lt; 5) h k mentre la mia funzione di hash nel il primo passo fa solo (hlt; lt; 5) k), ma poi lo ripeterà nei due passi successivi con cambi di bit diversi e non fissi). Se si converte l'output di djb2 in binario per stampare i 32 bit come una sequenza di 1 e 0 sullo schermo per vedere come vengono distribuiti si noterà che quando si cambia un carattere di input nella stringa di input, molto spesso cambierà solo un bit nel valore hash e non ci vuole molto tempo per produrre intenzionalmente una collisione. Quando fai lo stesso con la mia funzione di hash, noterai che ogni singolo bit che viene modifio nella stringa di input cambierà quasi la metà di tutti i bit nel valore hash e avrai difficoltà a provare a produrre intenzionalmente una collisione. Consiglio vivamente di fare questo esperimento per vedere come si comporta la funzione hash rispetto ad altre funzioni hash. Poiché il tempo di esecuzione è solo marginalmente importante qui e le 15 o più righe di codice non fanno male neanche a te, dovresti davvero considerare di usare qualcosa di più forte di djb2. La funzione di hash di cui sopra fa parte della mia libreria free_functions gratuita che può essere trovata sul mio sito web.Originariamente Scritto da ;
Io uso un EA semi-manuale, disegno linee sul grafico, linea di colpi di prezzo ed entra nel commercio. Quindi per me il numero magico è ancora importante ma posso gestirlo in questo modo ... Una volta effettuato l'ordine, il codice posiziona un'etichetta di testo sul grafico con il numero majic. Rimane lì per sempre. Al riavvio apro le proprietà degli esperti e cambio me stesso il MN. Non ho quasi mai dovuto farlo, il più delle volte ho bisogno di farlo dopo aver ricomposto il codice dopo le mod.
Se l'MN viene generato ad esempio per USDCAD sul timeframe H1 e viene inserita una transazione, l'utente cambia il grafico a 30 minuti, come gestisce l'ordine EA? Penso che questo sia il posto in cui la gamma potrebbe essere d'aiuto, quindi una volta posizionato può gestire tutti gli scambi all'interno del suo intervallo, MA si potrebbe ottenere un duplio se non si fa attenzione con il passaggio dei tempi di xhart. Immagino che il periodo potrebbe essere difficile da codificare. Io uso un EA dove metto le linee sul grafico e gli ordini vengono inviati. Se cambio il lasso di tempo questo potrebbe rovinarmi. Direi che in questo caso sto meglio usando un hash modifio di qualche tipo.
Credo che sia sempre possibile renderlo specifico per il tempo durante l'ordinamento degli ordini. Ovviamente raramente lo ordino secondo i tempi.Originariamente Scritto da ;
Quindi il broker non può tenere traccia di ciò che stai facendo in quella particolare sessione di trading? Non lo so, forse è eccessivo? Anche se è ancora un'idea relativamente semplice.Originariamente Scritto da ;
Ho EA simili (tempo indipendente, uno di loro è quasi come si descrive con linee di disegno, ecc.). Invece di creare l'hash con il codice inserito magic = makeMagicNumber (WindowExpertName () Symbol () Period ()); uso semplicemente Inserted Code magic = makeMagicNumber (WindowExpertName () Symbol ()); e questo mi darà la stessa magia su tutti i tempi di quella coppia. Problema risolto.Originariamente Scritto da ;
Non mi importa di cosa il broker tenga traccia. Commercio con lui in modo che possa vedere i miei mestieri. Se vuole guardarmi fare trading in tempo reale perché non ha nient'altro da fare, può farlo comunque. Se vuole sapere perché sono così redditizio, può eseguire ogni tipo di analisi statistica sulla mia storia, non mi interessa. Se vuole rispecchiare le mie operazioni con $ BIG_LOTS, per favore lascialo fare, il peso dei suoi lotti sarà dalla mia parte. Se la tua egy non è redditizia, non è perché il broker sta rovinando le tue operazioni, è semplicemente perché la tua egy non è redditizia. Questo è il 99,999% dei motivi per cui un ego fallisce. Perché semplicemente non funziona. Se il broker intenzionalmente rovinasse le mie operazioni, chiuderei il mio account perché non potevo impedirgli di farlo comunque, non importa quanto fossero casuali i miei numeri. Non puoi nasconderti dal tuo broker, o ti fidi di lui e scambi con lui o meno.Originariamente Scritto da ;