Indikatoren: Reversal

 

Reversal:

Der Indikator zeigt die Eröffnungssignale der Positionen auf der Grundlage des Handelssystems "Reversal" des Autors an.


Autor: Sergey Vradiy

 
'iBarShift' - ambiguous call to overloaded function with the same parameters Reversal.mq5 149 22

 
Nibelungen:
'iBarShift' - ambiguous call to overloaded function with the same parameters Reversal.mq5 149 22

Am meisten Sinn macht es wenn du:

Hier deutsch sprichtst

Eine richtige Frage stellen kannst

Nützliche Infos dazu packen könntest.

 
Christian:

Am meisten Sinn macht es wenn du:

Hier deutsch sprichtst

Eine richtige Frage stellen kannst

Nützliche Infos dazu packen könntest.

Geh doch nicht so hart mit 'Nibelungen' ins Gericht, das ist doch die Fehlermeldung der en-Version vom Compiler.

Der Indi ist sowieso alter Schrott der vom MT4 auf MT5 umgschustert wurde. iBarShift() rauskommentiert und schon ist zumindest der Fehler weg.

Aber was da in OnCalculate() herumgebuffert wird ist ja grauenhaft, wo doch o,h,l,c so wie so geliefert werden.

Ich schau mir den noch genauer an.

myPoint wird definiert und nirgendwo verwendet. Den Schmarrn mit:

   myPoint=Point();
   if(Digits()==5 || Digits()==3)
      {
         myPoint*=10;
      }

brauch man auch nur wenn man die überholungsbedürftigen Systembibliotheken des Wizards benutzt.

 
Otto Pauser:

Geh doch nicht so hart mit 'Nibelungen' ins Gericht

Hier herrscht Zucht und Ordnung ! :-)

...das war doch butterweich mit vorweihnachtlichem Charme ..fand ich zu mindest

 
Christian:

Hier herrscht Zucht und Ordnung ! :-)

...das war doch butterweich mit vorweihnachtlichem Charme ..fand ich zu mindest

;)
 

Ich habe mir diesen Indi hergenommen und neu programmiert.

Zusammendestilliert von 286 wirren Zeilen auf nur 151 übersichtliche Zeilen, und kann auch mehr.

Jetzt ist er ein sehr einfacher Indikator, der in Verbindung mit zB einem EMA 50 (die Buy/Sell Line von Steven Primo) und geeignetem Ausstieg durchaus potenzial hat.

//+------------------------------------------------------------------+
//|                                                Reversal_V2.0.mq5 |
//|                               Copyright © 2019, Ing. Otto Pauser |
//|                       https://www.mql5.com/de/users/kronenchakra |
//|                      found on https://www.mql5.com/de/code/19605 |
//+------------------------------------------------------------------+
#property copyright     "Copyright © 2019, Ing. Otto Pauser"
#property link          "https://www.mql5.com/de/users/kronenchakra"
#property version       "2.00"

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2

//+------------------------------------------------------------------+
//| input parameters                                                 |
//+------------------------------------------------------------------+
input int   inp_PeriodBack    =      10;  // Periods lookback
input int   inp_ArrowCodeDN   =     242;  // ArrowCode sell
input int   inp_ArrowCodeUP   =     241;  // ArrowCode buy
input color inp_ArrowColorDN  =  clrRed;  // ArrowColor sell
input color inp_ArrowColorUP  = clrLime;  // ArrowColor buy
input int   inp_ArrowSize     =       3;  // ArrowSize
input int   inp_ArrowOffs     =      30;  // ArrowOffset
input bool  inp_DrawRange     =    true;  // Draw the checked range
input bool  inp_SendMail      =   false;  // Send mail on signal

//+------------------------------------------------------------------+
//| indicator buffers                                                |
//+------------------------------------------------------------------+
double buDN[];    // buffer Arrows down
double buUP[];    // buffer Arrows up

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
   InitArrows(buDN,inp_ArrowCodeDN,inp_ArrowColorDN,inp_ArrowSize,-inp_ArrowOffs,"Sell");
   InitArrows(buUP,inp_ArrowCodeUP,inp_ArrowColorUP,inp_ArrowSize,+inp_ArrowOffs,"Buy" );
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   ArraySetAsSeries(high ,true);
   ArraySetAsSeries(close,true);
   ArraySetAsSeries(open ,true);
   ArraySetAsSeries(low  ,true);
   ArraySetAsSeries(time ,true);

   int limit=(prev_calculated==0)?0:rates_total-prev_calculated-1;

   for(int i=limit; i>=0; i--)
      {
         buDN[i]=NULL;
         buUP[i]=NULL;
         
         if(i>=MathMin(5000-1,rates_total-1-50)) continue; //omit some old rates to prevent "Array out of range" or slow calculation

                                                      //Arrows down
         if(high[1+i]==HH(high,inp_PeriodBack))       //Candlestick High is equal to Resistance
            if(close[1+i]<open[1+i])                  //Candlestick Close < Candlestick Open (bearish bar)
               {
                  buDN[i]=high[i];                    //Set indicator value at Candlestick High
                  if(i==1) 
                     myAlert(time[1],"Sell");         //Alert on next bar open
               }
                                                      //Arrows up
         if(low[1+i]==LL(low,inp_PeriodBack))         //Candlestick Low is equal to Support
            if(close[1+i]>open[1+i])                  //Candlestick Close > Candlestick Open (bullish bar)
               {
                  buUP[i]=low[i];                     //Set indicator value at Candlestick Low
                  if(i==1) 
                     myAlert(time[1],"Buy");          //Alert on next bar open
               }
      }

   if(inp_DrawRange)
      DrawRange("Range",time[inp_PeriodBack],HH(high,inp_PeriodBack),time[0],LL(low,inp_PeriodBack));

   return(rates_total);
}

//+------------------------------------------------------------------+
void myAlert(datetime aTime, string aMsg)    // Alert function
{
   static datetime lastTime=NULL;
   if(aTime!=lastTime)
      {
         aMsg="Reversal_V2.9 @ "+_Symbol+","+PeriodShortStr(_Period)+" -> "+aMsg;
         Print(aMsg);
         if(inp_SendMail) 
            SendMail("Reversal_V2.9", aMsg);
         lastTime=aTime;
      }
}

string PeriodShortStr(ENUM_TIMEFRAMES _tf)            // cutts of leading 'PERIOD_' / returns 'M1', 'M10', .... 
{
   return(StringSubstr(EnumToString(_tf),7));
}

//+------------------------------------------------------------------+
double HH(const double &aBuffer[], int aPeriBack)     // highest high of a period backwards
{
   return(aBuffer[ArrayMaximum(aBuffer,0,aPeriBack)]);
}

double LL(const double &aBuffer[], int aPeriBack)     // lowest low of a period backwards
{
   return(aBuffer[ArrayMinimum(aBuffer,0,aPeriBack)]);
}

void DrawRange(string aName, datetime aBegin, double aHigh, datetime aEnd, double aLow)
{
   if(ObjectFind   (0,aName)==0) 
      ObjectDelete (0,aName);
   ObjectCreate    (0,aName,OBJ_RECTANGLE,0,aBegin,aHigh,aEnd,aLow);
   ObjectSetInteger(0,aName,OBJPROP_STYLE,STYLE_DASHDOT);
}
//+------------------------------------------------------------------+
//| init indicatorbuffer with arrows                                 |
//+------------------------------------------------------------------+
void InitArrows(double &aBuffer[], int aArrowCode, color aArrowColor, int aArrowSize, int aArrowOffs, string aPlotLabel)
{
   static int idx=0;
   SetIndexBuffer(idx,aBuffer,INDICATOR_DATA);
   PlotIndexSetInteger(idx,PLOT_DRAW_TYPE  ,DRAW_ARROW);
   PlotIndexSetInteger(idx,PLOT_ARROW      ,aArrowCode);
   PlotIndexSetInteger(idx,PLOT_LINE_COLOR ,aArrowColor);
   PlotIndexSetInteger(idx,PLOT_LINE_WIDTH ,aArrowSize);
   PlotIndexSetInteger(idx,PLOT_ARROW_SHIFT,aArrowOffs);
   PlotIndexSetString (idx,PLOT_LABEL      ,aPlotLabel);
   PlotIndexSetDouble (idx,PLOT_EMPTY_VALUE,NULL);
   ArrayInitialize    (aBuffer,NULL);
   ArraySetAsSeries   (aBuffer,true);
   idx++;
}

Dieser Indikator ist ein guter Kandidat für meine Homepage, die Anfang nächsten Jahres online gestellt wird.

Dateien:
 
Otto Pauser:

Ich habe mir diesen Indi hergenommen und neu programmiert.

Zusammendestilliert von 286 wirren Zeilen auf nur 151 übersichtliche Zeilen, und kann auch mehr.

Jetzt ist er ein sehr einfacher Indikator, der in Verbindung mit zB einem EMA 50 (die Buy/Sell Line von Steven Primo) und geeignetem Ausstieg durchaus potenzial hat.

Dieser Indikator ist ein guter Kandidat für meine Homepage, die Anfang nächsten Jahres online gestellt wird.

Super nett von Dir! Habe's gleich ausprobiert und es funktioniert tadellos. Vielen Dank!

Grund der Beschwerde: