Hareketli ortalamaların kesiştiği çubuğun zamanı nasıl bulunur? (içerideki kod) - sayfa 3

 

Evet, özellikle PERIOD_H1 tablosu için buna ihtiyacım var. Zaman çerçevelerini değiştirebileceğim ve bu TF için kodlanmış sabit kod isteyebileceğim için.

(Bunu yanlış yaptığımdan endişeleniyorum - özellikle de MA'lar ve if ifadesiyle ilgili olarak bana iki kez yazdıklarınız... MA çarpı işareti (aşağıda) Yani bu kesinlikle onu iBarShift'e uygulayarak işe yarar...?)

 if (i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12)triggerBarTime = Time[ 1 ];
 
WHRoeder :

Birden fazla hareketli ortalama aynı anda kesişmez .

Neden çift yayın yapıyorsun? Sorunuz daha önce cevaplandı .

Hepsinin uygun sırada olduğu en eski çubuğu bulun.


 int DIR = 0 ;
for ( int iBar = 0 ; iBar < Bar; iBar++){
   double MA20 = ... iBar), 
           MA5 = ... iBar);
          :
   if (     MA20 > MA5 && MA5 > ...) DIR = - 1 ;
   else if (MA20 < MA5 && MA5 < ...) DIR = + 1 ; // All fanning up.
   else if (DIR != 0 ){ iBar--; break ; }       // Last one was cross.
}
Bar değişkenlerinin amacının ne olduğunu sorabilir miyim? Ayrıca, "--" ne anlama geliyor? İki "--" ve "!" işaretler? (çok nazik olursanız? Yardım bölümüne baktım ama amaçlarına rastlamadım.)
 
DomGilberto :

Bar değişkenlerinin amacının ne olduğunu sorabilir miyim? Ayrıca, "--" ne anlama geliyor? İki "--" ve "!" işaretler? (çok nazik olursanız? Yardım bölümüne baktım ama amaçlarına rastlamadım.)


Ve size kitaptan temelin neden hala bilinmediğini sorabilir miyim?

https://book.mql4.com/basics/expressions

 
Sorunuz "bu küçük metal şey (anahtar) nedir ve neden bir presey şey dikdörtgen (gaz) ve diğerleri kare şeklinde?"
kodlamayı öğrenin .
 

Ama gaz anahtarının ne olduğunu biliyorum... - bu kodlamaktan daha basit...

Yine de haklısın - baştan sona okumam gerekiyor.

Bunun nedeni, en iyi deneme yanılma yoluyla öğrenmemdir (konu bilgiyi akılda tutmak olduğunda her zaman ustayım). Gördüğümde mantığı anlamama yardımcı oluyor. Ayrıca MQL4 sitesi, hepsinin birlikte nasıl çalıştığına dair her şeyi net bir şekilde açıklamaz.

Bu yüzden sorunuzu yanıtlamak için DEĞİŞİYOR, bu yüzden bazı temel bilgileri ve bazı daha ileri düzey bilgileri biliyorum, ancak düzensiz geliyor çünkü etrafta oynamayı ve bu şekilde öğrenmeyi seviyorum.

Acı çekiyorsam özür dilerim!

EDIT - WHRoeder yazdığınız kodun "Bar" kısmını hala anlamıyorum - Bunun doğru olduğundan emin değilim?

 
DomGilberto : Ama gaz anahtarının ne olduğunu biliyorum... - bu kodlamaktan daha basit...

Ama ne olduğunu bilmeden araba kullanmaya mı çalışıyorsun? Bu aptalca olurdu.

"--" ve "!" Ne olduğunu bilmeden kodlamaya çalışıyorsunuz. vardır. Fark ne?

 

!= Doğru, eğer x y'ye eşit değilse - (DIR != 0) - Eğer DIR (0'dır) "0"a eşit değilse, Break operatörü kontrolü for operatörüne döndürür. Ve döngüyü yeniden başlatın.

-- Değişkenin değerinden 1 çıkarma. Yani "iBar--;" = iBar = 0, yani 1 = -1 çıkarılıyor mu?

Hey - Burada gerçekten deniyorum. Bazı insanların yaptığı kadar çabuk öğrenemediğim için üzgünüm (ve sence de böyle olmayı tercih etmez miydim! Bunu kendi başıma öğrenip, başkasına sormadan öğrenmeyi tercih ederim.) ' yardım edin!) ama elimden gelenin en iyisini yapmaya çalışıyorum. Dünyanın en parlak kıvılcımı olmayabilirim... O yüzden en azından bunun için beni bağışlayın...

 
DomGilberto :

!= Doğru, eğer x y'ye eşit değilse - (DIR != 0) - DIR (0'dır) "0"a eşit değilse, Break operatörü kontrolü for operatörüne geri döndürür. Ve döngüyü yeniden başlatın.

-- Değişkenin değerinden 1 çıkarma. Yani "iBar--;" = iBar = 0, yani 1 = -1 çıkarılıyor mu?

Hey - Burada gerçekten deniyorum. Bazı insanların yaptığı kadar çabuk öğrenemediğim için üzgünüm (ve sence de böyle olmayı tercih etmez miydim! Bunu kendi başıma öğrenip, başkasına sormadan öğrenmeyi tercih ederim.) ' yardım edin!) ama elimden gelenin en iyisini yapmaya çalışıyorum. Dünyanın en parlak kıvılcımı olmayabilirim... O yüzden en azından bunun için beni bağışlayın...


bu döngüde

 for ( int iBar = 0 ; iBar < Bar; iBar++){//....do some stuff and come back}

iBar, Bar kadar küçük olduğu sürece burada farklı değerlere sahiptir, 1 değeri daha yüksek olacaktır.

iBar--;

anlamına geliyor....

iBar = iBar - 1 ;
 
int DIR = 0 ;
for ( int iBar = 0 ; iBar < Bars ; iBar++)
   {
   double i1  = iMA ( NULL , 60 , 3 , 0 , 1 , 0 , 1 ); 
   double i2  = iMA ( NULL , 60 , 5 , 0 , 1 , 0 , 1 );
   double i3  = iMA ( NULL , 60 , 8 , 0 , 1 , 0 , 1 );
   double i4  = iMA ( NULL , 60 , 10 , 0 , 1 , 0 , 1 );  
   double i5  = iMA ( NULL , 60 , 12 , 0 , 1 , 0 , 1 );
   double i6  = iMA ( NULL , 60 , 15 , 0 , 1 , 0 , 1 );  
   double i7  = iMA ( NULL , 60 , 30 , 0 , 1 , 0 , 1 );
   double i8  = iMA ( NULL , 60 , 35 , 0 , 1 , 0 , 1 );
   double i9  = iMA ( NULL , 60 , 40 , 0 , 1 , 0 , 1 );
   double i10 = iMA ( NULL , 60 , 45 , 0 , 1 , 0 , 1 );
   double i11 = iMA ( NULL , 60 , 50 , 0 , 1 , 0 , 1 );
   double i12 = iMA ( NULL , 60 , 60 , 0 , 1 , 0 , 1 ); 
   double ema21 = iMA ( NULL , 60 , 21 , 0 , 1 , 0 , 1 );

   if (i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = - 1 ;
      triggerBarTime = Time[ 1 ];
       if (Low[ 1 ]<ema21)
      OrderEntry( 0 );
  else if (i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = + 1 ; // All fanning up.
      triggerBarTime1 = Time[ 1 ];
       if (High[ 1 ]>ema21)
      OrderEntry( 1 );
   
   if (DIR != 0 )
   { 
   iBar--; break ; 
   }       // Last one was cross.

Ah - Sanırım şimdi çalıştırdım - Bir süre Bar'a baktım ve sonra fark ettim :) - Kodlamaya çalıştığım şeyin ilk düşündüğümden biraz daha karmaşık olduğunu anlamaya başlıyorum. MA'ların açılıp kapanmasına ihtiyacım var (alış veya satış olmasına bağlı olarak). Havalandırıldıysa (uzun süre) Her zaman doğru sırada olmaları gerekmez - bu, ilk önce hepsinin ne zaman yığıldığını ve doğru sırayla yelpazelendiğini belirleme durumudur - bu noktadan itibaren tek istediğim 21 ema'yı kontrol etmek ve ardından yükseklerin üzerinde bir sipariş vermek için fiyat. Tabii ki bir oyun oynayacağım! Kimsenin bana kodu yazmasını beklemiyorum - sadece düşüncelerimi yüksek sesle yazıyorum.

Teşekkür ederim!

 
Girintilerinizi veya eksik parantezlerinizi düzeltin
Gönderilen kod
   if (i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && 
      i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = - 1 ;
      triggerBarTime = Time[ 1 ];
       if (Low[ 1 ]<ema21)
      OrderEntry( 0 );
   else if (i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && 
          i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = + 1 ; // All fanning up.
      triggerBarTime1 = Time[ 1 ];
       if (High[ 1 ]>ema21)
      OrderEntry( 1 );
düzgün girintili
   if (i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && 
      i7<i8 && i8<i9 && i9<i10 && i10<i11 && i11<i12) DIR = - 1 ;
   triggerBarTime = Time[ 1 ];
   if (Low[ 1 ]<ema21) OrderEntry( 0 );
   else if (i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && 
          i7>i8 && i8>i9 && i9>i10 && i10>i11 && i11>i12) DIR = + 1 ; // All fanning up.
   triggerBarTime1 = Time[ 1 ];
   if (High[ 1 ]>ema21)  OrderEntry( 1 );
uygun şekilde desteklenmiş
   if (i1<i2 && i2<i3 && i3<i4 && i4<i5 && i5<i6 && i6<i7 && i7<i8 && 
      i8<i9 && i9<i10 && i10<i11 && i11<i12){
      DIR = - 1 ;
      triggerBarTime = Time[ 1 ];
       if (Low[ 1 ]<ema21) OrderEntry( 0 );
   }
   else if (i1>i2 && i2>i3 && i3>i4 && i4>i5 && i5>i6 && i6>i7 && i7>i8 && 
           i8>i9 && i9>i10 && i10>i11 && i11>i12){
      DIR = + 1 ; // All fanning up.
      triggerBarTime1 = Time[ 1 ];
       if (High[ 1 ]>ema21)  OrderEntry( 1 );
   }