Başlatmada ChartNavigate - sayfa 5

 
Ihor Herasko :

Hayır, dönmüyorum. Çünkü mesele tam olarak bu. Tüm bunların ne için olduğu hakkında size biraz daha anlatacağım. Tüccar grafiği bir test cihazı gibi kullanır. Gösterge, sözde şimdiki zamanın sağında bulunan gerçek grafiğin bir bölümünü gizler (aslında bu zaman tarihte bir yerdedir). F12'ye bastığınızda, çevrimiçi grafiğin bir sonraki mumu görüntülenir, vb. Bu nedenle, tam olarak gösterge eklenmiş olarak terminali yeniden başlattığınızda, grafik konumunu tüccarın araştırmasını tamamladığı yere döndürmez. Sonuç olarak, boş bir grafik alır çünkü terminal, grafik görüntüsünü son gerçek muma değiştirir. Ve bu, terminalin tamamen farklı bir yerde boşaltılmasına rağmen.

İlginç bir gözlem. Kendim kontrol ettim - ne yazık ki ve ah, hiçbir şey değişmedi. Yine de, yeniden başlattığımda en son fiyatları alıyorum.

Saati kontrol etmenizi öneririm. Bunların hepsini yapı 1861'de test ediyorum. Sizde hangisi var?

Belki böyle satırlar ekleyin

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

ve sonra değiş?

Ya da hiçbir yere kıpırdamayın. Bu da sorunsuz çalışıyor.

 ChartNavigate ( 0 , CHART_CURRENT_POS , 0 )

Terminal hangi barda kapandı, bu barda açıldı.

Ancak bu seçenek, grafiği etkin olmayan pencerede tutar. Ne yazık ki. Grafik, bu kod olmadan bile yerinde kalır.

 
Alexey Viktorov :

Belki böyle satırlar ekleyin

ve sonra değiş?

Evet, tam sürümde hepsi var. Terminali yeniden başlatmadan çalışırsanız, her şey yolunda demektir. Ve burada yeniden başlatma, burada böyle sorunlara yol açar. Ayrıca, koltuk değneği çözümü bile her zaman yardımcı olmaz. Daha fazla keşfedeceğim.

 
Ihor Herasko :

Evet, tam sürümde hepsi var. Terminali yeniden başlatmadan çalışırsanız, her şey yolunda demektir. Ve burada yeniden başlatma, burada böyle sorunlara yol açar. Ayrıca, bir koltuk değneği çözümü bile her zaman yardımcı olmaz. Daha fazla keşfedeceğim.

Ama sonuçta, terminali yeniden başlatmayı da denedim. Sorun ne olabilir? Güncellemeyi indirdim ama şimdilik güncellemeyi iptal ettim. Siz de yükseltebilir misiniz?
 
Alexey Viktorov :
Ama aynı zamanda terminali yeniden başlatmayı da denedim. Sorun ne olabilir? Güncellemeyi indirdim ama şimdilik güncellemeyi iptal ettim. Siz de yükseltebilir misiniz?

1865 yapısına güncellendi. Sorun hala mevcut.

Ayrıca, verileri grafiğe tam olarak yükledikten ve ChartNavigate() kullanıldıktan sonra bile, grafiğin gerekli olduğu yerde bir süre görüntülendiği, ancak yeni bir onay işaretiyle yine de en son çubuğa döndüğü ortaya çıktı. Otomatik kaydırma düğmesi kapalıdır, başka hiçbir gösterge kullanılmaz.

Grafiği manuel olarak hareket ettirirseniz, böyle bir şey olmaz. Tam bir kafa karışıklığı içindeyken. Yarın, taze bir zihinle, yine de keşfedeceğim, belki bir yerleri karıştırmışımdır.

 
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

Senaryo. Sadece CHART_CURRENT_POS ile stabil çalışır. CHART_BEGIN ve pozitif "Shift" ile ve CHART_END ve negatif "Shift" ile, grafik ya hareket etmez ya da en son fiyatlara atlar (kendi kendine geri sarar): otomatik kaydırma düğmesinin etkinleştirildiği hissi.

 //+------------------------------------------------------------------+
//|                                                       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 :

1865 yapısına güncellendi. Sorun hala mevcut.

Ayrıca, verileri grafiğe tam olarak yükledikten ve ChartNavigate() kullanıldıktan sonra bile, grafiğin bir süre gerekli olduğu yerde görüntülendiği, ancak yeni bir onay işaretiyle yine de en son çubuğa döndüğü ortaya çıktı. Otomatik kaydırma düğmesi kapalıdır, başka hiçbir gösterge kullanılmaz.

Grafiği manuel olarak hareket ettirirseniz, böyle bir şey olmaz. Tam bir kafa karışıklığı içindeyken. Yarın, taze bir zihinle, yine de keşfedeceğim, belki bir yerleri karıştırmışımdır.

Güncellemeyi her şeyin yerine oturacağı umuduyla değil, aynı yapılara sahip olmak için önerdim.

Igor, göstergenin tam sürümünde mi yoksa deneysel sürümde mi deneyler yapıyorsun?

Terminalin yeniden başlatılmasını tekrarladım, 1865'i kurdum, her şey net bir şekilde çalıştı. Bu mesajı yazıyorum, zaman zaman çizelgeye bakıyorum, çizelge pencerelerini değiştiriyorum... ama değişen çizelge, gelen tiklere ve geçişlere rağmen eskisi gibi kalıyor.

İşte kodun tamamı

 #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 ( "" );
} /********************************************************************/
Nedense, bir terminalin bu şekilde çalıştığına ve diğerinin çalışmadığına inanmıyorum.
 
Alexey Viktorov :

Güncellemeyi her şeyin yerine oturacağı umuduyla değil, aynı yapılara sahip olmak için önerdim.

Igor, göstergenin tam sürümünde mi yoksa deneysel sürümde mi deneyler yapıyorsun?

Terminalin yeniden başlatılmasını tekrarladım, 1865'i kurdum, her şey net bir şekilde çalıştı. Bu mesajı yazıyorum, zaman zaman çizelgeye bakıyorum, çizelge pencerelerini değiştiriyorum... ama değişen çizelge, gelen tiklere ve geçişlere rağmen eskisi gibi kalıyor.

İşte kodun tamamı

Nedense, bir terminalin bu şekilde çalıştığına ve diğerinin çalışmadığına inanmıyorum.

Hiç geçmişi olmayan bir sembole bakmaya çalışın

 
Artyom Trishkin :

Hiç geçmişi olmayan bir sembole bakmaya çalışın

Nasıl yapılır?

Konunun ilk mesajındaki açıklamaya göre, bu açık bir grafiğe asılan bir göstergedir, yani geçmiş zaten yüklenmiştir. Böyle? Göstergeyi asarız, terminali kapatırız, terminali başlatırız , --- geçmiş nereye gidebilir? O zaten orada olsaydı...

İkinci olarak EURMXN sembolünü açtım. Terminale bakmadan ne olduğunu söyleyebilir misiniz? )))

 
Alexey Viktorov :

Nasıl yapılır?

Konunun ilk mesajındaki açıklamaya göre, bu açık bir grafiğe asılan bir göstergedir, yani geçmiş zaten yüklenmiştir. Böyle? Göstergeyi asarız, terminali kapatırız, terminali başlatırız , --- geçmiş nereye gidebilir? O zaten orada olsaydı...

İkinci olarak EURMXN sembolünü açtım. Terminale bakmadan ne olduğunu söyleyebilir misiniz? )))

Hayır, yapamam...

Muhtemelen geçmiş verilerin yüklenmesinin grafiğin sonuna kaymasına neden olduğunu kastettim.

Bunu deneyin: göstergeyi bir dakika TF'ye koyun, terminali kapatın ve bir saat içinde açın - terminal eksik dakikaları yüklemeye başlayacak - programa ne olacak? Hareket edecek mi?

 

Ne haber!!!

H1, H4 açık dönem çizelgeleri vardı ve onları kontrol ettim. Şimdi M1, M5, M30 üzerinde denemeye başladım ... çalışmıyor !!!

H1 veya H4'e geçiyorum, yeni bir saat gelse bile sorun yok. Ya dün ya da bugün daha önce ya da hem dün hem de bugün kontrol edildi ... asıl mesele değil, ama saat değişikliğine ulaştım.