Tavolo di tutti i mestieri. Accesso tramite MQL5 - pagina 3

 
prostotrader:

Qualcuno sa qual è l'errore?

L'indicatore funziona correttamente, ma vengono visualizzate più barre,

di quello per cui è stato impostato.

Non ho guardato il codice, ma suppongo che dopo ogni nuova barra, non tiene conto del fatto che le linee dell'indicatore sono anche automaticamente spostate a sinistra (se si guarda il grafico). In altre parole, è necessario spostare le linee dell'indicatore verso destra (quando si guarda il grafico).
 
Karputov Vladimir:
Non ho guardato il codice, ma presumo che dopo l'apparizione di ogni nuova barra, non tiene conto del fatto che le linee dell'indicatore sono anche automaticamente spostate a sinistra (se si guarda il grafico). In altre parole, quando appare una nuova barra, sposta le linee dell'indicatore a destra (quando si guarda il grafico).
Grazie, ho trovato il bug.
File:
DealsLent.mq5  10 kb
 
prostotrader:
Il tocco finale...

Si scopre che non è l'ultimo ....

C'è bisogno di un po' più di ottimizzazione.

Lo finirò e lo testerò...

 
Se questo è il caso, mantenere l'indicatore tick - indicatore di interesse aperto (eseguito su un conto reale collegato alla borsa).
 
Karputov Vladimir:
Se questo è il caso, mantenere l'indicatore tick - indicatore di interesse aperto (eseguito su un conto reale collegato alla borsa).
Sarò felice di sentirlo.
 

È stato scoperto un problema serio:

Ticchettii duplicati con start_time diverso :(

int copied=CopyTicks(Symbol(),ticks,COPY_TICKS_ALL,start_time,0);

start_time è diverso e i tick sono copiati ripetutamente se

hanno lo stesso tempo

Lo descriverò in dettaglio domani.

Ultima costruzione

File:
DealsLent.mq5  12 kb
 

Non riesco a dormire, così ho pensato di scrivere cosa sta succedendo.

(Ilcodice completo dell'indicatore è nel post sopra).

I ticchettii della borsa non arrivano al terminale rigorosamente per intervalli di tempo,

ma in blocchi (vedi screenshot) Blocco 1, Blocco 2 ecc.

Il terminale li "immagazzina" e li visualizza nella tabella, man mano che li riceve dalla borsa (blocco per blocco).

Inentrambi i blocchi ci possono essere transazioni con lo stesso tempo.

Se chiamiamo CopyTicks() NON in tempo reale (diciamo il giorno dopo o qualche secondo),

allora la funzione CopyTicks() restituirà i dati esatti.

Ma in tempo reale succede quanto segue:

int copied=CopyTicks(Symbol(),ticks,COPY_TICKS_ALL,start_time,0);

Se start_time = (23:49:58.114), otteniamo completamente il blocco 1 (cerchiato in rosso).

Poi, aspettiamo il cambio dell'ora per ottenere il blocco 2 (cerchiato in verde).

Per evitare di duplicare il blocco 1 (OnBookEvent può scattare molto rapidamente)

introduciamo un controllo per assicurarci che l'ora sia cambiata

if(start_time==ulong(ticks[copied-1].time_msc)) return;

Quando start_time = (23:49:58.596), avremmo dovuto ottenere il blocco 2,

ma la funzione CopyTicks() restituisce sia il blocco 2 che tutti i tick con il tempo (23:49:58.114),

se il blocco 2 ha almeno un tick con lo stesso tempo (23:49:58.114).

Questa è una notizia molto triste .... :(

A meno che gli sviluppatori non sistemino questo, è impossibile ottenere un nastro in tempo reale delle compravendite.


 
prostotrader:


E perché pensate che i ticchettii vengano scaricati da un dato tempo e FUTURO alla storia quando si interroga per tempo? Infatti, quando si richiedono i tick per tempo, i tick vengono scaricati da un dato tempo e nel FUTURO. Per esempio:

Dati di ingresso (richiesta 20000 tick), tempo 2016.08.25 20-00-00:

richiesta 20.000 tick, tempo 2016.08.25 20-00-00:


Ricevere:

2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Получено тиков: 10823 код ошибки: 0
2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Тик: 2016.08.25 20:00:00 bid: 14377.0 ask: 0.0 last: 0.0 [0]
2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Тик: 2016.08.26 00:02:08 bid: 0.0 ask: 0.0 last: 0.0 [10822]
2016.08.26 07:22:06.852 CopyTicks_1_02 (SBRF-9.16,M1)   Size 0 Mb

Cioè, i tick sono ricevuti dal tempo richiesto2016.08.25 20:00:00 verso il FUTURO (l'ultimo tick ha il tempo2016.08.26 00:02:08)

File:
 
Karputov Vladimir:

E perché pensate che i tick vengano scaricati da un dato tempo e FUTURO alla storia quando si interroga per tempo? Infatti, quando si richiedono i tick per tempo, i tick vengono scaricati da un dato tempo e nel FUTURO. Per esempio:

Dati di ingresso (richiesta 20000 tick), tempo 2016.08.25 20-00-00:



Ricevere:

Cioè, i tick sono ricevuti dal tempo richiesto2016.08.25 20:00:00 verso FUTURE (l'ultimo tick ha il tempo2016.08.26 00:02:08)

Non penso in profondità, vedo "appiccicato" dalla profondità.

Perché pensare?

Esegui l'indicatore e guarda tu stesso!

E leggete almeno quello che è scritto?

Если мы вызываем CopyTicks() НЕ в реальном времени (скажкем, на следующий день),

то функция CopyTicks() будет возвращать точные данные.
 
L'ho notato per caso quando, la sera, c'erano meno offerte.