MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 242

 
Youri Lazurenko :

Görünüşte basit bir sorunu çözemiyorum. Grafikte bir yerde MA'nın bir geçişi vardı. Kavşaktan sonra barı buluyoruz. Bu çubuktan mevcut olana kadar olan çubukların sayısı nasıl sayılır?

Çubuk numarası. Değil?
 
Youri Lazurenko :

Görünüşte basit bir sorunu çözemiyorum. Grafikte bir yerde MA'nın bir geçişi vardı. Kavşaktan sonra barı buluyoruz. Bu çubuktan mevcut olana kadar olan çubukların sayısı nasıl sayılır?


Çalışıyor gibi görünüyor (en azından yorum ekranda doğru olanı gösteriyor). " Çubuk sayısı " sayesinde bir çözüm bulmuş gibi görünüyor. Gerekli çubuğun tarih saatini belirlemek için iTime işlevini kullandım. Anahat şöyle görünür:

geçersiz OnTick()

{

int nBarsUp, nBarsDn;

datetime date_dn = iTime(NULL, 0, IntersectionDN());

datetime date_up = iTime(NULL, 0, IntersectionUp());

tarihsaat tarih_1 = iTime(NULL, 0, 1);

nBarsUp = Çubuklar(Symbol(), 0, date_up, date_1);

nBarsDn = Çubuklar(Symbol(), 0, date_dn, date_1);

Comment("Uzun çubuk sayısı: " + nBarsUp + "\n"+

"Kısa çubuk sayısı: " + nBarsDn);

}

//+------------------------------------------- --------------------+

int KavşakDN()

{

for(int i = 0; i < 36; i++)

{

if(iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i) > iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i)

&& iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i-1) < iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i-1))

dönüş(i-1);

}

dönüş(-1);

}

int IntersectionUp()

{

for(int i = 0; i < 36; i++)

{

if(iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i) < iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i)

&& iMA(Symbol(), 0, 5, 0, MODE_EMA, PRICE_CLOSE, i-1) > iMA(Symbol(), 0, 21, 0, MODE_EMA, PRICE_CLOSE, i-1))

dönüş(i-1);

}

dönüş(-1);

}

 
Youri Lazurenko :

Çalışıyor gibi görünüyor (en azından yorum ekranda doğru olanı gösteriyor). " Çubuk sayısı " sayesinde bir çözüm bulmuş gibi görünüyor. Gerekli çubuğun tarih saatini belirlemek için iTime işlevini kullandım. Anahat şöyle görünür:

 void OnTick ()

{
   int nBarsUp, nBarsDn;
   datetime date_dn = iTime ( NULL , 0 , IntersectionDN());
   datetime date_up = iTime ( NULL , 0 , IntersectionUp());
   datetime date_1  = iTime ( NULL , 0 , 1 );
  
   nBarsUp = Bars ( Symbol (), 0 , date_up, date_1);
   nBarsDn = Bars ( Symbol (), 0 , date_dn, date_1); 
   
   Comment ( "Количество длинных баров: " + nBarsUp + "\n" +
           "Количество коротких баров: " + nBarsDn);     
}

//+------------------------------------------------------------------+

int IntersectionDN()

{
   for ( int i = 0 ; i < 36 ; i++)
   {
      if ( iMA ( Symbol (), 0 , 5 , 0 , MODE_EMA , PRICE_CLOSE , i) > iMA ( Symbol (), 0 , 21 , 0 , MODE_EMA , PRICE_CLOSE , i)
         && iMA ( Symbol (), 0 , 5 , 0 , MODE_EMA , PRICE_CLOSE , i- 1 ) < iMA ( Symbol (), 0 , 21 , 0 , MODE_EMA , PRICE_CLOSE , i- 1 ))
         return (i- 1 );
   }  
   return (- 1 );
}

int IntersectionUp()
{
   for ( int i = 0 ; i < 36 ; i++)
   {
      if ( iMA ( Symbol (), 0 , 5 , 0 , MODE_EMA , PRICE_CLOSE , i) < iMA ( Symbol (), 0 , 21 , 0 , MODE_EMA , PRICE_CLOSE , i)
         && iMA ( Symbol (), 0 , 5 , 0 , MODE_EMA , PRICE_CLOSE , i- 1 ) > iMA ( Symbol (), 0 , 21 , 0 , MODE_EMA , PRICE_CLOSE , i- 1 ))
         return (i- 1 );
   } 
   return (- 1 );  

}

Döngüde bir kavşak arıyorsunuz. Ve sıfır bardan tarihin derinliklerine. Böylece IntersectionXX() işlevi size çubuk numarasını döndürür.

Bütün bunlar ne için?

 int nBarsUp, nBarsDn;
   datetime date_dn = iTime ( NULL , 0 , IntersectionDN());
   datetime date_up = iTime ( NULL , 0 , IntersectionUp());
   datetime date_1  = iTime ( NULL , 0 , 1 );
  
   nBarsUp = Bars ( Symbol (), 0 , date_up, date_1);
   nBarsDn = Bars ( Symbol (), 0 , date_dn, date_1); 
 
Artyom Trishkin :

Döngüde bir kavşak arıyorsunuz. Ve sıfır bardan tarihin derinliklerine. Böylece IntersectionXX() işlevi size çubuk numarasını döndürür.

Bütün bunlar ne için?


Bar numarası, evet. Ama çubukların sayısını bilmem gerekiyor - bundan tarihin gerisindeki bazı çubuklardan 0'a kadar. Kısacası, çubuğun MA'dan ayrılma açısına ihtiyacım var. Ama hesaplamak bana göre mümkün olmadığı için (dikey olarak fiyat, yatay olarak birbirinden belli bir mesafeye yerleştirilen çubuklar uyumsuz değerlerdir). Bir zamanlar forumda bir katsayı getirme önerisi vardı - fiyat farkının çubuk sayısına bölünmesi. Fikir bana sağlam geliyor. Onu hayata geçirmek istiyorum ama çaydanlığın kendisinden beri bir şeyler bulmaya ve deneme yanılma yoluyla kendim denemeye çalışıyorum.

PS Metne MQL4 dilinde kod nasıl eklenir (sizinki gibi, benim gibi değil)?
 

Kimse böyle bir problemle nasıl başa çıkılacağını sormayacak mı?


TF'yi değiştirdikten sonra panel bükülüyor

 
Youri Lazurenko :

Bar numarası, evet. Ama çubukların sayısını bilmem gerekiyor - bundan tarihin gerisindeki bazı çubuklardan 0'a kadar. Kısacası, çubuğun MA'dan ayrılma açısına ihtiyacım var. Ama hesaplamak bana göre mümkün olmadığı için (dikey olarak fiyat, yatay olarak birbirinden belli bir mesafeye yerleştirilen çubuklar uyumsuz değerlerdir). Bir zamanlar forumda bir katsayı getirme önerisi vardı - fiyat farkının çubuk sayısına bölünmesi. Fikir bana sağlam geliyor. Onu hayata geçirmek istiyorum ama çaydanlığın kendisinden beri bir şeyler bulmaya ve deneme yanılma yoluyla kendim denemeye çalışıyorum.

PS Metne MQL4 dilinde kod nasıl eklenir (sizinki gibi, benim gibi değil)?
Eğer bu onuncu çubuksa, onuncu ile sıfır arasındaki farkı nasıl biliyorsunuz? 10-0=10
Ve neden çıkarmanız gerekiyor?

 

Merhaba! İki eksi s x sayı q ve w yanlış bir şekilde karşılaştırılır, eşit olduklarında if operatörü birinin diğerinden büyük olduğunu düşünür.Hata nedir? q = -0.0002 ve w de -0.0002 olduğunda, res12=yanlış, neden?

 

Merhaba! İki eksi s x sayı q ve w yanlış bir şekilde karşılaştırılır, eşit olduklarında if operatörü birinin diğerinden büyük olduğunu düşünür.Hata nedir? q = -0.0002 ve w de -0.0002 olduğunda, res12=yanlış, neden?

 static bool res12= true ;

start()
{   

double SPREAD= MarketInfo (Symb, MODE_SPREAD ); // Спред

   double q= High [ 0 ]- 3.0 * Point - High [ 1 ];
   double w=-SPREAD* Point ;
      
   if (New_Bar== true &&ticket1<= 0 )
     {
       if (q>w)
       {
        res12= false ; 
         Alert ( "res12=false" );
         Alert (q);
         Alert (w);
       }
     }
       if (New_Bar== true &&ticket1<= 0 )
     {
         if (q<=w)
        {
         res12= true ;
         Alert ( "res12=true" );
         Alert (q);
         Alert (w);
        }
      }





}
 
Jenya77769 :

Merhaba! İki eksi s x sayı q ve w yanlış bir şekilde karşılaştırılır, eşit olduklarında if operatörü birinin diğerinden büyük olduğunu düşünür.Hata nedir? q = -0.0002 ve w de -0.0002 olduğunda, res12=yanlış, neden?


Bana öyle geliyor ki her şeyi normalleştirmek gerekiyor, normalleşme olmadan çift birbiriyle karşılaştırılamaz gibi görünüyor.

NormalizeDouble(q<=w) ise
 
Vyacheslav Kornev :

Bana öyle geliyor ki her şeyin normalleştirilmesi gerekiyor, normalleşme olmadan çift birbiriyle karşılaştırılamaz gibi görünüyor.


teşekkürler, işe yaradı, sadece q ve w'yi ayrı ayrı normalleştirdim!

 if ( NormalizeDouble (q, 4 )> NormalizeDouble (q, 4 ))