Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 441

 

Lütfen bana neyi yanlış yaptığımı söyle!?

Sıfır çubuğunu hesaba katmadan - fiyatın MA'yı en son geçtiği zamandan beri kaç çubuk geçtiğini hesaplamak gerekir.

   if(Bars>1400)
     {
      int Stop;
      double MATcycle;
      for(int i=0;i!=1000 || Stop!=1; i++)
        {
         MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i+1);
         if(MATcycle<High[i+1] && MATcycle>Low[i+1])
           {
            Stop=1;
            Print("MATcycle=",MATcycle," i=",i);
           }
         else return (0);
        }

 
-Aleks- :

Lütfen bana neyi yanlış yaptığımı söyle!?

Sıfır çubuğunu hesaba katmadan - fiyatın MA'yı en son geçtiği zamandan beri kaç çubuk geçtiğini hesaplamak gerekir.

   if(Bars>1400)
     {
      int Stop;
      double MATcycle;
      for(int i=0;i<1000 || Stop==1; i++)
        {
         MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i+1);
         if(MATcycle<High[i+1] && MATcycle>Low[i+1])
           {
            Stop=1;
            Print("MATcycle=",MATcycle," i=",i);
           }
         else return (0);
        }

Anladığım kadarıyla kesişimi tanımlayıp değeri stop=1 olarak ayarladıktan sonra döngü hemen çıkıyor. O zaman daha ileri gitmeniz ve kavşağın meydana geldiği mumun numarasını hatırlamanız gerekir. Onlar.

Kendiniz yazmak daha kolay:

 for ( int i = 1 ; i < 1000 ; i++ )
{
 iMaValue = ...;   // Значение МА на i свече
 if ( iMaValue < High[ i ] && iMaValue > low[ i ] )
 {
  num = i;   // Запоминаем номер свечи, на котором произошло пересечение
   break ;     // Выходим из цикла
 }
}

Mum sayısını belirleyen sendin. Sayı = 2 ise ve mevcut olanı dikkate almıyorsanız, kesişimden bu yana bir mum çubuğu oluşmuştur (iyi veya istediğiniz gibi yorumlayın).

 
Tapochun :

Anladığım kadarıyla kesişimi tanımlayıp değeri stop=1 olarak ayarladıktan sonra döngü hemen çıkıyor. O zaman daha ileri gitmeniz ve kavşağın meydana geldiği mumun numarasını hatırlamanız gerekir. Onlar.

Kendin yazmak daha kolay:

Mum sayısını belirleyen sendin. Sayı = 2 ise ve mevcut olanı hesaba katmazsak, kesişimden bu yana bir mum çubuğu oluşmuştur (peki, ya da istediğiniz gibi yorumlayın).

teşekkürler bende öyle yaptım


int Stop=0;
   if(Bars>1400)
     {
     
      double MATcycle;
      for(int i=1;(i!=1000 || Stop==0); i++)
        {
         MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i);
         if(MATcycle<=High[i] && MATcycle>=Low[i])
           {
            Print("MATcycle=",MATcycle," i=",i);
            Stop=i;
            break;
           }
        }
     }

 
alph :
Lütfen söyle bana, test cihazının böyle bir göstergesi hayatta gerçek mi? Ve 3000 $ depo ile yıl için iyi mi yoksa kötü bir sonuç mu?
Cevap basit: Bir EA'yı test ediyorsanız, bir test cihazının gerçek hayattaki performansı GERÇEK DEĞİLDİR. Strateji test cihazı , tüccarlar tarafından ATS'nin performansını kontrol etmek veya çevrimiçi olarak manuel stratejileri test etmek için kullanılır.
 
-Aleks- :

teşekkürler bende öyle yaptım


int Stop=0;
   if(Bars>1400)
     {
     
      double MATcycle;
      for(int i=1;(i!=1000 || Stop==0); i++)
        {
         MATcycle=iMA(Symbol(),TFT,pMAT,shiftMAT,typeMAT,priceMAT,i);
         if(MATcycle<=High[i] && MATcycle>=Low[i])
           {
            Print("MATcycle=",MATcycle," i=",i);
            Stop=i;
            break;
           }
        }
     }

Böyle yazmamalısın çünkü son 1000 çubuk için kesişme olmadıysa, ilk olarak, döngü daha ileri gidecektir, ikinci olarak, döngü/diğer hatalar mümkündür, çünkü hikaye biterse ve kesişme olmazsa döngüden çıkış olmaz çünkü Dur = 0. Yukarıda belirttiğim gibi yazmak daha iyidir.

 
Tapochun :

Böyle yazmamalısın çünkü son 1000 çubuk için kesişme olmadıysa, ilk olarak, döngü daha ileri gidecektir, ikinci olarak, döngü/diğer hatalar mümkündür, çünkü hikaye biterse ve kesişme olmazsa döngüden çıkış olmaz çünkü Dur = 0. Yukarıda belirttiğim gibi yazmak daha iyidir.

Ancak "veya" işareti çalışmıyor - duruma göre, arama 1000 bar olacak veya istenen sonuç bulunur bulunmaz sona erecek. Yoksa istenen sonuç bulunursa 1000'e ulaşmadan sona erecek mi - MA fiyatını geçmek?
 
-Aleks- :
Ancak "veya" işareti çalışmıyor - duruma göre, arama 1000 bar olacak veya istenen sonuç bulunur bulunmaz sona erecek. Yoksa istenen sonuç bulunursa 1000'e ulaşmadan sona erecek mi - MA fiyatını geçmek?
|| parantez içindeki koşullardan en az biri doğruysa, o zaman döngü tekrarlanacaktır, bu nedenle, i >= 1000, ancak dur = 0 olduğunda bile, döngü devam edecek, i artmaya devam edecek, bu da yol açacaktır. yanlış MA değerlerine (tarihin ötesine geçilmesi durumunda). Ve istenen sonucu bulurken tamamlanması için , operatör molası sorumludur;
 
Tapochun :
|| parantez içindeki koşullardan en az biri doğruysa, o zaman döngü tekrarlanacaktır, bu nedenle, i >= 1000, ancak dur = 0 olduğunda bile, döngü devam edecek, i artmaya devam edecek, bu da yol açacaktır. yanlış MA değerlerine (tarihin ötesine geçilmesi durumunda). Ve istenen sonucu bulurken tamamlanması için , operatör molası sorumludur;
Anladım, açıklama için teşekkürler! Koşullardan birinin doğru olmayacağını ve sonra döngünün duracağını düşündüm...
 

Merhaba! 2015.09.19_02:13 Moskova saati. ArrayResize() işlevinde, her durumda derleyici yazar

dizinin boyutunun tersi -- virgül bekleniyor, en azından int yazın, en azından değil. Ve eğer int yazmazsanız, o zaman şunu yazar: "-

tipsiz beyan. Ve & bağlantısını ve köşeli parantezleri kaldırdı - yardımcı oldu!
Uyarılar: Normal yazıldığında, derleyici şunu yazdı: tanımlayıcı gizler

küresel düzeyde duyuru. Ve küresel düzeyde tanımlayıcı bildirimini kaldırdığımda,

yaz: hata, bildirilmemiş tanımlayıcı. Ve High[] ve Low[] dizilerini HighP[] ve LowP[] olarak değiştirdim. Değil

yardım etti. Derleyici aynı şeyi yazar. 02:27 Moskova saati. Bir ekran görüntüsü dosyası ekliyorum.

Dosyalar:
 
Николай Никитюк :

Merhaba! 2015.09.19_02:13 Moskova saati. ArrayResize() işlevinde, her durumda derleyici yazar

dizinin boyutunun tersi -- virgül bekleniyor, en azından int yazın, en azından değil. Ve eğer int yazmazsanız, o zaman şunu yazar: "-

tipsiz beyan. Ve & bağlantısını ve köşeli parantezleri kaldırdı - yardımcı oldu!
Uyarılar: normal yazıldığında, derleyici şunu yazdı: tanımlayıcı gizler

küresel düzeyde deklarasyon Ve küresel düzeyde tanımlayıcı bildirimini kaldırdığımda,

yaz: hata, bildirilmemiş tanımlayıcı. Ve High[] ve Low[] dizilerini HighP[] ve LowP[] olarak değiştirdim. Değil

yardım etti. Derleyici aynı şeyi yazar. 02:27 Moskova saati. Bir ekran görüntüsü dosyası ekliyorum.

  1. Resimlerin şu şekilde eklenmesi gerekir: Forum: resim nasıl eklenir
  2. Size tavsiye edilenleri hiç okumuyor musunuz?

    Ticaret, otomatik ticaret sistemleri ve ticaret stratejilerinin test edilmesi hakkında forum

    Yeni Başlayanlardan Sorular

    Karputov Vladimir , 2015.09.17 18:46

    1. ArrayResize öğesinin yanlış yazımı. Bunun gibi olması gerekiyor:
       //--- устанавливаю размеры массивов с запасом (reserve)
      ArrayResize (mrate, 16 , 9 );
      ArrayResize (maVal, 16 , 9 );
      ArrayResize (fVal, 3 , 2 );
      ArrayResize (zVal, 3 );
    2. Ve bir dizi için zaman serisi bayrağını ayarlamak şöyle görünecektir:
       //--- массив максимальных цен баров
      ArraySetAsSeries (High, true );
      //---  
      ArraySetAsSeries (Low, true );