[ARŞİV] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 5. - sayfa 209

 
polycomp :
Bunlar fonksiyonlar, nesneler ise grafik üzerinde çizilen dikdörtgenlerdir.

Dosyalar:
 
polycomp:


Dosyalar:
 
Görmelisin, zaman alacak.
 
polycomp :
Yeniden başlatmadan sonra kodun çalışma biçimindeki farkın olası nedenlerinden biri, MT4'te statik değişkenlerin başlatılmasının özelliğidir. isNewBar() işlevinde böyle bir değişken kullanırsınız. İlk başlatma sırasında, BarTime = 0. Ve sonraki yeniden başlatma sırasında, bu değişken önceki değeri içerecektir (0'ı değil). Bu varsayımı test etmek için BarTime değişkenini global yapın ve kodu test edin.
 
polycomp :
ayrıca :

İlk önce, çağrıldıklarını bilmek için Print'teki kütüphane işlevlerinden bir şeyler yazdırın.

Grafiksel nesneler kütüphane fonksiyonlarında oluşturulur. Göstergenin ilk çağrısından sonra nesneler oluşturulur ve terminal penceresinde görüntülenir.

Nesneler listesinde tekrar çağrıldıklarında, yokturlar, bu, gösterge yeniden hesaplandığında herhangi bir nedenle harici işlevlerin sürmediği ve terminalin bu konuda sessiz olduğu anlamına gelir.

TAMAM. Belki de, aynı şekilde, dolaylı işaretlerle karar vermeyin, ancak göstergenin kendisinde aptalca yazdırın: Yazdır ("böyle bir işlevi çağırmak"); Çağrılıp çağrılmadığını hemen göreceğiz.

Daha az kibirli olmanız gerekir, o zaman hatalar daha hızlı bulunur)

 
polycomp :



Genel olarak, sorununuz büyük olasılıkla işlevdedir.

 bool isNewBar()
{
   static datetime BarTime;  
   bool res= false ;
    
   if (BarTime!=Time[ 0 ]) 
      {
         BarTime=Time[ 0 ];  
         res= true ;
      } 
   return (res);
}

Mesele şu ki, yeniden başlatma sırasında statikler sıfırlanmaz, bu nedenle BarTime'ı yeniden başlattığınızda, her zaman en son hesaplanan son çubuğun zamanına sahip olursunuz, yani. isNewBar() yeni bir mum gelene kadar false olacaktır. İşlevi kitaplıktan mqh kapsayıcısına aktarmak ve BarTime=0'ı init () içinde açıkça sıfırlamak daha iyi olur.

Bu benim hazırlıksız, koda ilk bakışta, bu yüzden yalan söyleyip söylemediğimi kesin olarak yargılamayın.

 
polycomp :



Başlangıç olarak, bu satırı kütüphanenizden kaldırırdım.

 #property library

Bir kitaplık değil, bir içerme dosyası kullandığınız için

 
alsu :

Hatırladığım kadarıyla, gecikmeyi ayarlarken bu zamanı özellikle hatırlamanız gerekecek. Doğrudan yorumlarda sıraya göre (veya sihirde, özel bir sapıklık olarak :) hatırlayabilirsin.
Çok teşekkürler.
 

SORU 1.

Böyle bir fikir nasıl kodlanır.

Bekleyen bir emir verin , ancak yalnızca bekleyen bir emir oluşturma fiyatının herhangi bir TF60 mumunun açılış fiyatıyla eşleşmesi durumunda piyasa emrine dönüştürüldüğünden emin olun.

SORU 2.

Böyle bir fikir nasıl kodlanır.

Bekleyen emir bir piyasa emrine dönüştürülürse, 10 dakika sonra. aynı değerlere sahip başka bir bekleyen emir verin: açılış fiyatı , emirleri durdur , bir piyasa emrine dönüştürülen önceki bekleyen emirde olduğu gibi hacim .

Teşekkür ederim.

 
alsu :

TAMAM. Belki de, aynı şekilde, dolaylı işaretlerle karar vermeyin, ancak göstergenin kendisinde aptalca yazdırın: Yazdır ("böyle bir işlevi çağırmak"); Çağrılıp çağrılmadığını hemen göreceğiz.

Daha az kibirli olmanız gerekir, o zaman hatalar daha hızlı bulunur)

ayrıca :

Genel olarak, sorununuz büyük olasılıkla işlevdedir.

Mesele şu ki, yeniden başlatma sırasında statikler sıfırlanmaz, bu nedenle BarTime'ı yeniden başlattığınızda, her zaman en son hesaplanan son çubuğun zamanına sahip olursunuz, yani. isNewBar() yeni bir mum gelene kadar false olacaktır. İşlevi kitaplıktan mqh kapsayıcısına aktarmak ve BarTime=0'ı init () içinde açıkça sıfırlamak daha iyi olur.

Bu benim hazırlıksız, koda ilk bakışta, bu yüzden yalan söyleyip söylemediğimi kesin olarak yargılamayın.


Çok teşekkürler!

isNewBar() kütüphaneden kaldırıldı ve gösterge dosyasına yerleştirildi. Her şey saat gibi çalışıyor!

Neden: