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

 

Hey millet!

Kodumla ilgili biraz yardım umuyordum - Şu anda bu lanet olası kısımda takılıp kaldım!


Aşağıdaki koda yazmaya çalıştığım süreç bu:

1) Tüm MA'lar "yavaşlıyor" ve fiyatın tüm hareketli ortalamaların üzerinde olması ve uzun bir potansiyele işaret etmesi için çarpılıyorsa.

2) Daha sonra, hareketli ortalamaların hareketli ortalamaların çaprazında "havalandırıldığı" tam çubuğu (Zaman kullanarak) bilmek istiyorum.

3) 1 ve 2 doğruysa, herhangi bir çubuğun geri gelmesini beklerim (uzun bir pozisyon olması durumunda) ve 21 EMA'ya dokunurum.

4) İlk Çubuk'tan (MA'nın çarpıp yelpazelendiği) şimdi 21 EMA'ya dokunan çubuğa kadar - Bekleyen bir emir istiyorum VEYA bu aralığın en yükseğinin (1 ve 3) YUKARIDA yer alan piyasa ticaretinde.

5) Herhangi bir noktada fiyat 60 EMA'nın altında KAPANIRsa, emri tetiklemeden ÖNCE - o zaman emir iptal edilmelidir.

Bu açıkçası tüm kod değil, ama bu benim saçımı çektiğim ana kısım. Lütfen kodu "<<<<<<<<<<<<<" ile kontrol edin. Bunlar benim kafamı karıştıran noktalar.

GERÇEKTEN birinin yardımıyla yapabilirdim - gerçekten çok memnun olurum!

Şimdiden çok teşekkürler!

 datetime          triggerBarTime;   <<<<< Global settings.
datetime          triggerBarTime1;  <<<<< Global settings.	



void CheckForMaTrade()
{

//+-----------------------------------------------------------------------------------------------------------------------+ 
     //Small and Big Fish on the H1 Time Frame.                                                                           |
//+-----------------------------------------------------------------------------------------------------------------------+              

   {
   double PreviousSmallFish1  =   iMA ( NULL , 60 , 3 , 0 , 1 , 0 , 2 ); 
   double CurrentSmallFish1   =   iMA ( NULL , 60 , 3 , 0 , 1 , 0 , 1 );
   double PreviousSmallFish2  =   iMA ( NULL , 60 , 5 , 0 , 1 , 0 , 2 );
   double CurrentSmallFish2   =   iMA ( NULL , 60 , 5 , 0 , 1 , 0 , 1 );
   double PreviousSmallFish3  =   iMA ( NULL , 60 , 8 , 0 , 1 , 0 , 2 );
   double CurrentSmallFish3   =   iMA ( NULL , 60 , 8 , 0 , 1 , 0 , 1 );
   double PreviousSmallFish4  =   iMA ( NULL , 60 , 10 , 0 , 1 , 0 , 2 );
   double CurrentSmallFish4   =   iMA ( NULL , 60 , 10 , 0 , 1 , 0 , 1 );  
   double PreviousSmallFish5  =   iMA ( NULL , 60 , 12 , 0 , 1 , 0 , 2 );
   double CurrentSmallFish5   =   iMA ( NULL , 60 , 12 , 0 , 1 , 0 , 1 );
   double PreviousSmallFish6  =   iMA ( NULL , 60 , 15 , 0 , 1 , 0 , 2 );
   double CurrentSmallFish6   =   iMA ( NULL , 60 , 15 , 0 , 1 , 0 , 1 );  
   
       double PreviousBigFish1  =   iMA ( NULL , 60 , 30 , 0 , 1 , 0 , 2 ); 
       double CurrentBigFish1   =   iMA ( NULL , 60 , 30 , 0 , 1 , 0 , 1 );
       double PreviousBigFish2  =   iMA ( NULL , 60 , 35 , 0 , 1 , 0 , 2 );
       double CurrentBigFish2   =   iMA ( NULL , 60 , 35 , 0 , 1 , 0 , 1 );
       double PreviousBigFish3  =   iMA ( NULL , 60 , 40 , 0 , 1 , 0 , 2 );
       double CurrentBigFish3   =   iMA ( NULL , 60 , 40 , 0 , 1 , 0 , 1 );
       double PreviousBigFish4  =   iMA ( NULL , 60 , 45 , 0 , 1 , 0 , 2 );
       double CurrentBigFish4   =   iMA ( NULL , 60 , 45 , 0 , 1 , 0 , 1 );
       double PreviousBigFish5  =   iMA ( NULL , 60 , 50 , 0 , 1 , 0 , 2 );
       double CurrentBigFish5   =   iMA ( NULL , 60 , 50 , 0 , 1 , 0 , 1 );
       double PreviousBigFish6  =   iMA ( NULL , 60 , 60 , 0 , 1 , 0 , 2 );
       double CurrentBigFish6   =   iMA ( NULL , 60 , 60 , 0 , 1 , 0 , 1 ); 
      
             if (PreviousBigFish1<CurrentBigFish2 && CurrentBigFish1>PreviousBigFish2)
               if (PreviousBigFish2<CurrentBigFish3 && CurrentBigFish2>PreviousBigFish3)
                   if (PreviousBigFish3<CurrentBigFish4 && CurrentBigFish3>PreviousBigFish4)
                     if (PreviousBigFish4<CurrentBigFish5 && CurrentBigFish4>PreviousBigFish5)
                         if (PreviousBigFish5<CurrentBigFish6 && CurrentBigFish5>PreviousBigFish6)  
                           
                           if (PreviousSmallFish1<CurrentSmallFish2 && CurrentSmallFish1>PreviousSmallFish2)
                         if (PreviousSmallFish2<CurrentSmallFish3 && CurrentSmallFish2>PreviousSmallFish3)
                     if (PreviousSmallFish3<CurrentSmallFish4 && CurrentSmallFish3>PreviousSmallFish4)
                   if (PreviousSmallFish4<CurrentSmallFish5 && CurrentSmallFish4>PreviousSmallFish5)
                 if (PreviousSmallFish5<CurrentSmallFish6 && CurrentSmallFish5>PreviousSmallFish6)triggerBarTime = Time[ 1 ];  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      
      
       double ema21 = iMA ( NULL , 60 , 21 , 0 , 1 , 0 , 1 ); 
       
        
         if (Low[ 1 ]<ema21)
         {
         
           OrderEntry( 0 ); // BUY 
            }     
      
      
                
     if (PreviousBigFish1>CurrentBigFish2 && CurrentBigFish1<PreviousBigFish2)
       if (PreviousBigFish2>CurrentBigFish3 && CurrentBigFish2<PreviousBigFish3)
         if (PreviousBigFish3>CurrentBigFish4 && CurrentBigFish3<PreviousBigFish4)
             if (PreviousBigFish4>CurrentBigFish5 && CurrentBigFish4<PreviousBigFish5)
               if (PreviousBigFish5>CurrentBigFish6 && CurrentBigFish5<PreviousBigFish6)
               
               if (PreviousSmallFish1>CurrentSmallFish2 && CurrentSmallFish1<PreviousSmallFish2)
             if (PreviousSmallFish2>CurrentSmallFish3 && CurrentSmallFish2<PreviousSmallFish3)
         if (PreviousSmallFish3>CurrentSmallFish4 && CurrentSmallFish3<PreviousSmallFish4)
       if (PreviousSmallFish4>CurrentSmallFish5 && CurrentSmallFish4<PreviousSmallFish5)
     if (PreviousSmallFish5>CurrentSmallFish6 && CurrentSmallFish5<PreviousSmallFish6)triggerBarTime = Time[ 1 ]; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   
     double ema21_2 = iMA ( NULL , 60 , 21 , 0 , 1 , 0 , 1 ); 
  
             if (High[ 1 ]>ema21_2)
            {
             
              OrderEntry( 1 ); // SELL
             }  
   
       }

}


//+------------------------------------------------------------------+  
//+------------------------------------------------------------------+
//| Order Enter Function                                             |
//+------------------------------------------------------------------+

void OrderEntry ( int direction)
{    
   double LotSize= 0 ;
   double Equity=AccountEquity();
   double RiskedAmount=Equity*RiskPercent* 0.01 ;
   int buyStopCandle = iLowest( NULL , 0 , 1 ,CandlesBack, 1 ); 
   int sellStopCandle = iHighest( NULL , 0 , 2 ,CandlesBack, 1 );
   
   double buyPrice = iHighest( Symbol (), 0 , MODE_HIGH, iBarShift( Symbol (), 0 , triggerBarTime, true ), 0 );    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
   double sellPrice = iLowest( Symbol (), 0 , MODE_LOW, iBarShift( Symbol (), 0 , triggerBarTime1, true ), 0 );   <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
   
   double buy_stop_price = iMA ( NULL , 60 , 60 , 0 , 1 , 0 , 1 )-PadAmount*pips; 
   double pips_to_bsl = Ask-buy_stop_price;         //double pips_to_bsl = Ask-buy_stop_price;   --- Old code
   double buy_takeprofit_price = Ask+pips_to_bsl*RewardRatio;   
   double sell_stop_price = iMA ( NULL , 60 , 60 , 0 , 1 , 0 , 1 )+PadAmount*pips; //- Greyed out, this is an old code line.
   double pips_to_ssl = sell_stop_price-Bid;     ////double pips_to_ssl = sell_stop_price-Bid;   --- Old code
   double sell_takeprofit_price = Bid-pips_to_ssl*RewardRatio;   
   
  
   if (direction== 0 ) //<< "0" pushes out a Buy direction
   {
       //double buyPrice = iHighest(Symbol(), 60, MODE_HIGH, iBarShift(Symbol(), 0, triggerBarTime, true), 0);//-PadAmount*pips; // new line
       int Buy_Price = buyPrice;
      
       double bsl=buy_stop_price;
       double btp=buy_takeprofit_price;
       //LotSize = (100/(0.00500/0.00010))/10
      LotSize = (RiskedAmount/(pips_to_bsl/pips))/ 10 ;
       if (OpenOrdersThisPair( Symbol ())== 0 ) //--- This means that it will not open a new order if there is one already open!If greyed out, it will take everything.
       int buyticket = OrderSend ( Symbol (),Buy_Price,LotSize,Ask, 3 , 0 , 0 , NULL ,MagicNumber, 0 ,Green); //ask
       if (buyticket> 0 )OrderModify(buyticket,OrderOpenPrice(),bsl,btp, 0 , CLR_NONE );
   }
            
   if (direction== 1 ) //<< "1" pushes out a Sell direction
   {
      
       //double sellPrice = iLowest(Symbol(), 60, MODE_LOW, iBarShift(Symbol(), 0, triggerBarTime1, true), 0);//+PadAmount*pips;   // new line.
       int Sell_Price = sellPrice;
      
       double ssl=sell_stop_price;
       double stp=sell_takeprofit_price; 
       //LotSize = (100/(0.00500/0.00010))/10;
      LotSize = (RiskedAmount/(pips_to_ssl/pips))/ 10 ;    
       if (OpenOrdersThisPair( Symbol ())== 0 )   //--- This means that it will not open a new order if there is one already open! If greyed out, it will take everything.
       int sellticket = OrderSend ( Symbol (),Sell_Price,LotSize,Bid, 3 ,ssl,stp, NULL ,MagicNumber, 0 ,Red); //bid
       if (sellticket> 0 )OrderModify(sellticket,OrderOpenPrice(),ssl,stp, 0 , CLR_NONE );
   }
   
}

return ( 0 );

 
DomGilberto :

Hey millet!

Bu açıkçası tüm kod değil, ama bu benim saçımı çektiğim ana kısım. Lütfen kodu "<<<<<<<<<<<<<" ile kontrol edin. Bunlar benim kafamı karıştıran noktalar.

Lütfen kullandığınız işlevlerin belgelerini okuyun. . . iHighest() bir fiyat döndürmez. . . bir int döndürür "Türlere bağlı olarak belirli bir süre boyunca maksimum değerin kaymasını döndürür."
 

Teşekkürler RaptorUK - Mümkün olan en nazik şekilde, bu bana hiçbir şeyi açıklamıyor mu? Meslekten olmayanların terimleriyle mi?

Bu, işlevlerin tanımlarını tekrar etmekten başka birinin gerçekten bana yardım edebileceği bir forum mu ("yardım" bölümünden 100'lerce kez okudum ...)

Ne de olsa, sorduğum şeyin (buradaki bazı konulara kıyasla!) birinin zamanı için ücret talep etmesini sağlamak için yeterli olduğunu hissetmiyorum...?

 

Meslekten olmayanların terimlerini çevirmek, bugün, bir kez, bu özel konuda size yardımcı olacaktır.. ve açıklayıcı için biraz zaman ayırın.

Tanımlardan hangilerini anlamadığınızı söylerseniz, belki bir dahaki sefere kendi problemlerinizi çözebilirsiniz ve bir süre sonra başkalarının problemlerini çözenlerden biri olabilirsiniz.

Sorunu kendiniz dener ve araştırırsanız, daha fazlasını da öğreneceksiniz. Örneğin, şunu deneyin:

 Alert (iHighest( Symbol (), 0 , MODE_HIGH, iBarShift( Symbol (), 0 , triggerBarTime, true ), 0 ));

ve işlev tarafından hangi değerin döndürüldüğünü göreceksiniz ... (Raptor'un dediği gibi, bu bir fiyat değil) ve muhtemelen işlevin tanımını daha kolay anlayacaksınız.

Bunun gibi şeyler, tahtadaki birinin kodunuzu test etmek ve kendiniz için nasıl yapacağınızı öğrenmeniz gereken aynı sorun giderme işlemlerini yapmak için zamanı olduğunu ummaktan daha fazla yardımcı olacaktır.

 

Ha? Kafam çok karıştı - Çok fazla yardım mı istiyorum?

Sonuçta, tüm EA'mı sıfırdan oluşturdum (ki bunu kendime öğrettim...) Sadece benden daha fazla bilgisi olan birinden rehberlik istiyorum... :s

 

" Bunun gibi şeyler, tahtadaki birinin kodunuzu test etmek ve kendi başınıza nasıl yapacağınızı öğrenmeniz gereken sorun giderme işlemlerini yapmak için zamanı olduğunu ummaktan daha fazla yardımcı olacaktır."

Ne oluyor... Bunu kimseden beklemiyordum!?

Gönderiniz duruma daha fazla ışık tuttu - Takdir edin.

Bu forum gerçekten çok komik... Kimseden ücretsiz yükleme yapmayı planlamıyordum! Sadece EMA'nın çizgisiyle kesişen çubuğu nasıl doğru bir şekilde tanımladığım konusunda biraz açıklama istedim...

Tanrım...

 

raptor'un cevabını okuduğumda, size yaptığınız sorunu tam olarak anlatıyor.

fiyatlar çift değişken olarak saklanır, örneğin 1.12345

iHighest işlevleri bir tamsayı (i nt ) döndürür, örneğin 1 veya 2 veya -100 .... açıkça bir fiyat değil.

Neyi başarmaya çalıştığınızı bilmiyorum ama iHighest işlevi muhtemelen kullanmak istediğiniz işlev değil.

Meta düzenleyicide, kodunuzdaki iHighest'e tıklarsanız, ardından F1'e basarsanız, bunu kendiniz keşfederdiniz...

Kafa karıştıran şeyin kaynağını bilmiyorum. int ve double değişkenleri arasındaki farkı bilmiyorsanız, bazı hayati temel bilgileri kaçırıyorsunuz, yani yürümeden önce koşmaya çalışıyorsunuz ve başka birinin sizi taşımasını istiyorsunuz :/

EDIT: Başka birine sormadan önce kendi sorun gidermenizi yapmanız gerektiğini beklemiyordunuz ?!?

 

Birden fazla hareketli ortalama aynı anda kesişmez .

Neden çift mesaj atıyorsun? Sorunuz daha önce cevaplandı .

Hepsinin uygun sırayla bulunduğ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.
}
 

int ve double arasındaki farkı anlıyorum ...

If ifadelerinden sonra, MA'ların aralıklı olduğu noktada kesişen çubuğu bulmak istiyorum. Kullanırsam düşündüm:

"triggerBarTime = Zaman[1];" - "If" ifadelerinden sonra, ilgilendiğim aralığın ilk çubuğunu kilitlemek için iBarShift ile birlikte triggerBarTime kullanılabilir mi?

Ardından, iHighest'i kullanmak, bu bilgiyi bir int'ye dönüştürmeme ve onu sipariş fonksiyonumda kullanmama izin verir mi? (Buy_Fiyat)?

 

int ve double arasındaki farkı anlayabilirsiniz, ancak çubuk numarası (int) ile fiyat (double) arasındaki farkı anlamıyorsunuz.

iHighest, tarih saatinizi bir çubuk numarasına (int.) dönüştürmenize izin verir, ancak OrderSend yalnızca bir fiyat alır (iki katı) 9'da bir emir açmanın bir anlamı yoktur.

 

Ah! Anladım!

Çok teşekkür ederim :) Gerçekten minnettarım!

Bana karşı sabırlı olduğun için teşekkürler - kimsenin benim için bir şey yapmasını bekleyecek şekilde karşılaşmak istemedim; Yardım konusunda bana biraz açıklama yapmak (her şeyde F1'e basmak benim için her zaman o kadar net olmuyor.) tek istediğim buydu.

Neden: