MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 580

 
Merhaba! Sorunla başa çıkmaya yardımcı olun. Bir Uzman Danışmandan farklı semboller/TF'ler hakkında veri almam gerekiyor. Yardım diyor ki: " Veri için sunucuya erişim mekanizması, isteğin nasıl başlatıldığına bağlı değildir - kullanıcı tarafından grafikte gezinirken veya programlı olarak MQL4 dilinde. " Bununla birlikte, pratikte, örneğin gerçek zamanlıysa, EA'nın üzerinde çalıştığı sembolden farklı bir sembol/TF için çubuk sayısını izlemek için, sonuç aşağıdaki gibidir: İlk çağrıda yeni bir sembol için az sayıda çubuk yüklenir (M1 için yaklaşık 1000) ve bu sayı değişmez. Farklı zaman serisi erişim fonksiyonlarını denedim, çubukların ve zamanın şu anda yüklendiğinden daha derine kaymasını ayarlamaya çalıştım, ChartNavigate(_ID, CHART_BEGIN) grafiğini taşımaya çalıştım - yeni veri yüklenmedi, çubuk sayısı değişmez. Ancak aynı Expert Advisor'dan programlı olarak bir pencere açarsanız (daha önce ChartNavigate() işlevi için açmışsınız) ve grafiği ok/Home/PgUp düğmesiyle sola hareket ettirirseniz, bu zaman serisi dizilerinde bir artışa yol açar, gerçek zamanlı çubuk sayısı artar, yani. veriler yükleniyor. Klavyedeki fiziksel tuşlara basmadan geçmişi programlı olarak yüklemek için ne yapılmalı? Teşekkür ederim)
 
Ihor Herasko :

Öyleyse yap. Kod neredeyse doğru. Tek kelime eksik:

Sayesinde!
 
Alexandr Mordashov :
Merhaba! Sorunla başa çıkmaya yardımcı olun. Bir Uzman Danışmandan farklı semboller/TF'ler hakkında veri almam gerekiyor. Yardım diyor ki: " Veri için sunucuya erişim mekanizması, isteğin nasıl başlatıldığına bağlı değildir - kullanıcı tarafından grafikte gezinirken veya programlı olarak MQL4 dilinde. " Bununla birlikte, pratikte, örneğin gerçek zamanlıysa, EA'nın üzerinde çalıştığı sembolden farklı bir sembol/TF için çubuk sayısını izlemek için, sonuç aşağıdaki gibidir: İlk çağrıda yeni bir sembol için az sayıda çubuk yüklenir (M1 için yaklaşık 1000) ve bu sayı değişmez. Farklı zaman serisi erişim fonksiyonlarını denedim, çubukların ve zamanın şu anda yüklendiğinden daha derine kaymasını ayarlamaya çalıştım, ChartNavigate(_ID, CHART_BEGIN) grafiğini taşımaya çalıştım - yeni veri yüklenmedi, çubuk sayısı değişmez. Ancak aynı Expert Advisor'dan programlı olarak bir pencere açarsanız (daha önce ChartNavigate() işlevi için açmışsınız) ve grafiği ok/Home/PgUp düğmesiyle sola hareket ettirirseniz, bu zaman serisi dizilerinde bir artışa yol açar, gerçek zamanlı çubuk sayısı artar, yani. veriler yükleniyor. Klavyedeki fiziksel tuşlara basmadan geçmişi programlı olarak yüklemek için ne yapılmalı? Teşekkür ederim)

Soruyu daha net formüle etmemiz gerekiyor. Görev ayarlanmazsa, çözülemez.

 
Galim_V :
Baykuşun asılı olduğu zamandan farklı bir zaman diliminden alt göstergeleri nasıl elde edeceğimi söyleyebilir misiniz?
 double iRev()
{
 static int wtf;
 static int tf;  
 int xtf = Period ();       // таймфрейм текущего графика 
 
                           //PERIOD_CURRENT;
 if (xtf != PERIOD_CURRENT )
 {
 Print ( "xtf  " ,xtf);
   switch (xtf)
   {
     case 1 : tf = PERIOD_H1 ;
     break ;
     case 5 : tf = PERIOD_H4 ; wtf = PERIOD_H1 ;
     break ;
     case 15 : tf = PERIOD_D1 ;
     break ;
   }
     
 }
Print ( "tf == " ,tf, "wtf ==" ,wtf);
 double   iRa =   NormalizeDouble ( iCustom ( NULL ,tf, "iRevers" ,InpSARStep,InpSARMaximum, 0 ), Digits );
 double   wRa =   NormalizeDouble ( iCustom ( NULL ,wtf, "iRevers" ,InpSARStep,InpSARMaximum, 0 ), Digits );
   if (iRa != 0 ) ObjectCreate ( "Ra" , OBJ_HLINE , 0 , Time [ 0 ],iRa, 0 , 0 );
     
     ObjectSet ( "Ra" , OBJPROP_TIME1 , Time [ 0 ]);
     ObjectSet ( "Ra" , OBJPROP_PRICE1 ,iRa);
   
   if (wRa != 0 ) ObjectCreate ( "weRa" , OBJ_HLINE , 0 , Time [ 0 ],wRa, 0 , 0 ); 
     ObjectSet ( "weRa" , OBJPROP_TIME1 , Time [ 0 ]);
     ObjectSet ( "weRa" , OBJPROP_PRICE1 ,wRa); 
    
     
   Print ( "iRa   " ,iRa,wRa);
 return (iRa);
}  
Çalışıyor, ancak her zaman doğru değil. Görsel değerlendirme için vidalanmış nesneler. Bana ya da nereye bakacağımı söyle.
 
Galim_V :
Çalışıyor, ancak her zaman doğru değil. Görsel değerlendirme için sabitlenmiş nesneler. Bana ya da nereye bakacağımı söyle.

DRAW_LINE neden burada?

 double   iRa =   NormalizeDouble ( iCustom ( NULL ,tf, "iRevers" ,InpSARStep,InpSARMaximum, DRAW_LINE , 0 ), Digits );
 double   wRa =   NormalizeDouble ( iCustom ( NULL ,wtf, "iRevers" ,InpSARStep,InpSARMaximum, DRAW_LINE , 0 ), Digits );
 
Alexey Viktorov :

DRAW_LINE neden burada?

Kodu düzelttim. Ancak koddaki hatalar nedeniyle bile düzgün çalışmadı. Aracımın değil terminalinde testler yapıyorum ve sunucuyla olan bağlantıyı her zaman takip etmiyorum. Ve bu durumda kritiktir. Teşekkür ederim.
 

Merhaba. Danışman H1 tablosundaysa , M30'un kapanış fiyatı nasıl bulunur?

Close_M30= iClose ( Symbol (), PERIOD_M30 , 1 );
 
bij :

Merhaba. Danışman H1 tablosundaysa , M30'un kapanış fiyatı nasıl bulunur?

İnsanların bir soru sorup kendi kendilerine cevap vermesinden hoşlanıyorum))

Genel olarak, her şey doğru. Sadece bir uyarı var: başka bir TF'den alınan verileri kullanmadan önce, bu verilerin var olduğundan emin olmanız gerekir.

Bu nedenle, tam doğru kod şöyle görünecektir:

 ResetLastError ();
Close_M30= iClose ( Symbol (), PERIOD_M30 , 1 );
if ( GetLastError () != ERR_NO_ERROR )
{
   // Значение Close_M30 использовать нельзя
}
 
Ihor Herasko :

İnsanların bir soru sorup kendi kendilerine cevap vermesinden hoşlanıyorum))

Genel olarak, her şey doğru. Sadece bir uyarı var: başka bir TF'den alınan verileri kullanmadan önce, bu verilerin var olduğundan emin olmanız gerekir.

Bu nedenle, tam doğru kod şöyle görünecektir:

Teşekkürler, işlem yalnızca H1 kapandıktan sonra gerçekleşir, ancak koşul H1 kapanmadan 30 dakika önce karşılanır.

 ResetLastError ();
   niz_= NormalizeDouble ( iCustom ( NULL , PERIOD_M30 , "mand v.1" , 2 , 1 ), Digits );
   Close_M30= iClose ( Symbol (), PERIOD_M30 , 1 );
   if ( GetLastError () != ERR_NO_ERROR ) return ;
   if (Close_M30>niz_) //условие
     {
       //действие
     }
 
bij :

Teşekkürler, işlem yalnızca H1 kapandıktan sonra gerçekleşir, ancak koşul H1 kapanmadan 30 dakika önce karşılanır.

Son kapanan H1 mum çubuğuyla birlikte kapanan M30 mum çubuğunu almanız gerekiyorsa, o zaman sadece 1 değil, aynı zamanda 2 endeksli bir mum çubuğu olabilir. M30 , önceki mum H1 için aynı kapanış fiyatıysa alınır. Yani, bu durumda, mevcut zaman diliminin kapanış fiyatı ile çakıştığı için başka bir zaman diliminin kapanış fiyatını sorgulamanın bir anlamı yoktur.