Testare 'CopyTicks'. - pagina 23

 
Renat Fatkhullin:

È ottimale scaricare una volta quello che ti serve in profondità, e poi scaricarne di nuovi dalla cache vicina solo in microsecondi.

Se fai delle query profonde ogni volta con il fallimento su disco, allora ovviamente è colpa tua.

Puoi mostrarmi il codice per il recupero ottimale della cronologia delle zecche per la prima settimana di settembre?
 
fxsaber:
Puoi mostrarmi il codice per il modo migliore per ottenere la cronologia delle zecche per la prima settimana di settembre?

Scrivilo tu, non è un compito difficile.

Interroga le date esatte e le salva in un array locale. Non c'è ottimismo quando si lavora fuori dalla cache. L'ottimizzazione ha senso solo quando si scaricano gli ultimi 4096 tick dalla cache.

 
Renat Fatkhullin:

Scrivilo tu, non è un compito difficile.

Fai una query sulle date esatte e memorizza in un array locale.

In questo modo non si può sapere in anticipo quante zecche ci sono state nell'intervallo richiesto. Non c'è modo di determinare il parametro del conteggio. Ecco il problema.

Per pompare tutta la storia dall'inizio di settembre, impostando il conteggio = trilione - è possibile, naturalmente. Poi usate la ricerca binaria per trovare la data finale nell'array e troncate.

Ma questo triliardo non è affatto un approccio tecnico. O dobbiamo sovraccaricare la funzione con from, to. O l'accesso all'indice del database.

 
Renat Fatkhullin:

L'ottimizzazione ha senso solo quando si scaricano gli ultimi 4096 tick dalla cache.

Da riferimento:

Uscita velocità: il terminale memorizza per ogni simbolo 4096 ultimi tick nella cache per un accesso rapido (per i simboli con stack in esecuzione - 65536 tick)

E circa 65536 ticks (con stack) - non sarebbe già ottimale?
 

Prepareremo dei miglioramenti a CopyTicks nella prossima build:

  • Forse renderemo le cache veloci adattive con espansione automatica a 128k ticks, che permetterà di scrivere programmi più facili (non c'è bisogno di preoccuparsi di scaricare, e spesso si può ottenere il volume necessario direttamente dalla cache veloce)
  • aggiungeremo un'ulteriore versione della funzione, così sarà possibile prendere le citazioni con le date esatte da & a
 
Renat Fatkhullin:

Prepareremo dei miglioramenti a CopyTicks nella prossima build:

  • possibilmente rendere le cache veloci adattive con espansione automatica a 128k ticks, che permetterà di scrivere programmi più facilmente (non c'è bisogno di preoccuparsi di scaricare, e spesso ottenere il volume necessario direttamente dalla cache veloce)
  • Aggiungeremo un'ulteriore versione della funzione, per essere in grado di prendere preventivi con date esatte da & a

Grazie!

Circa la storia completamente caricata da & a, probabilmente, dirà zero GetLastError.

Notate che ora (e con l'introduzione dei miglioramenti che avete delineato) è estremamente difficile ottenere un segno di spunta che era prima del tempo. Pertanto, propongo di fare il conteggio e negativo - una richiesta di tick non solo al futuro (a destra), ma anche al passato (come a da == 0).

Allora sarà sempre conveniente e ottimale (la vostra implementazione) interrogare la storia precedente.

 
fxsaber:

Grazie!

Una storia completamente scaricata da & a sarebbe probabilmente indicata da un GetLastError pari a zero.

Notate che ora (e con l'introduzione dei miglioramenti che avete indicato) è estremamente difficile ottenere un segno di spunta che era prima del tempo. Pertanto, propongo di fare il conteggio e negativo - una richiesta di tick non solo al futuro (a destra), ma anche al passato (come a da == 0).

Allora sarà sempre conveniente e ottimale (la vostra implementazione) interrogare la storia precedente.

È meglio fare gli overload di CopyTicks() in una volta sola, come per le altre funzioni Copy...().
 
Alexey Kozitsyn:
È meglio fare gli overload di CopyTicks() come per le altre funzioni Copy...().
Allora dovremo abbandonare il conteggio di default e il da.
 
fxsaber:
Allora dobbiamo abbandonare il conteggio di default e da.

Perché? Usando CopyBuffer come esempio, ora abbiamo questo:

intCopyBuffer(
intindicator_handle,// maniglia dell'indicatore
intbuffer_num,// numero del buffer dell'indicatore
datetimestart_time,//data
intcount,// quanticopy
doublebuffer[]// array, dove i dati saranno copiati

);

C'è un conteggio e da (start_time).

Lei suggerisce di aggiungere questo:

intCopyBuffer(
intindicator_handle,// maniglia dell'indicatore
intbuffer_num,// numero del buffer indicatore
datetimestart_time,// da quale data
datetimestop_time,// fino a quale data
doublebuffer[]// array, dove i dati saranno copiati

);

Quindi possiamo copiare in entrambe le direzioni, giusto? Solo, invece di datetime - ulong (in microsecondi).

Aggiungerò questo sovraccarico per altri scopi in futuro:

intCopyBuffer(
intindicator_handle,// maniglia dell'indicatore
intbuffer_num,// numero del buffer dell'indicatore
intstart_pos,//dove iniziamo
intcount,// quanti ne copiamo
doublebuffer[]// array che copierà i dati
);

Questo è tutto.

 
fxsaber:
Allora dovremo abbandonare il conteggio di default e il da.

Non l'ho letto attentamente all'inizio... Sì, devo farlo. E allora? Se gli sviluppatori espanderanno la cache - sarà più lento solo quando si carica una cronologia di tick abbastanza grande, e spesso non è necessario farlo. E per il caricamento in tempo reale non sarà influenzato in alcun modo (sarà preso dalla cache).

Penso che sia molto più importante caricare da data a data, che cercare di salvare i parametri predefiniti.

Motivazione: