Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 987

 

Merhaba. MT5'in özelliklerini anlamaya yardımcı olan herkese büyük saygılar. Bunu sensiz yapmak çok zor ... stupor, telefonu kapatma, daireler çizme. O halde SAYGI ve SAYGI.


Soru. Oranlar_toplam ve geçmiş çubuk limitlerini bağlamanın en iyi yolu nedir? Kodda doğru mu? Cevap, ipucu, ipucu için ATP.

 //--- Проверка количества доступных баров
   if (rates_total< 24 ) return 0 ;
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if (limit> 1 )
     
      limit=rates_total- 1 ;

//Показать историю за CountPeriods недель барах по Н1

int bars= PeriodSeconds ( PERIOD_W1 )/ PeriodSeconds ( PERIOD_H1 )*CountPeriods;   //  CountPeriods=4; В глобальных переменных

//РЕШИЛ ТАК НО ПО-МОЕМУ ЧУШЬ...

int lm= iBarShift ( NULL , PERIOD_H1 , iTime ( NULL , PERIOD_CURRENT ,limit));       //rates_total-1 в днях
int start=lm-(lm-bars);

Comment(start,"    bars    ",bars);  //Равенство значений есть

ŞİMDİ YENİ BİR SAATİN YAKLAŞIMINI GÖRDÜM. HER ŞEY NORMAL OLARAK ÇALIŞMAKTADIR.

O zaman soru şudur: Anı kodda Rate_total ile doğru bir şekilde biçimlendirdim mi?

 

Çubuklar işlevinin yardımını dikkatlice okudum:

"

start_time ve stop_time parametreleri belirtilirse, işlev tarih aralığındaki çubuk sayısını döndürür. Bu parametreler belirtilmezse, fonksiyon toplam çubuk sayısını döndürür.

"

Yardım, başlangıç tarihlerinin veya bitiş tarihlerinin dahil edilip edilmeyeceğini söylemez ve sonuç olarak işlevden ne bekleyeceğinizi bilmiyorsunuz.

Fonksiyonun çalışması şaşırtıcı:

   datetime          StartDt= StringToTime ( "2018.01.04 10:00" );
   datetime          StopDt= StringToTime ( "2018.01.03 23:49" );
//datetime         StopDt=StringToTime("2018.01.04 10:00");
//datetime         StopDt=StringToTime("2018.01.04 10:01");
   int               BarsGo= Bars ( Symbol (), PERIOD_CURRENT ,StartDt,StopDt);
   Print ( "BarsGo=" ,BarsGo);

Yorum yapılanlar da dahil olmak üzere herhangi bir seçenekle StopDt, 2 değerini alır!

Seçenek, özellikle başlangıç tarihi (2018.01.04 10:00) saniye cinsinden bitiş tarihinden (2018.01.03 23:49) sonraysa şaşırtıcıdır - neden hata yok veya en az 1?

Başlangıç ve bitiş tarihleri aynıysa, tekrar ikili değil, bir birim vermek mantıklıdır!

FORTS'ta Si aracını kontrol ediyorum, grafik dakika.

 

Lütfen yardım edin, gösterge parçası

 //+------------------------------------------------------------------+
//|  OnCalculate 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[])
  {

   ArraySetAsSeries (time, true );

   datetime Fp= 0 ,Ep= 0 ,pFp= 0 ,pEp= 0 ,Arr[];
   int Count= 0 ,bars= 0 ,dt= 0 ;

   int limit;
   if (prev_calculated== 0 || prev_calculated< 0 || prev_calculated>rates_total)
      limit=Nbar;
   else
      limit=rates_total-prev_calculated;

   for ( int i=limit;i>= 0 ;i--)
     {

       if ( CopyTime ( NULL ,TimeFrame,time[i], 1 ,Arr)> 0 )Ep=Arr[ 0 ]- 1 * PeriodSeconds ( PERIOD_CURRENT );
       else return ( 0 );

bazen zaman[i] dizisi taşar, örneğin geceleyin piyasanın kapalı olduğu zamanlarda.

2019.01.25 00:06:35.191 i-Regr4_05i (Si Splice,H1)      array out of range in 'i-Regr4_05i.mq5' (134,38)

Bu sorun nasıl çözülür?

 

Lütfen bu duyurudan sonra bilgi verin.

 double Price[]; 

Dizi boyutu her zaman 0 mı?

 
pivomoe :

Lütfen bu duyurudan sonra bilgi verin.

Dizi boyutu her zaman 0 mı?

Evet.

 
Artyom Trishkin , profesyonel ve sorumlu bir moderatör olarak, Bars işlevinin davranışının gerekçesini, özellikle de kılavuza bir bağlantıyla ve tahmine dayalı değil, sizden gerçekten duymak istiyorum!
 
Aleksey Vyazmikin :

Lütfen yardım edin, gösterge parçası

bazen zaman[i] dizisi taşar, örneğin geceleyin piyasanın kapalı olduğu zamanlarda.

Bu sorun nasıl çözülür?

Örneğin, Nbar parametresini doğru bir şekilde hesaplayın :

   if (prev_calculated== 0 || prev_calculated< 0 || prev_calculated>rates_total)
      limit= Nbar ;
 
Aleksey Vyazmikin :

Çubuklar işlevinin yardımını dikkatlice okudum:

"

start_time ve stop_time parametreleri belirtilirse, işlev tarih aralığındaki çubuk sayısını döndürür. Bu parametreler belirtilmezse, fonksiyon toplam çubuk sayısını döndürür.

"

Yardım, başlangıç tarihlerinin veya bitiş tarihlerinin dahil edilip edilmeyeceğini söylemez ve sonuç olarak işlevden ne bekleyeceğinizi bilmiyorsunuz.

Fonksiyonun çalışması şaşırtıcı:

Yorum yapılanlar da dahil olmak üzere herhangi bir seçenekle StopDt, 2 değerini alır!

Seçenek, özellikle başlangıç tarihi (2018.01.04 10:00) saniye cinsinden bitiş tarihinden (2018.01.03 23:49) sonraysa şaşırtıcıdır - neden hata yok veya en az 1?

Başlangıç ve bitiş tarihleri aynıysa, tekrar ikili değil, bir birim vermek mantıklıdır!

FORTS'ta Si aracını kontrol ediyorum, grafik dakika.

Tutarsızlıklardan bahsetmeden önce, grafikte fonksiyonun döndürdüğünden daha fazla çubuk olduğunu göstermek gerekir.

Bu fonksiyonla oldukça fazla çalışıyorum ve herhangi bir sorun yaşamıyorum. Ve iBarShift ve benzeri işlevlerin neden mql5'e konulduğuna çok şaşırdım.

Ve programcı aniden karışırsa, fonksiyonun bazı yerlerde 'başlangıç' ve 'bitiş' zamanını değiştirmesi gerçeği, bu yüzden tüm bunlar "Aptaldan Koruma" kavramına dahildir.

Ayrıca şunu da tavsiye etmek istiyorum: Fonksiyonun daha hızlı çalışmasını sağlamak için çubuğun başlangıç saatini buraya yazın. Birkaç ekstra hat, bir atış hızı sağlayacaktır. Bu özellikle test cihazı için önemlidir.

 
Vladimir Karputov :

Örneğin, Nbar parametresini doğru bir şekilde hesaplayın :

Kendim için zaten bir kontrol yaptım, ancak bu kontrol, bu fonksiyonun hatasını atlamak için, yardım, bir kontrol ihtiyacı hakkında hiçbir şey söylemiyor, bu da yerleşik olması gerektiği anlamına geliyor.

Ve sonra, gösterge kontrolünden bahsediyorsunuz ve doğru çubuk başlangıç zamanını hesaplamak için Çubukları kullanıyorum, çünkü iBarShift aklımda ve sadece forex için uygun, takaslar ve ticaret oturumları nedeniyle geçmişte sık sık başarısızlıkların olmadığı yerlerde. bütün gün sürmeyin.

 
Alexey Viktorov :

Tutarsızlıklardan bahsetmeden önce, grafikte fonksiyonun döndürdüğünden daha fazla çubuk olduğunu göstermek gerekir.

Bu fonksiyonla oldukça fazla çalışıyorum ve herhangi bir sorun yaşamıyorum. Ve iBarShift ve benzeri işlevlerin neden mql5'e konulduğuna çok şaşırdım.

Ve programcı aniden karışırsa, fonksiyonun bazı yerlerde 'başlangıç' ve 'bitiş' zamanını değiştirmesi gerçeği, bu yüzden tüm bunlar "Aptaldan Koruma" kavramına dahildir.

Ayrıca şunu da tavsiye etmek istiyorum: Fonksiyonun daha hızlı çalışmasını sağlamak için çubuğun başlangıç saatini buraya yazın. Birkaç ekstra hat, bir atış hızı sağlayacaktır. Bu özellikle test cihazı için önemlidir.

Bu bir savunma değil, koddaki bir hatayı tespit etmenin önünde bir engeldir!

Ayrıca, tarihler eşleşiyorsa 2 sayısını döndürmek hiç mantıklı değil - o zaman gerekçesi nedir?

FORTS'ta bir çubuğun başlama zamanı eşleşmeyebilir, bu da hesaplama hatalarına yol açar, örneğin, çubuk 14:00'te değil, 14:05'te açılır - Ben de bundan muzdariptim.