Kodlama yardımı - sayfa 726

 

Merhaba Mladen,

Bunu MT5'te kodlamaya çalışıyorum, ancak doğru uygulamayı kullanmadığımı düşünüyorum.

benim fikrim daha fazla gösterge kullanmak, lütfen bana bir ışık verin... ;-)

I need help to make this modular, because I will work with more indicators (6 to 8), 
this is a sample to understand I'm trying to do..

in this sample:
I put only 3 indicadors.

//global variables
bool m_buy = true;
bool m_sell = true;
enum Signal{
   IN_OUT=0,  //in & out
   IN=1,      //in
   OUT=2,     //out
};

I have a EA with indicators that I want to mix and optimize it in BackTest.

//some sample data for signal for In/Out states only for exemplification
iT_InOut = IN_OUT;  //Itrend usage => In & Out
RSI_InOut = IN_;     //RSI usage =>only IN 
MFI_InOut = OUT_;     //MFI usage =>only OUT
//

//this is the complete sequence IF I USE all signals in+out
//only to show the completly sequence (I will not use it)
m_buy=(m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0] && m_rsi0[0]>m_rsi1[0] && m_mfi0[0]>m_mfi1[0]);
// The green is growing and more than red, RSI is growing, MFI is growing
m_sell=(m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0] && m_rsi0[0]<m_rsi1[0] && m_mfi0[0]<m_mfi1[0]);
// The green falls and less than red, RSI falls, MFI falls


//now the skeleton that I'm trying to make work (in future I will use much more indicators)
               
              if(!PositionSelect(Symbol()))   ///No opened it's first entrance
                 {              
                 
                 if (!iT_InOut==OUT_) //Itrend (only options with IN)
                     {
                     m_buy= (m_buy  && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
                     m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
                     }
                  
                 if (!RSI_InOut==OUT_) //RSI (only options with IN)
                     {
                     m_buy =(m_buy  && m_rsi0[0]>m_rsi1[0]);
                     m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
                     }                
                
                 if (!MFI_InOut==OUT_) //MFI (only options with IN)
                     {
                     m_buy =(m_buy  && m_mfi0[0]>m_mfi1[0]);
                     m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
                     }                 
                  }
                 
                 ///We have opened order it's EXIT
                 else
                 {
                 //Itrend (only options with EXIT)
                 if (!iT_InOut==IN_)
                     {
                     m_buy =(m_buy  && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
                     m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
                     }
                 //RSI (only options with EXIT)
                 if (!RSI_InOut==IN_)
                     {
                     m_buy =(m_buy  && m_rsi0[0]>m_rsi1[0]);
                     m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
                     }                     
                 //MFI (only options with EXIT)
                 if (!MFI_InOut==IN_)
                     {
                     m_buy =(m_buy  && m_mfi0[0]>m_mfi1[0]);
                     m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
                     }
                 }
 
baraozemo :

Merhaba Mladen,

Bunu MT5'te kodlamaya çalışıyorum, ancak doğru uygulamayı kullanmadığımı düşünüyorum.

benim fikrim daha fazla gösterge kullanmak, lütfen bana bir ışık verin... ;-)

I need help to make this modular, because I will work with more indicators (6 to 8), 
this is a sample to understand I'm trying to do..

in this sample:
I put only 3 indicadors.

//global variables
bool m_buy = true;
bool m_sell = true;
enum Signal{
   IN_OUT=0,  //in & out
   IN=1,      //in
   OUT=2,     //out
};

I have a EA with indicators that I want to mix and optimize it in BackTest.

//some sample data for signal for In/Out states only for exemplification
iT_InOut = IN_OUT;  //Itrend usage => In & Out
RSI_InOut = IN_;     //RSI usage =>only IN 
MFI_InOut = OUT_;     //MFI usage =>only OUT
//

//this is the complete sequence IF I USE all signals in+out
//only to show the completly sequence (I will not use it)
m_buy=(m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0] && m_rsi0[0]>m_rsi1[0] && m_mfi0[0]>m_mfi1[0]);
// The green is growing and more than red, RSI is growing, MFI is growing
m_sell=(m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0] && m_rsi0[0]<m_rsi1[0] && m_mfi0[0]<m_mfi1[0]);
// The green falls and less than red, RSI falls, MFI falls


//now the skeleton that I'm trying to make work (in future I will use much more indicators)
               
              if(!PositionSelect(Symbol()))   ///No opened it's first entrance
                 {              
                 
                 if (!iT_InOut==OUT_) //Itrend (only options with IN)
                     {
                     m_buy= (m_buy  && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
                     m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
                     }
                  
                 if (!RSI_InOut==OUT_) //RSI (only options with IN)
                     {
                     m_buy =(m_buy  && m_rsi0[0]>m_rsi1[0]);
                     m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
                     }                
                
                 if (!MFI_InOut==OUT_) //MFI (only options with IN)
                     {
                     m_buy =(m_buy  && m_mfi0[0]>m_mfi1[0]);
                     m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
                     }                 
                  }
                 
                 ///We have opened order it's EXIT
                 else
                 {
                 //Itrend (only options with EXIT)
                 if (!iT_InOut==IN_)
                     {
                     m_buy =(m_buy  && m_it00[0]>m_it10[0] && m_it00[0]>m_it01[0]);
                     m_sell=(m_sell && m_it00[0]<m_it10[0] && m_it00[0]<m_it01[0]);
                     }
                 //RSI (only options with EXIT)
                 if (!RSI_InOut==IN_)
                     {
                     m_buy =(m_buy  && m_rsi0[0]>m_rsi1[0]);
                     m_sell=(m_sell && m_rsi0[0]<m_rsi1[0]);
                     }                     
                 //MFI (only options with EXIT)
                 if (!MFI_InOut==IN_)
                     {
                     m_buy =(m_buy  && m_mfi0[0]>m_mfi1[0]);
                     m_sell=(m_sell && m_mfi0[0]<m_mfi1[0]);
                     }
                 }
Bu kodda gösterge kullanımını hiç görmüyorum (ve değerlerin karşılık gelen dizilere nasıl kopyalandığını)
 

Selam beyler,

Gerçekten yardıma ihtiyacım var, waddah attar scalping göstergesi ile bir uzman yapıyorum, mantık çalışıyor, her şey yolunda.

Bir şey dışında, geriye dönük ekran görüntüsünde gördüğünüz gibi, her yeşil çubukta uzman, aynı kırmızı çubuklar için bir satın alma açar. Renk değişikliği başına sadece 1 takas istiyorum.

istediğim şey:

GÖSTERGE YEŞİLDİR ---> bir alış açar ---> alış kapanır ---> GÖSTERGE KIRMIZIYA DÖNÜŞÜR ---> bir satış açar ---> satış kapanır ---> tekrar

Renk değişikliği başına sadece 1 takas istiyorum.

İşte kodum: (kısaca aynı)

//Trading decision.
   bool SendLong = false , SendShort = false ;
  
     double clnowsell = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 1 ,clbar);
     double clpresell = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 1 ,clbar+ 1 );
  
     double clnowbuy = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 0 ,clbar);
     double clprebuy = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 0 ,clbar+ 1 );

   //Long trade
  
   //Specific system filters
   //if (some condition) SendLong = true;
  
   if (clnowbuy > 0 ) SendLong = true ;

Birisi lütfen basit bir çözümle gelebilir mi, 1265 satırına bakın, mantık buraya geliyor.

Çok teşekkürler !

 
LittleCaro :

Selam beyler,

Gerçekten yardıma ihtiyacım var, waddah attar scalping göstergesi ile bir uzman yapıyorum, mantık çalışıyor, her şey yolunda.

Bir şey dışında, geriye dönük ekran görüntüsünde gördüğünüz gibi, her yeşil çubukta uzman, aynı kırmızı çubuklar için bir satın alma açar. Renk değişikliği başına sadece 1 takas istiyorum.

istediğim şey:

GÖSTERGE YEŞİLDİR ---> bir alış açar ---> alış kapanır ---> GÖSTERGE KIRMIZIYA DÖNÜŞÜR ---> bir satış açar ---> satış kapanır ---> tekrar

Renk değişikliği başına sadece 1 takas istiyorum.

İşte kodum: (kısaca aynı)

//Trading decision.
   bool SendLong = false , SendShort = false ;
  
     double clnowsell = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 1 ,clbar);
     double clpresell = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 1 ,clbar+ 1 );
  
     double clnowbuy = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 0 ,clbar);
     double clprebuy = iCustom ( Symbol (),WAScalpingTimeFrame, "Waddah_Attar_Scalping" ,IPeriod,P1,P2, 0 ,clbar+ 1 );

   //Long trade
  
   //Specific system filters
   //if (some condition) SendLong = true;
  
   if (clnowbuy > 0 ) SendLong = true ;

Birisi lütfen basit bir çözümle gelebilir mi, 1265 satırına bakın, mantık buraya geliyor.

Çok teşekkürler !

Koşul olarak değiştirin

   if (clnowbuy > 0 && clprebuy == 0 ) SendLong = true ;

aynı şey şort için

 

Teşekkürler Mladen!

Bazen takılıp kalıyoruz ve işimize yeni bir bakış atmamız gerekiyor.

Tekrar teşekkürler !

 
LittleCaro :

Teşekkürler Mladen!

Bazen takılıp kalıyoruz ve işimize yeni bir bakış atmamız gerekiyor.

Tekrar teşekkürler !

bonjour,

Ravi de voir une Française, tiens moi au courant des tes tes résultats avec waddah attar ;)

yeşil tırtıllar

 

Merhaba arkadaşlar, 4 ema cross gerçekleştiğinde ve rsi > veya < 50 olduğunda yukarı veya aşağı ok gösterebilen bir ema-rsi göstergesi düzenlemeye çalışıyorum.

Benim sorunum, bu okların ortaya çıktıklarında her kene için yenilenmemesi, koşulların ok göstermek için hala iyi olup olmadığını kontrol etmek istersem zaman dilimini değiştirmem gerekiyor. Bana sorunun nerede olduğunu söyleyebilir misin? kodu yayınlıyorum.

Teşekkür ederim

#property  indicator_chart_window
#property  indicator_buffers   2
#property  indicator_color1 Green
#property  indicator_color2 Red

#property  indicator_width1  4
#property  indicator_width2  4

double  CrossUp[];
double  CrossDown[];
extern   int  FasterEMA1     =  6 ;
extern   int  SlowerEMA1     =  12 ;
extern   int  FasterEMA2     =  7 ;
extern   int  SlowerEMA2     =  14 ;
extern   int  RSInowPeriod   =  6 ;
extern   int  barsBack       =  2000 ;
extern   bool  AlertsMessage =  true ;
extern   bool  AlertsSound   =  true ;
extern   bool  debug         =  false ;
extern   double  K           =  1.0  ;

bool  EMACrossedUp =  false ;
bool  RSICrossedUp =  false ;
bool  EMACrossedDown =  false ;
bool  RSICrossedDown =  false ;
int  SignalLabeled =  0// 0: initial state; 1: up; 2: down.
int  upalert= false ,downalert= false ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int  init()
  {
//---- indicators
    SetIndexStyle ( 0DRAW_ARROWEMPTY );
    SetIndexArrow ( 0241 );
    SetIndexBuffer ( 0 , CrossUp);
    SetIndexStyle ( 1DRAW_ARROWEMPTY );
    SetIndexArrow ( 1242 );
    SetIndexBuffer ( 1 , CrossDown);
//----
    return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int  deinit()
  {
//---- 

//----
    return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int  start() {
    int  limit, i, counter;
    double  fasterEMA1now, slowerEMA1now, fasterEMA1previous, slowerEMA1previous, fasterEMA2now, slowerEMA2now, fasterEMA2previous, slowerEMA2previous;
    double  RSInow;
    double  Range, AvgRange;

    int  counted_bars= IndicatorCounted ();
//---- check for possible errors
    if (counted_bars< 0return (- 1 );
//---- last counted bar will be recounted
    if (counted_bars> 0 ) counted_bars--;

   limit= MathMin ( Bars -counted_bars,barsBack);
   
    for (i = limit; i>= 0 ; i--) {
       
      counter=i;
      Range= 0 ;
      AvgRange= 0 ;
       for  (counter=i ;counter<=i+ 9 ;counter++)
      {
        AvgRange=AvgRange+ MathAbs ( High [counter]- Low [counter]);
      }
      Range=AvgRange/ 10 ;

      fasterEMA1now =  iMA ( NULL0 , FasterEMA1,  0MODE_EMAPRICE_CLOSE , i);
      fasterEMA1previous =  iMA ( NULL0 , FasterEMA1,  0MODE_EMAPRICE_CLOSE , i+ 1 );
      
      fasterEMA2now =  iMA ( NULL0 , FasterEMA2,  0MODE_EMAPRICE_CLOSE , i);
      fasterEMA2previous =  iMA ( NULL0 , FasterEMA2,  0MODE_EMAPRICE_CLOSE , i+ 1 );
      
      slowerEMA1now =  iMA ( NULL0 , SlowerEMA1,  0MODE_EMAPRICE_CLOSE , i);
      slowerEMA1previous =  iMA ( NULL0 , SlowerEMA1,  0MODE_EMAPRICE_CLOSE , i+ 1 );
      
      slowerEMA2now =  iMA ( NULL0 , SlowerEMA2,  0MODE_EMAPRICE_CLOSE , i);
      slowerEMA2previous =  iMA ( NULL0 , SlowerEMA2,  0MODE_EMAPRICE_CLOSE , i+ 1 );
      
      RSInow= iRSI ( NULL , 0 ,RSInowPeriod, PRICE_CLOSE ,i);
      
       if  (RSInow >  50 ) {
          if  (debug) Print ( TimeToStr ( Time [i], TIME_DATE )+ TimeToStr ( Time [i], TIME_SECONDS )+ " RSI UP " );
         RSICrossedUp =  true ;
         RSICrossedDown =  false ;
      }
      
       if  (RSInow <  50 ) {
          if  (debug) Print ( TimeToStr ( Time [i], TIME_DATE )+ TimeToStr ( Time [i], TIME_SECONDS )+ " RSI DOWN " );
         RSICrossedUp =  false ;
         RSICrossedDown =  true ;
      }
      
       if  ((fasterEMA1now >= slowerEMA1now) && (fasterEMA1previous < slowerEMA1previous) && (fasterEMA2now >= slowerEMA2now) && (fasterEMA2previous < slowerEMA2previous) ) {
          if  (debug) Print ( TimeToStr ( Time [i], TIME_DATE )+ TimeToStr ( Time [i], TIME_SECONDS )+ " EMA UP " );
         EMACrossedUp =  true ;
         EMACrossedDown =  false ;
      }

       if  ((fasterEMA1now <= slowerEMA1now) && (fasterEMA1previous > slowerEMA1previous) && (fasterEMA2now <= slowerEMA2now) && (fasterEMA2previous > slowerEMA2previous)) {
          if  (debug) Print ( TimeToStr ( Time [i], TIME_DATE )+ TimeToStr ( Time [i], TIME_SECONDS )+ " EMA DOWN " );
         EMACrossedUp =  false ;
         EMACrossedDown =  true ;
      }

       if  ((EMACrossedUp ==  true ) && (RSICrossedUp ==  true ) && (SignalLabeled !=  1 )) {
         CrossUp[i] =  Low [i] - K*Range;
          if  (debug) Print ( TimeToStr ( Time [i], TIME_DATE )+ TimeToStr ( Time [i], TIME_SECONDS )+ " SIGNAL UP " );
          if (i<= 2  && AlertsMessage && !upalert)
           {
             Alert  ( Symbol (), " " , Period (), "M  BUY SIGNAL " );
             //SendMail("EMA Cross Up on "+Symbol(),"");
            upalert= true ;
            downalert= false ;
           }           
          if (i<= 2  && AlertsSound && !upalert)
           {
             PlaySound ( "alert.wav" );
            upalert= true ;
            downalert= false ;
           }
         SignalLabeled =  1 ;
      }

       else   if  ((EMACrossedDown ==  true ) && (RSICrossedDown ==  true ) && (SignalLabeled !=  2 )) {
         CrossDown[i] =  High [i] + K*Range;
          if  (debug) Print ( TimeToStr ( Time [i], TIME_DATE )+ TimeToStr ( Time [i], TIME_SECONDS )+ " SIGNAL DOWN " );
          if (i<= 2  && AlertsMessage && !downalert)
           {
             Alert  ( Symbol (), " " , Period (), "M  SELL SIGNAL " );
             //SendMail("EMA Cross Down on "+Symbol(),"");
            downalert= true ;
            upalert= false ;
           }
          if (i<= 2  && AlertsSound && !downalert)
           {
             PlaySound ( "alert.wav" );
            downalert= true ;
            upalert= false ;
           }
         SignalLabeled =  2 ;
      }
   }
    return ( 0 );
}
//end
 
mladen :
Bu kodda gösterge kullanımını hiç görmüyorum (ve değerlerin karşılık gelen dizilere nasıl kopyalandığını)

Merhaba Mladen,

İşte içinde bazı kodlar bulunan "sample-ea-modular.mq5"... ve istediğim fikre sahip arayüz ile.

Modüler hale getirmeye çalışıyorum, fikir her göstergenin giriş/çıkışlarını ayrı ayrı optimize etmektir.

Bunu "sample-ea-modular.mq5" ile yapabilirsem, gerçek EA'yı değiştireceğim.

gerçek taban Ea-sample.mq5'tir. (sadece size gönderiyorum, tüm göstergeleri görüyorsunuz)

Dosyalar:
 
oguz :

Sevgili @mladen,

Aşağıda belirtilen hatayı çözebilirseniz, lütfen çok memnun olun.

Teşekkür ederim...

"Soru: Grafiğe eklediğimde ve otomatik gmt ofsetini kullandığımda bir uyarı var.


Şu şekilde uyarı: Uyarı, manuel GMToffset'leri yalnızca geriye dönük testte kullanın.

Otomatik GMT ofset hesaplaması yalnızca canlı/demo ticaretinde çalışır
ve geriye dönük testler - strateji testi için YANLIŞ olarak ayarlanmalıdır.

Bu normal mi? Yoksa otomatik gmt ofsetini false olarak mı çevirmeliyim?

Cevap : AutoGMTOffset'i kapattım ve GMT ofsetini manuel olarak ayarladım. Artık uyarı mesajı yok ve demoda gayet iyi çalışıyor gibi görünüyor. Şekil git. Belki bu bir hatadır. Ah evet, kesinlikle bir bug.

Koda baktım ve "başka" bir işlem ya atlanmış ya da yanlış yerleştirilmiş. Mesaj, yalnızca UseAutoGMTOffset, FALSE olarak ayarlanmışsa verilmelidir.

O halde bu mesajı görmezden gelin ve mutlu olun. Her şey (ahem) tasarlandığı gibi çalışıyor."

oğuz

Her zamanki gibi (bunu zaten biliyorsunuz) ayrıştırılmış kod hakkında yorum yapmıyorum, ancak doğru yolda olduğunuzu görüyorum: işe yararsa (seçenek), kullanın. Eğer değilse, o zaman yapma. Gördüğüm kadarıyla bu sadece bir mesaj (hata değil) yani...

 

Sevgili @mladen,

Aşağıda belirtilen hatayı çözebilirseniz, lütfen çok memnun olun.

Teşekkür ederim...

"Soru: Grafiğe eklediğimde ve otomatik gmt ofsetini kullandığımda bir uyarı var.


Şu şekilde uyarı: Uyarı, manuel GMToffset'leri yalnızca backtest'te kullanın.

Otomatik GMT ofset hesaplaması yalnızca canlı/demo ticaretinde çalışır
ve geriye dönük testler - strateji testi için YANLIŞ olarak ayarlanmalıdır.

Bu normal mi? Yoksa otomatik gmt ofsetini false olarak mı çevirmeliyim?

Cevap : AutoGMTOffset'i kapattım ve GMT ofsetini manuel olarak ayarladım. Artık uyarı mesajı yok ve demoda gayet iyi çalışıyor gibi görünüyor. Şekil git. Belki bu bir hatadır. Ah evet, kesinlikle bir bug.

Koda baktım ve "başka" bir işlem atlanmış veya yanlış yerleştirilmiş. Mesaj, yalnızca UseAutoGMTOffset, FALSE olarak ayarlanmışsa verilmelidir.

O halde bu mesajı görmezden gelin ve mutlu olun. Her şey (ahem) tasarlandığı gibi çalışıyor."
Neden: