Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz, hiçbir yerde - 6. - sayfa 1177

 

Merhaba!

Göstergenin her tikte değil de sadece bar açılışında nasıl çalışacağını ve tarih boyunca her seferinde (her yeni barda) çalışmamasını nasıl sağlayacağımı söyler misiniz?

Şimdiden teşekkür ederim.

Rostislav

 
Rost17 : Göstergenin nasıl her tikte değil de sadece bar açılışında çalışmasını ve tarih boyunca her seferinde (her yeni barda) çalışmamasını söyler misiniz?
tarihsaat t;
İlk olarak, barlar hakkında. Yeni bir çubuk oluşturulduğunda, Zaman[0]'a yeni bir değer yazılır - çubuğun açılma zamanı .
Hesapla (...)
{
if(Zaman[0] == t) dönüş(0); // Bu BAR işlenirse --> çık
t = Zaman[0];

Şimdi tarih boyunca: yavaşlayacak
 
STARIJ :
tarihsaat t;
İlk olarak, barlar hakkında. Yeni bir çubuk oluşturulduğunda, Zaman[0]'a yeni bir değer yazılır - çubuğun açılma zamanı .
Hesapla(...)
{
if(Zaman[0] == t) dönüş(0); // Bu BAR işlenirse --> çık
t = Zaman[0];

Şimdi tarih boyunca: yavaşlayacak

Hızlı cevabınız için teşekkür ederim. Yeni bir çubuk göründüğünde yavaşlamaması ve tüm geçmişin üzerinden geçmemesi, sadece yeni bir çubuğu işlemesi için nasıl yapılacağını soruyorum...

Şimdi şu şekilde organize ediliyor: for(int i=limit-1; i>=0; i--) ve anladığım kadarıyla bu, her bar açılışında tarih boyunca tüm değerlerin yeniden hesaplanacağı anlamına geliyor. , ve sadece son çubuktaki işi yapmanız gerekiyor ...

 
Rost17 : Yeni bir çubuk göründüğünde yavaşlamaması ve tüm geçmişin üzerinden geçmemesi, sadece yeni bir çubuğu işlemesi için nasıl yapılacağını soruyorum...

Son çubukta nasıl hesaplanır:

 //| Bears Power                                                      |
//+------------------------------------------------------------------+
int OnCalculate (.....)
  {
   int limit=rates_total-prev_calculated; // Количество баров, которые будем считать = ВсегоБаров - РанееПросчитано
   if (rates_total<=InpBearsPeriod) return ( 0 );

   if (prev_calculated> 0 ) limit++; // Если давно считаем, то захватим и предыдущий бар для точности
   for ( int i= 0 ; i<limit; i++)
     {
      ExtTempBuffer[i]= iMA ( NULL , 0 ,InpBearsPeriod, 0 , MODE_EMA , PRICE_CLOSE ,i);
      ExtBearsBuffer[i]=low[i]-ExtTempBuffer[i];
     }
   return (rates_total);
  }
 
STARIJ :

Önce çizgiye bakalım

daha açık hale getirmek için, bu şekilde yeniden yazdım

Aha!!! Şimdi anlamaya başlıyorum... Döngüde a değişkeni 1'den 6'ya değişiyor. Bu değişkenin 1, 5 ve 6 değerleri ile herhangi bir işlem yok. O zaman sadece

ya da senin tarzında

Sonuç aynı olacak, ancak daha hızlı

Şimdi İstatistik işlevinden kurtulmanız mı gerekiyor? Gövdesini arka arkaya üç kez yazmanız, üç bölümün her birinde resmi parametreleri gerçek olanlarla değiştirmeniz ve değişken bildirimlerinin tekrarını kaldırmanız gerekir. Genel kod biraz daha uzun olacak, ancak yürütme daha hızlı olacaktır. print()'i atmak mantıklı - şu anda tam olarak kim mesaj günlüğüne bakacak? - veya ekranda görünmesi için Alert() ile değiştirin. Bir de namZz2 değişkeni var - değeri değişiyor mu?


Aksine, istatistikleri bırakıp dizileri stat () üzerinden değil, istatistiklerde () numaralandırmam gerekiyor. Aptallıkla, söylediğin gibi üç kez yeniden yazabileceğini biliyorum, ancak sorun şu ki, istatistik toplama sonuçlarına göre, daha fazla dizi eklemeniz gerekecek ve er ya da geç orijinal olanlara döneceğim. . Bu nedenle, görevi özellikle seslendiriyorum ve bana zaten bildiğim basit yollar sunuyorsunuz, ne yazık ki beni başlangıca götürecekler. Bu nedenle, gelecekte buna geri dönmemek için sabırsızlanıyorum!

 for ( int a= 1 ;a< 6 ;a++)
{
   if (a== 2 ){Statistic(mZz2,namZz2);}
   if (a== 3 ){Statistic(mZz3,namZz3);}
   if (a== 4 ){Statistic(mZz4,namZz4);}
}

bu kodu istatistiklere nasıl ekleyebilirim? yani tek işlemdi, soruyu dile getirdiğim gibi başındasın, lütfen bak!

 
STARIJ :

Son çubukta nasıl hesaplanır:

Çok teşekkürler! Çok eski bir gösterge kaynağım var. Her seferinde tüm geçmişi yeniden hesaplamaması, yalnızca çubuk kapandıktan sonra çalışması ve yalnızca sinyalin göründüğü çubuğa bir ok koyması için düzeltebilir misiniz? Peki, yeni bir tarzda, OnCalculate ile ... Zamanınızın maliyetini karşılamaya hazırım ... Kabul ediyorsanız, o zaman bunu en iyi nasıl yapabilirim? Özelden veya nereye gönderebilirim?
 
Игорь :

İşte çalışma kodundan bir alıntı! Bu, ara boşluk Stat'ı olmadan tek bir boşlukta nasıl toplanır? Önerdiğiniz şey, tüm dizilerin bir araya getirilmesi ve ardından oradan çizilmesi için tüm kodu yeniden öğütmem gerekiyor!

Sağladığınız çalışma kodundan alıntı ya yanlış ya da Statistic() işleviniz Stat()'tan çağrıldığında yazdırmaktan başka bir şey yapmıyor.

Size döndükten hemen sonra işi tamamlar; her neyse.

Lütfen ne istediğinizi netleştirmek için tam kodu sağlayın.

 

Not. Forumda MQL4'e yeni başlayanlara yardımcı olacak çok fazla konu var.

Bu şube artık kullanımdan kaldırıldı ve kapatıldı .


Lütfen tüm sorularınızı aşağıdaki aktif şubelerden birine yönlendirin:

https://www.mql5.com/ru/forum/160683

https://www.mql5.com/ru/forum/160587

Bu konudaki sonraki tüm mesajlar silinecektir.


 
yardım, önceden satın alınmış bir siparişin satın alma fiyatı 2 saat içinde değişebilir mi?
 
Bir minecraft karakteri olan bir resim ve kar acele ederken elimde bir seçim istiyorum. nasıl yapılır?
Neden: