ChartNavigate durante l'inizializzazione - pagina 4

 
Ihor Herasko:

P./S.: Per sicurezza, vorrei chiarire che non ho iniziato a vedere cosa succede se il terminale viene caricato dopo molto tempo (cioè quando si suppone che appaiano molte nuove barre dopo che il terminale è stato scaricato).

 
Alexey Viktorov:

Dina, funziona per te? Ho lottato per 2-3 ore (solo oggi, senza contare i test di ieri) cercando di ottenere una versione non funzionante di OnInit, ma senza successo. Tutto funziona sempre come dovrebbe. Se metto l'indicatore su due grafici e riavvio il terminale, funziona solo sul grafico che era attivo al momento della chiusura e apertura del terminale. Sul secondo, il grafico non attivo non funziona. Ma questo, secondo me, è comprensibile, non c'è il rendering del grafico e non c'è il grafico stesso, nonostante il fatto che i dati siano ricevuti.

Sì, Alexei, funziona. Ne ho scritto qui. A quanto pare si è perso visivamente nelle mie citazioni di altri post.

 
Dina Paches:

Per favore, ditemi, prima di scaricare il terminale, resettate il grafico ai prezzi più recenti?

No, non lo so. Perché questo è il punto. Lasciate che vi dica in dettaglio perché tutto questo è necessario. Un trader usa il grafico come se fosse un tester. L'indicatore nasconde una parte del grafico reale a destra del tempo presumibilmente corrente (in realtà, questo tempo è da qualche parte nella storia). Premendo F12 si visualizza la candela successiva nel grafico online, ecc. Quindi, è quando si riavvia il terminale con l'indicatore collegato che non restituisce la posizione del grafico al luogo in cui il trader ha finito i suoi studi. Come risultato riceve un grafico vuoto perché il terminale resetta il grafico all'ultima candela reale. E questo nonostante il fatto che il terminale sia stato scaricato in un luogo completamente diverso.

Perché lo chiedo:

Ho usato il tuo codice per vedere come avrebbe funzionato nella mia situazione. All'inizio ho pensato che stavo riproducendo il problema che descrivete. Più tardi ho capito che non è così. Se il grafico viene ripristinato agli ultimi prezzi prima di essere scaricato, funziona secondo il codice quando il terminale viene caricato. Se non ritorno agli ultimi prezzi prima di scaricare, il grafico rimarrà dove era prima di scaricare.

Osservazione interessante. Ho controllato per conto mio e, ahimè, non è cambiato nulla. Ho ancora i prezzi più freschi sulla ricarica.

Vi suggerisco di "sincronizzare i vostri orologi". Sto testando tutto questo sulla build 1861. Qual è la tua costruzione?

 
Alexey Viktorov:

Dina, funziona per te? Ho lottato per 2-3 ore (solo oggi, senza contare i test di ieri) cercando di ottenere una versione non funzionante di OnInit, ma tutto senza risultato. Tutto funziona sempre come dovrebbe. Se metto l'indicatore su due grafici e riavvio il terminale, funziona solo sul grafico che era attivo al momento della chiusura e apertura del terminale. Sul secondo, il grafico non attivo non funziona. Ma questo, secondo me, è comprensibile, non c'è il rendering del grafico e non c'è il grafico stesso, nonostante il fatto che i dati siano ricevuti.

Mettetelo su due tabelle. Sfortunatamente, entrambi funzionano allo stesso modo - i prezzi più recenti vengono visualizzati al ricaricamento.

Che tipo di costruzione hai?

 
Si è rivelato ancora più divertente di quanto pensassi. Ho spostato il codice in OnCalculate (ho fatto un solo trigger, per non chiamarlo su ogni tick ), ma l'immagine non è cambiata. Cioè, anche in OnCalculate all'avvio del terminale ChartNavigate non funziona...
 
Alexey Viktorov:

... Solo una particolarità è stata notata: se metto l'indicatore su due grafici e riavvio il terminale, funzionerà solo sul grafico che era attivo nel momento in cui ho chiuso e aperto il terminale. Sul secondo, il grafico non attivo non funziona. Ma questo, secondo me, è comprensibile, non c'è il rendering del grafico e non c'è il grafico stesso, nonostante il fatto che i dati siano ricevuti.

Non ho pensato di provarlo io stesso in questo modo. Ora ha fatto tali esperimenti (anche con l'aiuto del codice di Igor).

Così facendo sono riuscito a finire con... che ho riprodotto il problema che ha descritto.

 
Ihor Herasko:

...

Suggerisco di "sincronizzare i nostri orologi". Sto testando tutto questo sulla build 1861. Qual è il tuo?

Ho anche il 1861. Ma grazie ad Alexey Viktorov sono riuscito a riprodurre il problema da te descritto durante l'installazione tramite OnInit(). /* prima di questo, a quanto pare, come ho visto i vostri post*/.

Ordine delle azioni: Come avete descrittoqui.

I. Ma prima di scaricare il terminale ho spostato le carte sui prezzi più freschi.

E ho impostato l'indicatore su due grafici di una coppia, diversi timeframes (GBPUSD M5 e GBPUSD H1).

I miei risultati sono i risultati di questi esperimenti:

1. Prima ho impostato l'indicatore sul grafico GBPUSD M5, poi - su GBPUSD H1. Dopo di che, avendo spostato i grafici su barre fresche, ho chiuso il terminale quando il grafico GBPUSD H1 è attivo (cioè il timeframe senior è attivo). In queste condizioni, se riapro il terminale, il grafico è spostato quando lo apro , sulle barre specificate dal tuo codice.

Tuttavia, se chiudiamo il terminale con il grafico attivo di GBPUSD M5 (cioè, il timeframe inferiore è attivo) e poi riapriamo il terminale, allora dopo il caricamento del terminale, nessuno dei due grafici è spostato. I grafici si aprono su barre fresche. Allo stesso tempo, per uno di loro ottengo il successo, per l'altro - un errore:

test 2018 06 26 (GBPUSD,M5)     Alert: Успешно
test 2018 06 26 (GBPUSD,H1)     Alert: Ошибка №4111

Durante gli esperimenti sui punti 1 e 2, dopo aver riavviato il terminale e visto i risultati, ho cancellato questo indicatore dai grafici e poi l'ho installato di nuovo.


3. quando ho fatto gli stessi esperimenti, ma senza reinstallare l'indicatore ogni volta, dopo aver riavviato il terminale, non c'è spostamento del grafico dopo il riavvio del terminale. Indipendentemente dal fatto che sia attivo con un timeframe superiore o inferiore. I grafici si aprono su barre fresche. I messaggi sono gli stessi del punto 2(successo ed errore 4111)

II. Inoltre, ho sperimentato l'installazione simultanea dell'indicatore sugli stessi due grafici ma senza riportare questi grafici prima di scaricare il terminale su barre fresche.

I risultati che ho: se chiudo/apro su un timeframe superiore, il grafico del timeframe superiore è dove era prima della chiusura. Quello inferiore (non attivo) è il più fresco.

Se apri/chiudi su un timeframe inferiore, quello inferiore sarà aperto sulle barre più fresche. I messaggi sono gli stessi del 2(successo ed errore 4111).


III. Il problema è apparso ora con il seguente:

  • Ho dimenticato di disabilitare lo scorrimento automatico del grafico prima di installare l'indicatore;
  • Quando me ne sono accorto, ho cancellato l'indicatore e l'ho installato di nuovo.

Dopo questo azzeramento dell'indicatore lo spostamento non si è verificato, ma l'allarme è riuscito:

test 2018 06 26 (GBPUSD,M5)     Alert: Успешно

Tuttavia, se prima di tale reinstallazione dell'indicatore lo scorrimento automatico è stato disabilitato non solo ora, ma qualche tempo dopo, allora il problema non è stato rilevato.


In qualche modo.

Sembra che tu debba scrivere al Service Desk.

 
Dina Paches:

Dà un successo per uno e un errore per l'altro:

Questa sì che è una sorpresa! Non sono ancora riuscito ad ottenere un errore da ChartNavigate. Ma è già qualcosa.

Nel cuore del problema, a quanto pare, sto cominciando a capire cosa sta succedendo.

Quando si chiama ChartNavigate() per la prima volta in OnInit() o in OnCalculate(), è molto probabile che non tutti i dati del grafico abbiano ancora avuto il tempo di essere caricati. Tuttavia il ChartNavigate() ha già funzionato e ha funzionato con successo (in quel momento). I dati vengono poi caricati e visualizzati sul grafico, il che porta a un completo ridisegno e spostamento del grafico al suo inizio. Come risultato, vediamo il grafico come se non fosse affatto spostato da ChartNavigate().

Quindi, per spostare con successo il grafico, dobbiamo in qualche modo determinare che i dati del grafico non saranno più visualizzati (a causa della paginazione della storia). Solo dopo aver stabilito questo fatto si può chiamare ChartNavigate().

 
Ihor Herasko:

...

Quindi, per spostare con successo il grafico, si deve in qualche modo determinare che i dati del grafico non devono più essere visualizzati (a causa della paginazione della storia). Solo dopo aver stabilito questo fatto si può chiamare ChartNavigate().

Hai ragione, probabilmente. Quando si riavvia il terminale, può diventare rilevante. Inoltre, mentre sperimentavo, ero interessato ad abilitare/disabilitare lo scorrimento automatico in combinazione con (o senza) l'azzeramento dell'indicatore. Una conseguenza di ciò che ho descritto nel blocco III, alla fine di questo post. Ma non sto ancora approfondendo la questione. Devo risolvere i miei problemi urgenti. Perciò, per il momento, passerò oltre.

 
Ihor Herasko:

Mettetelo su due tabelle. Sfortunatamente, entrambi funzionano allo stesso modo - i prezzi più recenti vengono visualizzati al ricaricamento.

Che tipo di costruzione hai?

Forum sul trading, sistemi di trading automatico e test di strategia

ChartNavigate all'inizializzazione

Alexey Viktorov, 2018.06.25 15:10

Ho anche il 1861. Sono riuscito a riprodurlo solo una volta. Tutti gli altri tentativi hanno funzionato bene.