[ARCHIVIO]Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Non posso andare da nessuna parte senza di te - 5. - pagina 285
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
Giusto. Credo di aver finito. Ecco il raccoglitore di zecche rielaborato con il suo impacchettamento in seconde candele.
Lo era:
Diventato:
Commenti sul codice.
1. Non ha fatto lo switch-case nella selezione delle candele virtuali per risparmiare tempo di CPU, invece ha commentato le sezioni con la selezione (dato che la selezione viene fatta per esigenze specifiche una volta prima della compilazione).
2. Sul lavoro con l'ora locale (off-line che è) non portato alla mente. Nel ciclo"while(time==TimeLocal()){//fino a quando è passato un secondo", sospetto che ci debba essereMarketInfo in FileWriteDouble (mi sembra il top di un idiota). Se mi dici cosa sembrerebbe più logico lì, te ne sarò grato.
3. Un costrutto d'autore
L'ho dichiarato alla fine di init().
4. All'inizio di init() gli array dinamici
al posto delle variabili usate.
5. Per l'ottimizzazione, potete teoricamente usare le funzioni di file WinAPI e scrivere nella cronologia in una volta sola in un blocco di 44 byte (lunghezza della struttura MarketInfo o qualunque cosa sia in .hst).
6. Completamente rimossa la modellazione del tempo dell'autore per la scrittura nella cella Time[]. Per la stessa ragione, in head while loop non c'è nessun controllo per TimeLocal(), solo per TimeCurrent().
7. Cos'altro suggerisci per ottimizzare il codice?
Dal punto 4 si deve capire che stavi facendo un indicatore, poi tali azioni non sono chiare:
ArrayInitialize() è molto probabilmente adatto!
E molto probabilmente, dovreste rifiutarvi di usare gli array di indicatori.
ArrayInitialize() probabilmente funziona?!
ArrayInitialize(ask, EMPTY_VALUE); vuoi dire? Non l'ho fatto. Perché l'ho tagliato esattamente, avevo paura di un caso simile:
(a, b, c)//valori in ask dopo tre tick al secondo (fantastico, ma supponiamo).
ArrayInitialize(ask, 0);//essere (0, 0, 0)
FileWriteDouble(hand1e, ask[ArraySize(ask)-1], DOUBLE_VALUE);//Close[]
- La cella Close avrà 0. Ecco perché sto ridefinendo le dimensioni per evitare che questo accada. Controllare ArrayInitialize(ask, EMPTY_VALUE);.
TarasBY:
Dovete smettere di usare gli array di indicatori.Sono dinamici, ecco di cosa mi sono innamorato. Meno comandi, meno cicli del processore. Devi fare 500 millisecondi di elaborazione a qualsiasi f... ...per farlo.
ArrayInitialize(ask, EMPTY_VALUE); vuoi dire? Non l'ho fatto. Avevo paura di un caso simile, per questo ho iniziato a ridurlo:
(a, b, c)//valori in ask dopo tre tick al secondo (fantastico, ma supponiamo).
ArrayInitialize(ask, 0);//essere (0, 0, 0)
FileWriteDouble(hand1e, ask[ArraySize(ask)-1], DOUBLE_VALUE);//Close[]
- La cella Close avrà 0. Ecco perché sto ridefinendo le dimensioni per evitare che questo accada. ArrayInitialize(ask, EMPTY_VALUE);; controllali.
Sono dinamici, è di questo che mi sono innamorato. Meno comandi, meno cicli del processore. Devi gestire 500 millisecondi di elaborazione in ogni collo di bottiglia teoricamente possibile... ...per farlo.
Non è quello che voglio dire: qualcosa mi dice che non riuscirai a ridurre l'array di indicatori. Inoltre, se ci sono celle non riempite in tale array, c'è SEMPRE qualche valore lì: 0 o EMPTY_VALUE, e cosa si ottiene in questi calcoli:
E per logica generale: eseguirei l'intera collezione di tick in un ciclo e controllerei separatamente il tempo e, non appena il tempo della "nuova barra" è passato, lo scriverei nel file, azzerando e tagliando gli array di lavoro nel processo.Se so, è possibile cambiare gli ordini Send e Close in advisor per richiamare manualmente la finestra di trading ed entrare nel mercato attraverso questa finestra, è necessario per quei broker che non permettono l'uso di advisor
E per logica generale: eseguirei l'intera collezione di tick in un ciclo e controllerei separatamente il tempo e, una volta passato il tempo della "nuova barra", lo scriverei nel file, azzerando e ritagliando gli array di lavoro nel processo.
Strano... Io ce l'ho così... L'unica cosa è che il tempo è controllato nel ciclo di raccolta dei tick stesso, e l'array di lavoro non viene tagliato fino a quando una copia del tick non è stata disegnata tante volte quanti sono i tick meno un secondo. Un secondo passato - viene disegnato un nuovo tick, due - una copia del tick precedente e un nuovo tick, tre - due copie del tick precedente e un nuovo tick, ecc. Invece delle copie del tick precedente è possibile disegnare un trattino dal livello Close, questa variante è commentata nel codice.
Strano... Io ce l'ho così... L'unica cosa è che il tempo è controllato nel ciclo stesso, e l'array di lavoro non viene tagliato fino a quando una copia del tick non viene disegnata tante volte quanti erano i tick meno uno. Un secondo passato - viene disegnato un nuovo tick, due - una copia del tick precedente e un nuovo tick, tre - due copie del tick precedente e un nuovo tick, ecc. Invece delle copie del tick precedente è possibile disegnare un trattino dal livello Close, questa variante è commentata nel codice.
Io e te stiamo parlando di cicli diversi. Sto parlando di questo:
Qualcuno può dirmi come rimuovere gli zeri dopo il punto decimale? Ho 4 cifre decimali nel mio codice per qualche motivo. Ecco il codice. stringa l_dbl2str_12 = DoubleToStr(g_ibuf_140[0] - g_ibuf_144[0],3);
Potete dirmi cosa sto sbagliando...
Ho bisogno di una variabile di tipo doppio per contenere la data come 0,20130429164459 (cioè 2013.04.29 16:44:59)
Parte del codice EA:
Il registro eventi per Precision 12,13 e 14 dà un risultato sbagliato, vedi immagine