Hilfe bei der Codierung - Seite 726

 

Hallo Mladen,

ich versuche, dies im MT5 zu programmieren, aber ich glaube, dass ich nicht die richtige Implementierung verwende,

meine Idee ist es, mehr Indikatoren zu verwenden, bitte gib mir ein Licht... ;-)

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:

Hallo Mladen,

ich versuche, dies im MT5 zu programmieren, aber ich glaube, dass ich nicht die richtige Implementierung verwende,

meine Idee ist es, mehr Indikatoren zu verwenden, bitte gib mir ein Licht... ;-)

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]);
                     }
                 }
In diesem Code sehe ich die Verwendung des Indikators überhaupt nicht (und wie die Werte in entsprechende Arrays kopiert werden)
 

Hallo Leute,

Ich brauche wirklich Hilfe, ich baue einen Experten mit dem Waddah Attar Scalping Indikator, die Logik funktioniert, alles ist ok.

Außer einer Sache, wie Sie sehen, in der Backtest-Screenshot, bei jedem grünen Balken der Experte öffnet einen Kauf, dasselbe für die roten Balken. Ich möchte nur 1 Handel pro Farbwechsel.

Was ich will ist:

ANZEIGE WIRD GRÜN ---> es wird ein Kauf eröffnet ---> der Kauf wird geschlossen ---> ANZEIGE WIRD ROT ---> es wird ein Verkauf eröffnet ---> der Verkauf wird geschlossen ---> Wiederholung

Ich möchte nur 1 Handel pro Farbwechsel.

Hier ist mein Code: (das gleiche für Short)

//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;

Kann jemand bitte mit einer einfachen Lösung kommen, schauen Sie sich die Zeile 1265, die Logik kommt hier.

Vielen Dank!

 
LittleCaro:

Hallo Leute,

Ich brauche wirklich Hilfe, ich baue einen Experten mit dem Waddah Attar Scalping Indikator, die Logik funktioniert, alles ist ok.

Außer einer Sache, wie Sie sehen, in der Backtest-Screenshot, bei jedem grünen Balken der Experte öffnet einen Kauf, dasselbe für die roten Balken. Ich möchte nur 1 Handel pro Farbwechsel.

Was ich will ist:

ANZEIGE WIRD GRÜN ---> es wird ein Kauf eröffnet ---> der Kauf wird geschlossen ---> ANZEIGE WIRD ROT ---> es wird ein Verkauf eröffnet ---> der Verkauf wird geschlossen ---> Wiederholung

Ich möchte nur 1 Handel pro Farbwechsel.

Hier ist mein Code: (das gleiche für Short)

//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;

Kann jemand bitte mit einer einfachen Lösung kommen, schauen Sie sich die Zeile 1265, die Logik kommt hier.

Vielen Dank!

Ändern Sie die Bedingung in

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

Dasselbe gilt für die Shorts

 

Vielen Dank, Mladen!

Manchmal bleiben wir stecken und brauchen einen neuen Blick auf unsere Arbeit.

Nochmals vielen Dank!

 
LittleCaro:

Vielen Dank, Mladen!

Manchmal bleiben wir stecken und brauchen einen neuen Blick auf unsere Arbeit.

Nochmals vielen Dank!

Bonjour,

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

Grüne Kerne

 

Hallo Leute, ich versuche, einen ema-rsi-Indikator zu bearbeiten, der einen Pfeil nach oben oder unten zeigen kann, wenn 4 ema Kreuz passiert und rsi ist > oder < 50.

Mein Problem ist, dass theese Pfeile nicht fürjeden Tick aktualisieren, sobald sie erschienen, muss ich Timeframe ändern, wenn ich überprüfen möchte, ob Bedingungen noch gut sind, um Pfeil zu zeigen. Können Sie mir sagen, wo ist das Problem? Ich poste den Code.

Ich danke Ihnen

#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:
In diesem Code sehe ich die Verwendung der Indikatoren überhaupt nicht (und wie die Werte in entsprechende Arrays kopiert werden)

Hallo Mladen,

Hier ist die "sample-ea-modular.mq5" mit etwas Code drin... und mit der Schnittstelle, die die Idee haben, die ich will.

Ich versuche, es modular zu machen, die Idee ist, separat in/out von jedem Indikator zu optimieren.

Wenn ich dies mit dem "sample-ea-modular.mq5" machen kann, werde ich den echten EA ändern.

die echte Basis ist die Ea-sample.mq5. (ich bin Posting nur um Sie sehen alle Indikatoren)

Dateien:
 
oguz:

Lieber @mladen,

Wenn Sie den unten genannten Fehler beheben können, wäre ich Ihnen sehr dankbar.

Vielen Dank...

"Frage: Es gibt eine Warnung, wenn ich einen Chart erstellt habe und auto gmt offset verwende.


Warnung wie diese: Warnung, verwenden Sie manuelle GMT-Offsets nur im Backtest.

Die automatische GMT-Offset-Berechnung funktioniert nur im Live-/Demo-Handel
und sollte für Backtests - Strategietests - auf FALSE gesetzt werden.

Ist das normal? Oder sollte ich AutoGMTO-Offset auf FALSE stellen?

Antwort: Ich habe AutoGMTOffset ausgeschaltet und den GMT-Offset manuell eingestellt. Es gibt keine Warnmeldung mehr und es scheint in der Demo gut zu funktionieren. Stellen Sie sich das mal vor. Vielleicht ist es ein Fehler. Oh ja, es ist definitiv ein Fehler.

Ich habe mir den Code angesehen und eine "else"-Operation wurde entweder ausgelassen oder falsch platziert. Die Meldung sollte nur ausgegeben werden, wenn UseAutoGMTOffset auf FALSE gesetzt ist.

Also, ignorieren Sie diese Meldung und freuen Sie sich. Alles funktioniert wie (ähem) geplant."

oguz

Wie üblich (das wissen Sie bereits) kommentiere ich dekompilierten Code nicht, aber ich sehe, dass Sie auf dem richtigen Weg sind: Wenn es funktioniert (die Option), verwenden Sie sie. Wenn es nicht funktioniert, dann nicht. Soweit ich sehe, ist das nur eine Meldung (kein Fehler), also ...

 

Lieber @mladen,

Wenn Sie den unten genannten Fehler beheben können, wäre ich Ihnen sehr dankbar.

Vielen Dank...

"Frage: Es gibt eine Warnung, wenn ich einen Chart erstellt habe und auto gmt offset verwende.


Warnung wie diese: Warnung, verwenden Sie manuelle GMT-Offsets nur im Backtest.

Die automatische GMT-Offset-Berechnung funktioniert nur im Live-/Demo-Handel
und sollte für Backtests - Strategietests - auf FALSE gesetzt werden.

Ist das normal? Oder sollte ich AutoGMTO-Offset auf FALSE stellen?

Antwort: Ich habe AutoGMTOffset ausgeschaltet und den GMT-Offset manuell eingestellt. Es gibt keine Warnmeldung mehr und es scheint in der Demo gut zu funktionieren. Stellen Sie sich das mal vor. Vielleicht ist es ein Fehler. Oh ja, es ist definitiv ein Fehler.

Ich habe mir den Code angesehen und eine "else"-Operation wurde entweder ausgelassen oder falsch platziert. Die Meldung sollte nur ausgegeben werden, wenn UseAutoGMTOffset auf FALSE gesetzt ist.

Also, ignorieren Sie diese Meldung und freuen Sie sich. Alles funktioniert wie (ähem) geplant."