MT5 yapı 1455
Test göstergesi:
#property indicator_buffers 0
#property indicator_plots 0
int OnInit ( void ) { return ( INIT_SUCCEEDED );}
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 &TickVolume[],
const long & Volume [],
const int &Spread[]
) {
static int si_Tick = 0 ;
Print (++si_Tick, ": prev_calculated = " , prev_calculated);
return (rates_total);
}
1. Göstergeyi çizelgeye asıyorum
2. Terminali kapatıyorum
3. Terminali açıyorum
Günlükte:
2016.10 . 17 08 : 04 : 38.757 Test (USDJPY,M15) 2 : prev_calculated = 100322
2016.10 . 17 08 : 04 : 39.060 Test (USDJPY,M15) 3 : prev_calculated = 0
2016.10 . 17 08 : 04 : 39.837 Test (USDJPY,M15) 4 : prev_calculated = 100322
2016.10 . 17 08 : 04 : 39.837 Test (USDJPY,M15) 5 : prev_calculated = 100322
...
Bir şeyi anlamıyor muyum veya prev_calculated değişkenine güvenmek imkansız mı, bir koltuk değneği kesmem gerekiyor mu?
MT5 yapı 1455
Test göstergesi:
#property indicator_buffers 0
#property indicator_plots 0
int OnInit ( void ) { return ( INIT_SUCCEEDED );}
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 &TickVolume[],
const long & Volume [],
const int &Spread[]
) {
static int si_Tick = 0 ;
Print (++si_Tick, ": prev_calculated = " , prev_calculated);
return (rates_total);
}
1. Göstergeyi çizelgeye asıyorum
2. Terminali kapatıyorum
3. Terminali açıyorum
Günlükte:
2016.10 . 17 08 : 04 : 38.757 Test (USDJPY,M15) 2 : prev_calculated = 100322
2016.10 . 17 08 : 04 : 39.060 Test (USDJPY,M15) 3 : prev_calculated = 0
2016.10 . 17 08 : 04 : 39.837 Test (USDJPY,M15) 4 : prev_calculated = 100322
2016.10 . 17 08 : 04 : 39.837 Test (USDJPY,M15) 5 : prev_calculated = 100322
...
Bir şeyi anlamıyor muyum veya prev_calculated değişkenine güvenmek imkansız mı, bir koltuk değneği kesmem gerekiyor mu?
Ön_hesaplanan değişken, sağlama toplamı değiştiyse geçmişi sayfalamadan bile 0'a sıfırlanabilir (bu, hizmet masasından alınan yaklaşık bir yanıttır).
Apaçık. Teşekkür ederim. marangoz'a imza at..
Operatörler *(Dereference/Inderection) ve &(Address-of) eklendi, dilde ek bir değişiklik yapılmayacak/planlanmayacak
Lütfen aşağıdakileri açıklayın:
* referansa göre bir değişken almak - yalnızca şunlar için geçerlidir:
2. Yapı nesneleri
3. Temel türler
Bu bağlamda, sadece bir değer mi yoksa aynı zamanda bir değer mi?
Programcının görevi böyle bir olayı yakalamaktır.
Yani ben bir programcı değilim - görevler farklı. Marangoz, muhtemelen - 'koltuk değneği keseceğim' ve 'etkinliği yakalıyorum' diye düşüneceğim
Ve hiçbir şeyi abartmıyorum çünkü bu değişkenin beyan edilen amacı:
Bu randevuya ek olarak, tarihteki değişikliklerin bir bayrağı ve ayrıca izlenecek diğer bazı değişikliklerin bayrağı olarak asılır. Hepsi faydalıdır, ancak amaçlanan amacı için kullanılamaz - önceki çağrıda kaç tane 'bar işlendiğini' göstermek için - prev_calculated'a izin verilmez
Yani ben bir programcı değilim - görevler farklı. Marangoz, muhtemelen - 'koltuk değneği keseceğim' ve 'etkinliği yakalıyorum' diye düşüneceğim
Ve hiçbir şeyi abartmıyorum çünkü bu değişkenin beyan edilen amacı:
Bu randevuya ek olarak, tarihteki değişikliklerin bir bayrağı ve ayrıca izlenecek diğer bazı değişikliklerin bayrağı olarak asılır. Hepsi faydalıdır, ancak amaçlanan amacı için kullanılamaz - önceki çağrıda kaç tane 'bar işlendiğini' göstermek için - prev_calculated'a izin verilmez
Yani ben bir programcı değilim - görevler farklı. Marangoz, muhtemelen - 'koltuk değneği keseceğim' ve 'etkinliği yakalıyorum' diye düşüneceğim
Ve hiçbir şeyi abartmıyorum çünkü bu değişkenin beyan edilen amacı:
Bu randevuya ek olarak, tarihteki değişikliklerin bir bayrağı ve ayrıca izlenecek diğer bazı değişikliklerin bayrağı olarak asılır. Hepsi faydalıdır, ancak amaçlanan amacı için kullanılamaz - önceki çağrıda kaç tane 'bar işlendiğini' göstermek için - prev_calculated'a izin verilmez
prev_calculated=0 ise, tam bir yeniden hesaplama yapılması gerektiği anlamına gelir. Bu durumda tüm standart göstergeler tamamen yeniden hesaplanır.
Ne net değil?
Checksum'un tarihte değiştiği söyleniyor. Göstergeyi yeniden hesaplamak, sağlama toplamının neden değiştiğini bulmaktan daha ucuzdur.
Belgeler bunu açıkça söylüyor.
OnCalculate() işlevi tarafından döndürülen değer ile ikinci giriş parametresi prev_calculated arasındaki ilişkiye dikkat edin. İş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 . Bu, bu işlevin önceki başlatılmasından bu yana değişmeyen çubuklar için yeniden hesaplamalardan kaçınmak için özel bir göstergeyi hesaplamak için ekonomik algoritmalar uygulamanıza olanak tanır.
Bunu yapmak için, geçerli işlev çağrısındaki çubuk sayısını içeren Rate_total parametresinin değerini döndürmek genellikle yeterlidir. OnCalculate() işlevine yapılan son çağrıdan bu yana fiyat verileri değiştiyse (daha derin bir geçmiş yüklendiyse veya geçmiş boşlukları doldurulduysa), prev_calculated girdi parametresinin değeri, terminalin kendisi tarafından sıfıra ayarlanacaktır .
Ve 0 olduğunda tüm göstergeyi yeniden hesaplarsanız? Bana göre en iyi çözüm.
Yapmanız gereken tam olarak budur: prev_calculate==0 alındığında, ENTIRE göstergesini yeniden hesaplamanız gerekir. rev_calculate==0 olduğundan, bu genellikle bir geçmiş sayfalamasıdır. Ve geçmiş pompalanırsa, atlanan veya daha önce hesaplanmayan yeni çubuklar olabilir - yani, gösterge okumaları zaten yanlış olacaktır.
![MQL5 - MetaTrader 5 müşteri terminalinde yerleşik ticaret stratejileri dili](https://c.mql5.com/i/registerlandings/logo-2.png)
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz