ChartNavigate durante l'inizializzazione - pagina 5

 
Ihor Herasko:

No, non lo sono. Perché è proprio questo il punto. Lasciate che vi dica un po' di più su cosa si tratta. Il 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. Così, è 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.

Un'osservazione interessante. Ho controllato io stesso - ahimè, non è cambiato nulla. Ho ancora i prezzi più freschi sulla ricarica.

Suggerisco di "sincronizzare i nostri orologi". Sto testando tutto questo sulla build 1861. Qual è la tua costruzione?

Forse dovresti aggiungere queste linee nella parte anteriore

   ChartSetInteger(0, CHART_AUTOSCROLL, false);
   ChartSetInteger(0, CHART_SHIFT, false);
   ChartNavigate(0, CHART_END, 0);

e poi spostarlo?

O semplicemente non spostarlo da nessuna parte. Funziona anche senza problemi.

ChartNavigate(0, CHART_CURRENT_POS, 0)

A quale barra ho chiuso il terminale, e a quale si è aperto.

Tuttavia, questa variante mantiene il grafico anche sulla finestra inattiva. Ahimè. Il grafico rimane al suo posto anche senza questo codice.

 
Alexey Viktorov:

Forse aggiungere righe come questa nella parte anteriore

e poi spostarlo dopo?

Sì, la versione completa ha tutto. Se si lavora senza riavviare il terminale, tutto va bene. Ma il riavvio porta a tali problemi. E anche la soluzione della stampella non sempre aiuta. Indagherò ulteriormente.

 
Ihor Herasko:

Sì, la versione completa ha tutto. Se si lavora senza riavviare il terminale, tutto va bene. Ma il riavvio porta a problemi come questo. E anche la soluzione della stampella non sempre aiuta. Indagherò ulteriormente.

Ma ho fatto esperimenti anche con il riavvio del terminale. Quale può essere il problema? Ho scaricato l'aggiornamento, ma ho cancellato l'aggiornamento per ora. Forse dovresti aggiornare anche tu?
 
Alexey Viktorov:
Ma ho anche sperimentato il riavvio del terminale. Quale potrebbe essere il problema? Ho scaricato l'aggiornamento, ma finora ho annullato l'aggiornamento. Forse dovresti aggiornare anche tu?

Aggiornato alla costruzione 1865. Il problema rimane.

Inoltre, si è scoperto che anche dopo il caricamento completo dei dati sul grafico e usando ChartNavigate() il grafico viene visualizzato dove richiesto per un po', ma con un nuovo tick torna ancora all'ultima barra. Il pulsante di scorrimento automatico è disattivato e non vengono utilizzati altri indicatori.

Se si sposta il grafico manualmente, non succede niente del genere. Sono in perdita per ora. Indagherò domani quando avrò occhi freschi per vedere se ho sbagliato da qualche parte.

 
MetaTrader 5 x64 build 1870 started (MetaQuotes Software Corp.)
Windows 10 (build 17134) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 4720 / 8077 Mb, Disk: 301 / 464 Gb, GMT+2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

Script. Solo conCHART_CURRENT_POS è stabile. Con CHART_BEGIN e "Shift" positivo, così come con CHART_END e "Shift" negativo, il grafico o non si muove o salta (scorre da solo) agli ultimi prezzi: sentendo che il pulsante di scorrimento automatico è abilitato.

//+------------------------------------------------------------------+
//|                                                       Test_1.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
#property script_show_inputs
//--- input parameters
input ENUM_CHART_POSITION  InpPosition = CHART_CURRENT_POS;    // Chart Position  
input int                  InpShift    = -1;                   // Shift
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   ResetLastError();
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   int chart_first_visible_bar=ChartFirstVisibleBar();
   if(chart_first_visible_bar==-1)
      return;
//--- 
   string comm="До: Первый бар на графике имеет номер "+IntegerToString(chart_first_visible_bar);
//--- выведем комментарий 
   Print(comm);
   if(ChartNavigate(ChartID(),InpPosition,InpShift))
      Print("ChartNavigate ",EnumToString(InpPosition),",",InpShift," успешно");
   else
      Print("Ошибка №",GetLastError(),", ",EnumToString(InpPosition));
//--- получим номер самого первого видимого на графике бара (нумерация как в таймсерии) 
   chart_first_visible_bar=ChartFirstVisibleBar();
   if(chart_first_visible_bar==-1)
      return;
//--- 
   comm="После: Первый бар на графике имеет номер "+IntegerToString(chart_first_visible_bar);
//--- выведем комментарий 
   Print(comm);
  }
//+------------------------------------------------------------------------------+ 
//| Gets the index of the first visible bar on chart.                            | 
//| Indexing is performed like in timeseries: latest bars have smallest indices. | 
//+------------------------------------------------------------------------------+ 
int ChartFirstVisibleBar(const long chart_ID=0)
  {
//--- prepare the variable to get the property value 
   long result=-1;
//--- reset the error value 
   ResetLastError();
//--- receive the property value 
   if(!ChartGetInteger(chart_ID,CHART_FIRST_VISIBLE_BAR,0,result))
     {
      //--- display the error message in Experts journal 
      Print(__FUNCTION__+", Error Code = ",GetLastError());
     }
//--- return the value of the chart property 
   return((int)result);
  }
//+------------------------------------------------------------------+

1

 
Ihor Herasko:

Aggiornato alla costruzione 1865. Il problema rimane.

Inoltre, si è scoperto che anche dopo il caricamento completo dei dati sul grafico e usando ChartNavigate() il grafico viene visualizzato dove richiesto per un po', ma con un nuovo tick torna ancora all'ultima barra. Il pulsante di scorrimento automatico è disattivato e non vengono utilizzati altri indicatori.

Se si sposta il grafico manualmente, non succede niente del genere. Sono in perdita per ora. Domani indagherò di nuovo con occhi nuovi per vedere se ho sbagliato da qualche parte.

Ho suggerito di aggiornare non nella speranza che tutto vada a posto, ma per avere le stesse build.

Igor, stai facendo esperimenti con la versione completa dell'indicatore o con quella sperimentale?

Ho appena ricaricato il terminale con la build 1865 e tutto è andato bene. Sto scrivendo questo messaggio, periodicamente guardo il grafico, cambio le finestre del grafico... Ma il grafico spostato rimane immobile nonostante i tic e gli scambi in arrivo.

Ecco l'intero codice

#property indicator_chart_window
#property indicator_plots 0
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   ChartSetInteger(0, CHART_AUTOSCROLL, false);
   ChartSetInteger(0, CHART_SHIFT, false);
   ChartNavigate(0, CHART_END, 0);
   if(ChartNavigate(0, CHART_END, -100))
      Comment("Успешно");
   else
      Comment("Ошибка №", GetLastError());   
  //ChartRedraw(ChartID());
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
{
 Comment("");
}/********************************************************************/
Per qualche ragione, non credo che un terminale funzioni così e un altro così.
 
Alexey Viktorov:

Ho suggerito l'aggiornamento non nella speranza che tutto vada a posto, ma che le costruzioni siano le stesse.

Igor, stai facendo esperimenti con la versione completa dell'indicatore o con una versione sperimentale?

Ho appena ricaricato il terminale con la build 1865 e tutto è andato bene. Sto scrivendo questo messaggio, periodicamente guardo il grafico, cambio le finestre del grafico... Ma il grafico spostato rimane immobile nonostante i tic e gli scambi in arrivo.

Ecco l'intero codice

In qualche modo non credo che un terminale funzioni così e l'altro no.

Prova a guardare un simbolo che non ha nessuna storia

 
Artyom Trishkin:

Prova a cercare un simbolo che non ha nessuna storia

Come fare?

Secondo la descrizione nel primo post del thread, è un indicatore, si blocca su un grafico aperto - significa che la storia è già caricata. Giusto? Appendere l'indicatore, chiudere il terminale, avviare il terminale, --- dove può andare la storia? Se c'era già...

In secondo luogo, ho aperto il simbolo EURMXN. Senza guardare nel terminale, puoi dire cos'è? )))

 
Alexey Viktorov:

Come fare?

Secondo la descrizione nel primo post del thread, è un indicatore, si blocca su un grafico aperto - significa che la storia è già caricata. Giusto? Appendere l'indicatore, chiudere il terminale, avviare il terminale, --- dove può andare la storia? Se era già lì...

Il secondo è stato aprire il simbolo EURMXN. Senza guardare nel terminale si può dire che cos'è? )))

No, non posso...

Quello che volevo dire è che probabilmente il caricamento di dati storici fa spostare il grafico verso la sua fine.

Prova questo: metti l'indicatore su un timeframe minuto, chiudi il terminale e aprilo dopo un'ora - il terminale inizia a caricare i minuti mancanti - cosa succederà al grafico? Si sposterà?

 

Questa è una notizia!!!

Avevo i grafici di periodo H1, H4 aperti e li ho usati per testare. Ora ha iniziato a sperimentare su M1, M5, M30... non funziona!!!

Passando a H1 o H4 non ci sono problemi anche se c'è una nuova ora. Questo è stato testato o ieri o all'inizio di oggi o sia ieri che oggi... Non è il punto, ma mi sono fatto prendere dal cambiamento dell'ora.

Motivazione: