Ho bisogno di aiuto! Non riesco a risolvere il problema, sto incontrando delle limitazioni hardware - pagina 17

 
è possibile calcolare tutto per una lettura dei dati - la cosa principale è il desiderio
komposter:

Sì, in questa forma il compito è parallelo - ogni volta che la SeekDate cambia, puoi eseguire una ricerca simultanea del miglior criterio su diverse parti del set di sequenze. Per esempio, li dividiamo in 20 parti e diamo il compito a 20 Expert Advisors. E dovrebbero leggere il file, trovare l'accordo, e mandare indietro solo la sequenza migliore (№№, Criterio e posizione del file).

Grazie a tutti voi!

Se eseguiamo questo algoritmo su più EA, siamo limitati dalla velocità di lettura dal disco + in parti + da posizioni diverse, e la velocità è probabilmente insufficiente.

 
ALXIMIKS:
Si può calcolare tutto in una sola lettura dei dati - se si vuole, la cosa principale è il desiderio di farlo.

La lettura dal disco è un'operazione abbastanza costosa - l'esecuzione di questo algoritmo su diversi Expert Advisors sarà limitata dalla velocità di lettura dal disco + in parti + da posizioni diverse e la velocità è improbabile che venga raggiunta.

Chi ha detto che il calcolo distribuito deve essere eseguito su una singola stazione di lavoro? Non ci sono tali restrizioni)) Il disco RAM aiuterà, come è stato detto sopra.
 
elugovoy:
Chi ha detto chei calcoli distribuiti devono essere fatti su una sola stazione di lavoro? Non ci sono queste restrizioni)) Anche il RAM-disk è di grande aiuto, come è stato detto sopra.

Che ne dite di pensare un po' e cambiare l'algoritmo?

1. come scaricare diverse sequenze in una sola volta e come sapere dove iniziano e dove finiscono

2. Come calcolare i coefficienti di tutte le offerte in una sequenza e in quale struttura di dati memorizzare la risposta

3. come fare una fusione di due risposte dell'articolo precedente in una nuova risposta leggermente più completa

4. Come dividere la risposta finale dal punto 3 negli intervalli richiesti (stiamo parlando delSeekingDate = Trade closing time + 1)

Possiamo ottenere un algoritmo leggermente diverso selezionando in quante parti aggiuntive dividere l'intervalloSeekingDate

potremmo ottenere errori diversi rispetto all'algoritmo iniziale dell'autore.

 
papaklass:

La capacità di cifre di un numero è determinata dall'unicità del codice di entrata, non dalla capacità di cifre del sistema. Chiaramente, dovrebbe essere un multiplo di 1 byte.

64 bit mi sembra troppo. :)

Se ci sono 1.000.000 di record, 16 bit non sarebbero sufficienti per un codice di record unico (massimo 65536 record). Questo è uno.

Guardate l'architettura dei processori Intel (Itanium), AMD (non ho detto sistema operativo) a 32 bit e 64 bit. 32/64 è la risoluzione del bus di indirizzi, ma allo stesso tempo 32/64 bit (4/8 byte) sono letti dalla memoria in un ciclo macchina, anche quando si accede a un byte di memoria.

Pertanto, non fa assolutamente alcuna differenza in termini di prestazioni se legge 2 byte o 8 byte dalla memoria.

In linea di principio, si potrebbe scrivere un servizio di Windows per questo tipo di gestione dei file.

Ma sono ancora propenso a usare DBMS.

 
ALXIMIKS:

Che ne dite di pensare un po' e cambiare l'algoritmo?

1. come scaricare diverse sequenze in una sola volta e come sapere dove iniziano e dove finiscono

2. Come calcolare i coefficienti di tutte le offerte in una sequenza e in quale struttura di dati memorizzare la risposta

3. come fare una fusione di due risposte da un punto precedente in una nuova risposta leggermente più completa

4. Come dividere la risposta finale dal punto 3 negli intervalli richiesti (stiamo parlando delSeekingDate = Trade closing time + 1)

Possiamo ottenere un algoritmo leggermente diverso selezionando in quante parti aggiuntive dividere l'intervalloSeekingDate

potremmo ottenere errori diversi rispetto all'algoritmo iniziale dell'autore.

Per tutti e 4 i punti, l'elaborazione dei dati sul lato DBMS.

Riguardo all'algoritmo "leggermente diverso", non è molto chiaro cosa intendi. Ma. Per calcolare in qualche modo l'errore di questo algoritmo "leggermente diverso" rispetto a quello "dell'autore", è necessario che entrambi gli algoritmi siano implementati. E il thread è stato creato proprio per il problema tecnico di implementare l'algoritmo dell'"autore".

Dato questo fatto, con quale metodologia intende calcolare l'errore di cui parla?

 
ALXIMIKS:
si può calcolare tutto in una sola lettura - la cosa principale è il desiderio.

La lettura dal disco è un'operazione abbastanza costosa - l'esecuzione di questo algoritmo su diversi Expert Advisors sarà limitata dalla velocità di lettura dal disco + in parti + da posizioni diverse ed è improbabile che questa idea dia una qualsiasi velocità.

Diciamo che l'HDD è il dispositivo più lento, è un fatto. Tuttavia, non stiamo parlando di eseguire più EAs utilizzando tutti questi calcoli. Per come la vedo io, l'applicazione più probabile è la generazione di segnali. Diciamo server cloud su amazon con le prestazioni necessarie + MT4 + questo sviluppo = fornitore di segnali.

 
elugovoy:

Per tutti e 4 i punti, l'elaborazione dei dati è sul lato DBMS.

Riguardo all'algoritmo "leggermente diverso", non sono sicuro di cosa intendi. Ma. Per calcolare in qualche modo l'errore di questo algoritmo "leggermente diverso" rispetto all'algoritmo "dell'autore", entrambi gli algoritmi devono essere implementati. E il thread è stato creato proprio per il problema tecnico di implementare l'algoritmo dell'"autore".

Dato questo fatto, con quale metodologia intende calcolare l'errore di cui parla?

Se capisco la metodologia dell'autore, l'intervallo sarà ritagliato da un coefficiente massimo scelto dall'intervallo dato, nel mio suggerimento - per dividere ogni tale intervallo in N sotto intervalli, dove alla convergenza solo un valore del coefficiente può adattarsi. Così a N = 5 la gamma può essere divisa in proporzioni di 0,2 0,4 0,6 0,8 1. E qualsiasi valore da 0 a 1 è tagliato nella gamma dell'autore. Quindi un errore di gamma di 0,2 è il massimo a N = 5.

E tutto intorno a come sono stati interpretati correttamente i post dell'autore, perché non c'è ancora una completa chiarezza.

 
ALXIMIKS:

Per quanto ho capito la versione dell'autore (nel caso in cui qualcosa sia sbagliato di nuovo, dato che non c'è una spiegazione chiara e completa di ciò che è esattamente necessario), l'intervallo sarà tagliato dal coefficiente massimo selezionato da questo intervallo; nella versione che ho suggerito, ogni tale intervallo dovrebbe essere diviso in N sotto intervalli dove solo un valore di coefficiente può entrare nella fusione. Così a N = 5 la gamma può essere divisa in proporzioni di 0,2 0,4 0,6 0,8 1. E qualsiasi valore da 0 a 1 è tagliato nella gamma dell'autore. Quindi un errore di gamma di 0,2 è il massimo a N = 5.

E tutto intorno a come sono stati interpretati correttamente i post dell'autore, perché non c'è ancora una chiarezza completa.

Sì, apparentemente il progetto è stato ordinato dal Ministero delle Finanze, non ci sono abbastanza informazioni specifiche. Tuttavia, ognuno può trovare qualcosa di interessante per se stesso dalla discussione. Lo vedo come un aspetto positivo della discussione.

Per quanto riguarda la discretizzazione degli intervalli, la tua idea è chiara. E se N=100, 1000... (puramente matematico è possibile) allora questa divisione causerà un contraccolpo in termini di prestazioni e di utilizzo delle risorse di sistema. C'è anche la fisica oltre alla matematica )

 
Candid:

Abbiamo un frammento di un file nella nostra memoria, lo attraversiamo e formiamo un campione della lunghezza necessaria per il calcolo del criterio, selezionando solo le offerte che appartengono alla stessa sequenza. Poi calcoliamo il criterio su questo campione. A proposito, ci sono possibilità di usare la ricorsione nella selezione.

Quindi avresti bisogno di passare attraverso diversi milioni di offerte di altre sequenze! Questo è esattamente quello che voglio dire.

ALXIMIKS:

Il problema dell'inserimento di nuovi dati - risolvilo in qualche modo.

Nessun problema finora, i dati sono una quantità fissa.

TheXpert:
A proposito, se conosci il punto di partenza di ogni sequenza, puoi cercare le date giuste con una ricerca binaria, dato che gli scambi sono ordinati per tempo.

+1, grazie per l'idea.

elugovoy:

1. in base al precedente"Sia il criterio il profitto medio degli ultimi 20 trade della sequenza. ", questo dovrebbe essere inteso come un criterio, l'aspettativa mobile di profitto. Quali altri ci sono?

Nel database, genera una tabella con l'identificatore della sequenza e le medie mobili corrispondenti. Le sequenze che non soddisfano le condizioni devono essere eliminate immediatamente. Questo dovrebbe essere fatto da una procedura in modalità concorrente a livello di DBMS, su richiesta del robot, con lo stato del processo visualizzato nel robot.

Diciamo, FilterAvgProfit (pProfitValue, pTrades, pDeviation),

dove pProfitValue è l'obiettivo di profitto, pTrades è il numero di operazioni per la media mobile di profitto, pDeviation è la deviazione consentita da pProfitValue.

Il risultato è una tabella popolata con ID di sequenza e valori di profitto medio.

1а. Quali sono gli altri criteri - non importa. L'importante è che il calcolo sia eseguito da una serie di scambi della lunghezza specificata.

1б. Come si può scartare una sequenza solo perché ha un cattivo valore di criterio al momento della chiusura del trade N? E se dopo diventasse migliore?
Puoi rimuovere solo le sequenze che hanno fallito completamente e il cui criterio non ha mostrato alcun profitto. E non dovrebbero essercene molti.

elugovoy:

4. Per come la vedo io, se stiamo guardando la selezione della strategia, questa operazione non dovrebbe essere eseguita troppo spesso (diciamo, su ogni barra o immediatamente prima dell'apertura dell'ordine). Questo approccio è ragionevole se la strategia corrente mostra N trade perdenti di fila - allora possiamo sceglierne un'altra e ci vorrà del tempo per "prendere una decisione", non c'è niente da evitare. Oppure, effettuare tale selezione una volta alla settimana (nei fine settimana, quando il mercato è chiuso), e, o confermare la strategia attualmente scelta, o passare ad un'altra. È possibile fare una lista di strategie ottimali raccomandate per un trader, in determinate condizioni. Poi con l'apertura del mercato e con la mente libera (il lunedì), il trader confermerà la scelta (o prima, prima dell'apertura del mercato... e-mail di avviso, ecc.)

Beh, è una questione di ideologia. Non su di lui ora ;)

ALXIMIKS:

Si alloca la memoria a un array di strutture e si ottiene:

Perché avete bisogno diun array di Criterion Value e diun array di File Pointer Positions? (un Criterio e l'ultima transazione non hanno pensato di memorizzare?)

L'array Criterion Value serve per poter ordinare e selezionare alcune sequenze migliori (per il futuro).

Posizioni dell'indice del file - per continuare la ricerca in ogni sequenza dal posto giusto (come altro?).

ALXIMIKS:

Ho capito bene:

Primo passaggio - ricerca sull'intervallo da 0 a SeekDate

poi trovare il criterio migliore eFindDate = ora di chiusura del commercio + 1

ricerca ora sull'intervallo da"Tempo di chiusura della transazione" alSeekingDate ?

e hai bisogno di inserire in quell'intervallo X scambi per calcolare il criterio per ogni sequenza?

1. Sì, da 0 alla SeekingDate prima

2. No. La SeekedDate è spostata, e noi elaboriamo la sequenza (aggiungiamo compravendite all'array) sull'intervallo "PreviousTreatedTrade - SeekDate".

Renat:

Questi sono strani risultati.

Ecco dal nostro sistema di server funzionante sotto carico:

  • SSD: 200 Mb al secondo, NTFS
  • con RAM: 2000-2500 Mb al sec, FAT32, Softperfect RAM Disk 3.4.5

Senza telai a disco, ci vuole molto più tempo per assemblare i progetti.

Comincio a diventare complesso.

Probabilmente ho bisogno di fare uno script di prova e allegare un file per voi per controllare un compito simile.

Ho un normale disco rigido - wdc wd1002FAEX-00Y9A0, a giudicare dalle specifiche, la velocità massima è 126 MB/s:

A giudicare dalla recensione, questo è più o meno quello che si può spremere. Forse sto facendo qualcosa di sbagliato?

Diamo un'occhiata allo script...

ALXIMIKS:
È di questo che sto parlando - bisogna leggere i file grandi in grossi pezzi, altrimenti quelli piccoli possono richiedere fino a 10 volte più tempo.

Come si fa a leggere un grosso pezzo?

cartapesta:

Secondo me, la soluzione del problema sta nella codifica dei dati grezzi.

Come possiamo codificare l'informazione completa della transazione senza perdere informazioni?

 
Renat:

Strani risultati.

Questo è dal nostro sistema di server di produzione sotto carico:

  • con SSD: 200 Mb al secondo, NTFS
  • con RAM: 2000-2500 Mb al sec, FAT32, Softperfect RAM Disk 3.4.5

Senza dischi RAM ci vuole molto più tempo per costruire i progetti.

Ho dimenticato di scrivere sulla memoria.

DDR3, 1333 MHz:

Softperfect RAM Disk 3.4.5, anche se ho fatto NTFS (qualche differenza?)

E un altro dettaglio - il disco RAM è di 12000 MB, e ci sono solo 1-2 GB di memoria libera (per il lavoro).