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

 
splxgf :
Versiyonunuz, yazarın versiyonuna eklenen bu iki satıra indirgenebilir ve şartlarda bazı değişikliklerle prensipte hızlandırılmalıdır.
Elbette??
 
MaxZ :
Elbette??

Özünde, mumları UPPfiyat / DÜŞÜKfiyat aralığına girmeyen kontrollerden ve hesaplamalardan hariç tutma teklifiniz ... bu iki satırla hariç tutulur. Döngüden çıkış yoksa fiyat ihtiyacımız olan aralıktadır ve standart kontroller yaparız. Kodunuz yalnızca sonuçların zararına olacak şekilde daha hızlı çalışabilir, çünkü INS ile çalışmanın mantığı, bu değişkenin değerini önceki yinelemeden kullanmak çok akıllıcadır, bu saçmalık.

 
splxgf :

Özünde, mumları UPPfiyat / DÜŞÜKfiyat aralığına girmeyen kontrollerden ve hesaplamalardan hariç tutma teklifiniz ... bu iki satırla hariç tutulur. Döngüden çıkış yoksa fiyat ihtiyacımız olan aralıktadır ve standart kontroller yaparız. Kodunuz yalnızca sonuçların zararına olacak şekilde daha hızlı çalışabilir, çünkü INS ile çalışmanın mantığı, bu değişkenin değerini önceki yinelemeden kullanmak çok akıllıcadır, bu saçmalık.

Çok emin! :))))


Daha önce kodu sağladınız:

splxgf :
        if (LOWprice > iHigh ( NULL , 60 ,i)) continue;
         if (UPPprice < iLow ( NULL , 60 ,i)) continue;

Fiyat Düşük'ün altındaysa, fiyatın Yüksek'in üzerinde olup olmadığını neden kontrol etmeliyiz? Sürümünüzde bu koşul hariç tutulmaz. Önerilen versiyonumda:

         if (UPP)
            ... // не выполнится
         if (LOW)
             if (LOWprice < iLow ( NULL , 60 ,i))
               continue ;
             else
            ..

hariç tutulmuştur.

Kodumun en uygun olmayabileceğini inkar etmiyorum.

Ama sizce kaç kat daha hızlı:

         if (UPP)

çalışmak

         if (LOWprice > iHigh ( NULL , 60 ,i))

?

Nitekim özünde:

UPP = LOWprice > iHigh ( NULL , 60 , i);

Bunu sadece ben kesin olarak biliyorum (teklif mevcut tarihsel çubuğun içinde olduğu durumlar hariç) ve siz hesaplarsınız...

 
abolk :


Evet.

aynı o kadar saptırmak gerekiyor ki bir kodun üç net satırının koda dönüşmesi, anlaşılması zor.

iLow, iHigh kontrolünü bölme fikriniz varsa, hemen bölebilirsiniz:

ve hiçbir şey yapma

Ve sapkın hantal kodun bazen basit bir üç satırdan daha hızlı çalışabileceğini düşünmediniz mi? :)))
 
 INS = True;
   
   for ( int i= 1 ; i<= 6000 ; i++)
   {
       if (INS)
      {
         if (LOWprice > iHigh ( NULL , 60 ,i))
         {
            INS = False;
            UPP = True;
            LOW = False;
             continue ;

Bu kod parçasını düşünün

INS=Doğru;

döngü gitti

if (INS) normal uçuş

if (LOWprice...) örneğin, koşul karşılanır, ancak burada opak olduğu ortaya çıkar çünkü INS=False alırız ve bir sonraki yinelemeye geçeriz

o zaman (yanlış) ve yelken açtıysa, bu başka bir bar olduğu için, hangisinin olduğunu merak ediyor ...

Koduma gelince, fiyatı kontrol etmiyorum, barın koridora girişi +300/-300 pip'ten cari fiyat ise, o zaman hesaplanmalıdır. İlk iki kontrol, örneğin gereksiz çubukların %90'ını ortadan kaldırdığından, diğer tüm optimizasyonlar çok kritik değildir.

 
splxgf :

o zaman (yanlış) ve yelken açtıysa, bu başka bir bar olduğu için, hangisinin olduğunu merak ediyor ...

Yelken açmadılar, ancak daha ileri gittiler { ... }.
 

ve sonra gerçekten yüzdüler ...

Bu nedenle, her koşuldan sonra başka bir if (LOWprice > iHigh (NULL,60,i)) varsa, boolean değişkenlerin bir ivme vereceği kabul edilir, yani. sadece kenarda aynı yumurtalar, artı bir koşul ve bir sürü görev...

 

Hata!

Burada tartışma bir şaka değil alevlendi.

Bunu şimdiye kadar yaptınız:

 extern int Distance = 3000 ;
 int CountH,NewCountH,CountL,NewCountL,CountB,NewCountB;
 
 double ResistH,ResistL,ResistB;
 
//======================================================================
int start(){


   double bid = Bid;
   double UPPprice = bid+Distance* Point ;
   double LOWprice = bid-Distance* Point ;
      NewCountH= 0 ;
      NewCountL= 0 ;
      NewCountB= 0 ;
      ResistH= 0 ;
      ResistL= 0 ;
      ResistB= 0 ;
  
   while (LOWprice<UPPprice)
    {
      CountH= 0 ;
      CountL= 0 ;
       for ( int i= 1 ; i<= 6000 ; i++){  
           if ( iHigh ( NULL , 60 ,i)>LOWprice) 
           if (LOWprice> iLow ( NULL , 60 ,i)) 
           if (LOWprice> bid) CountH++; else CountL++;
       }  
       if (CountH>NewCountH){NewCountH=CountH;ResistH=LOWprice;} 
       if (CountL>NewCountL){NewCountL=CountL;ResistL=LOWprice;}   
      LOWprice=LOWprice+ 25 * Point ;
    }
      CountB= 0 ;
       for (i= 1 ; i<= 6000 ; i++){  
           if ( iHigh ( NULL , 60 ,i)>=bid) if (bid>= iLow ( NULL , 60 ,i)) CountB++;
       }
       if (CountB>NewCountB){NewCountB=CountB;ResistB=bid;}  
 
     
   
     Comment ( "\n" , 
       "\n" ,     
//      "\n", "     Spread                                ", MarketInfo(Symbol(), MODE_SPREAD),  
       "\n" , "     Distance                             " , Distance, 
       "\n" , "     CountH                               " , NewCountH, 
       "\n" , "     CountB                               " , NewCountB, 
       "\n" , "     CountL                                " , NewCountL, 
       "\n" , "-------------------------------------------------- " ,     
       "\n" );
      

     if ( ObjectFind ( "RH" ) == - 1 ) {
       ObjectCreate ( "RH" , OBJ_HLINE , 0 , 0 , ResistH);
       ObjectSet ( "RH" , OBJPROP_COLOR , Magenta );
       ObjectSet ( "RH" , OBJPROP_STYLE , STYLE_DOT );
     } else ObjectMove ( "RH" , 0 , iTime ( NULL , 0 , 0 ), ResistH);

     string text= DoubleToStr (NewCountH, 0 );
     ObjectDelete ( "RHtxt" ); 
     if ( ObjectFind ( "RHtxt" ) == - 1 ) {
       ObjectCreate ( "RHtxt" , OBJ_TEXT , 0 , 0 , 0 );
       ObjectSetText ( "RHtxt" , text , 8 , "Arial" , Aqua );
       ObjectMove ( "RHtxt" , 0 , iTime ( NULL , 0 , 0 ), ResistH);
      } else ObjectMove ( "RHtxt" , 0 , iTime ( NULL , 0 , 0 ), ResistH);
      
     string text3= DoubleToStr (NewCountB, 0 );
     ObjectDelete ( "RBtxt" ); 
     if ( ObjectFind ( "RBtxt" ) == - 1 ) {
       ObjectCreate ( "RBtxt" , OBJ_TEXT , 0 , 0 , 0 );
       ObjectSetText ( "RBtxt" , text3 , 8 , "Arial" , Aqua );
       ObjectMove ( "RBtxt" , 0 , iTime ( NULL , 60 , 0 ), ResistB);
      } else ObjectMove ( "RBtxt" , 0 , iTime ( NULL , 60 , 0 ), ResistB);

     if ( ObjectFind ( "RL" ) == - 1 ) {
       ObjectCreate ( "RL" , OBJ_HLINE , 0 , 0 , ResistL);
       ObjectSet ( "RL" , OBJPROP_COLOR , Magenta );
       ObjectSet ( "RL" , OBJPROP_STYLE , STYLE_DOT );
     } else ObjectMove ( "RL" , 0 , iTime ( NULL , 0 , 0 ), ResistL);
     
     string text2= DoubleToStr (NewCountL, 0 );
     ObjectDelete ( "RLtxt" );
     if ( ObjectFind ( "RLtxt" ) == - 1 ) {
       ObjectCreate ( "RLtxt" , OBJ_TEXT , 0 , 0 , 0 );
       ObjectSetText ( "RLtxt" , text2 , 8 , "Arial" , Aqua );
       ObjectMove ( "RLtxt" , 0 , iTime ( NULL , 0 , 0 ), ResistL);
     } else ObjectMove ( "RLtxt" , 0 , iTime ( NULL , 0 , 0 ), ResistL);

 return ( 0 );}             //====== THE END ======================

Fiyat hareketini izlemek çok ilginç. Daima en az direnç yönünde ilerleyin.

Gelecekteki hareketini bile tahmin edebilirsiniz. İzlemek.

Fiyat, su gibi nehir yatağı boyunca akar.

Herkese teşekkürler!

 

Lütfen bana en yüksek değere sahip çubuğun numarasını nasıl bulacağımı söyleyin.


Search_High=MathMax( Yüksek[i],Yüksek[1])

 
001 :

Lütfen bana en yüksek değere sahip çubuğun numarasını nasıl bulacağımı söyleyin.


Search_High=MathMax( Yüksek[i],Yüksek[1])

https://docs.mql4.com/ru/array/ArrayMaximum üzerinden gidebilirsiniz.

Yüksek dizi tarafından.