Hatalar, hatalar, sorular - sayfa 3030

 
Andrey Dik :

0 döndürürüz, böylece henüz hiçbir şey hesaplamadığımızı ve bir sonraki çubukta ön hesaplamanın 1 artmayacağını beyan ederiz.

yani, geri dönene kadar daha yüksek TF'den veri istemeye başladığımız çubukta olacağız(rates_total)

yardımdan: " işlev çağrılırken prev_calculated parametresi , önceki çağrıda OnCalculate() işlevi tarafından döndürülen değeri içerir ."
 
mktr8591 :
yardımdan: " işlev çağrılırken prev_calculated parametresi , önceki çağrıda OnCalculate() işlevi tarafından döndürülen değeri içerir ."

evet, yardımda birçok şey yazıyor, ancak her zaman net değil, ne yazık ki (geliştiricilere bir sitem değil), çalışmanız, çalışmanız, çalışmanız gerekiyor. ancak. bu dal var çünkü bazen ne sertifikaya ne de sağduyuya uymayan şeyler var, A100 bizim kahramanımız, çünkü kimsenin kendi özgür iradesiyle tırmanmayacağı yerlere bile tırmanıyor.))

 
Сергей Таболин :

1. Herkese teşekkürler - Göstergelerde biraz daha okuryazar oldum)))

2. Andrey, eğer biri senin uydurmalarını anlamıyorsa (ben dahil), o zaman bunun tek bir anlamı var: Resmi doğru çizmiyorsun! Daha doğrusu - birçok kişinin anlamadığı şekilde çiziyorsunuz ...

gerçek daha önemlidir. Ne yazık ki, bu her zaman herkes için net değildir.

 

Andrey Dik :

0 döndürürüz, böylece henüz hiçbir şey hesaplamadığımızı ve bir sonraki çubukta ön hesaplamanın 1 artmayacağını beyan ederiz.

O zaman return(rates_total) prev_calc'ı Rates_total ile artırmalı mı?

 
Andrey Dik :

0 döndürürüz, böylece henüz hiçbir şey hesaplamadığımızı ve bir sonraki çubukta ön hesaplamanın 1 artmayacağını beyan ederiz.

hesaplamanın kendisini sıfırlar ve sıfıra sıfırlandığından şikayet eder)

 
Andrey Dik :

yeni bir çubuğu yalnızca bir kez hesaplayabiliyoruz ve her tikte değil.

göze alamayız çünkü terminal, "eski TF" üzerinde çevrimiçi olarak geçmiş verileri oluşturmayacaktır.

burada, genel olarak, bazı varsayımlara ihtiyaç vardır:

- veya OHLC'yi göstergenin içine kendimiz inşa ederiz

- veya terminal bizim için bağımsız olarak OHLC oluşturur


eğer ikincisi ise, o zaman terminalin genellikle zaman çerçevelerinin nasıl etkileşime girdiğinin, kimin " yeni çubuk " olayında neyin ve ne olduğunun bir katı olduğunun farkında olmadığını dikkate almalıyız, ancak terminalin gerekli zaman çerçevesini oluşturmasına izin vermeliyiz. Kendi


bu kodu ikinci göstergenizde deneyin:

 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[])
{
   double buff [];
   if (prev_calculated == 0 )
   {
       if ( iBars ( Symbol (), OldTF) != BarsCalculated (Handle))
      {
         Print ( "Индикатор на периоде " , OldTF, " ещё не рассчитан" );
         return 0 ;
      }
   }
   else
   {
       if (rates_total == prev_calculated)
      {
         if ( CopyBuffer (Handle, 0 , 0 , 1 , buff)< 0 ) return 0 ;
         return rates_total;
      }
   }

   ulong t = GetMicrosecondCount ();

...... далее без изменений
 
Andrei Trukhanovich :

hesaplamanın kendisini sıfırlar ve sıfıra sıfırlandığından şikayet eder)

Andrey, kodu çalıştır, lütfen... başlama, ha? Seninle savaşamam.

 
Igor Makanu :

göze alamayız çünkü terminal, "eski TF" üzerinde çevrimiçi olarak geçmiş verileri oluşturmayacaktır.

burada, genel olarak, bazı varsayımlara ihtiyaç vardır:

- veya OHLC'yi göstergenin içine kendimiz inşa ederiz

- veya terminal bizim için bağımsız olarak OHLC oluşturur


ikincisi ise, o zaman terminalin genellikle TF'lerin nasıl etkileşime girdiğinin, kimin ne olduğunun ve " yeni çubuk " olayında ne olduğunun farkında olmadığını dikkate almalıyız.


bu kodu ikinci göstergenizde deneyin:

Kodunuz her tikte hesaplamaları harmanlayacak, ilgilenmiyorum, hatta çalıştırmayacağım. Hesaplamayı, kullanılan tüm göstergelerin her tikinde değil, kullanılan tüm göstergelerde, her çubukta yalnızca BİR KEZ yapmam gerekiyor.

 
Andrey Dik :

Kodunuz her tikte hesaplamaları harmanlayacak, ilgilenmiyorum, hatta çalıştırmayacağım. Hesaplamayı, kullanılan tüm göstergelerin her tikinde değil, kullanılan tüm göstergelerde, her çubukta yalnızca BİR KEZ yapmam gerekiyor.

kodum " her kene üzerinde harmanlayacak" yalnızca yazdığınız 1 numaralı göstergeniz:

 if (rates_total == prev_calculated) return rates_total;

bu, terminalin bağımsız olarak bir "kıdemli TF" oluşturmasını sağlar

benim için, "eski zaman diliminde" geçmişi senkronize ederken kodunuzda gerçekleşen 1 numaralı göstergenin tam bir yeniden hesaplamasını yapmaktan "daha ucuz".

 
Andrey Dik :

Andrey, kodu çalıştır, lütfen... başlama, ha? Seninle savaşamam.

yer değiştirmek

 if ( SeriesInfoInteger ( Symbol (), OldTF, SERIES_SYNCHRONIZED ))
   {
       if ( iBars ( Symbol (), OldTF) != BarsCalculated (Handle))
      {
         Print ( "Индикатор на периоде " , OldTF, " ещё не рассчитан" );
         return 0 ;
      }
   }
   else 
   {
     Print ( "Период " , OldTF, " не синхронизирован." );
     return 0 ;
   }

üzerinde

 if ( SeriesInfoInteger ( Symbol (), OldTF, SERIES_SYNCHRONIZED ))
   {
       if ( iBars ( Symbol (), OldTF) != BarsCalculated (Handle))
      {
         Print ( "Индикатор на периоде " , OldTF, " ещё не рассчитан" );
         return prev_calculated;
      }
   }
   else 
   {
     Print ( "Период " , OldTF, " не синхронизирован." );
     return prev_calculated;
   }

ve test edin.

Neden: