Finde den Fehler nicht... 2 MA Loop Trendsignal

 

Hallo Freunde der harten Mark,

das hier ist ein EA Schnipsel, der ein Trendsignal gibt. Eine Schleife überprüft, ob der schnelle MA für eine gewisse Anzahl Balken(Trendkriterium) über oder unter dem langsamen MA liegt.

Ein Trend liegt nur vor falls das Ergebnis eindeutig ist, zum Beispiel 10/10, ansonsten gibt es keinen Trend. (Nachtrag: Also ein Nicht-Crossover)

Nun ist es leider so, dass er mir DownwardsTrend zeigt, auch wenn der Chart etwas Anderes sagt. Habe den Code jetzt auseinandergenommen und den Trendteil für sich ohne Alles, eigentlich müsste es ganz einfach sein - es gibt ja nun nicht mehr viele Möglichkeiten - finde jedoch den Fehler nicht. Vielleicht sitze ich auch einfach schon zu lange davor.

 Sieht zufällig jemand von Euch, warum es nicht funktioniert?

input int                  InpTrendCrit=10;

input int                  InpMAFastPeriod=10,         InpMASlowPeriod=20;
input int                  InpMAFastShift=0,           InpMASlowShift=0;
input ENUM_MA_METHOD       InpMAFastMethod=MODE_LWMA,  InpMASlowMethod=MODE_LWMA;
input ENUM_APPLIED_PRICE   InpMAFastPrice=PRICE_CLOSE, InpMASlowPrice=PRICE_CLOSE;


ENUM_ORDER_TYPE      OrderType;
bool Trend=true;
string signal="";
int MAFastDef, MASlowDef;
double MAFast[], MASlow[];


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {

   MAFastDef=iMA(_Symbol,_Period,InpMAFastPeriod,InpMAFastShift,InpMAFastMethod,InpMAFastPrice);
   MASlowDef=iMA(_Symbol,_Period,InpMASlowPeriod,InpMASlowShift,InpMASlowMethod,InpMASlowPrice);

   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   IndicatorRelease(MAFastDef);
   IndicatorRelease(MASlowDef);

  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {

   CopyBuffer(MAFastDef,0,0,40,MAFast);
   CopyBuffer(MASlowDef,0,0,40,MASlow);

   GetTrendType(OrderType);



   Comment("\n MAFast[0]: ",MAFast[0],"; MASlow[0]: ",MASlow[0],
           "\n MAFast[1]: ",MAFast[1],"; MASlow[1]: ",MASlow[1],
           "\n MAFast[2]: ",MAFast[2],"; MASlow[2]: ",MASlow[2],
           "\n MAFast[3]: ",MAFast[3],"; MASlow[3]: ",MASlow[3],
           "\n MAFast[4]: ",MAFast[4],"; MASlow[4]: ",MASlow[4],
           "\n MAFast[5]: ",MAFast[5],"; MASlow[5]: ",MASlow[5],
           "\n MAFast[6]: ",MAFast[6],"; MASlow[6]: ",MASlow[6],
           "\n MAFast[7]: ",MAFast[7],"; MASlow[7]: ",MASlow[7],
           "\n MAFast[8]: ",MAFast[8],"; MASlow[8]: ",MASlow[8],
           "\n MAFast[9]: ",MAFast[9],"; MASlow[9]: ",MASlow[9],
           "\n signal: ",signal
          );
  }



//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void GetTrendType(ENUM_ORDER_TYPE Type)
  {
   int UpCount=0;                        //Die Zähler werden auf Null gestellt
   int DownCount=0;

   for(int i=InpTrendCrit-1; i>=0; i--)  //Das Kriterium für einen Trend ist der Index i
     {
      //der Schleife
      if(MAFast[i]>MASlow[i])            //wenn der schnelle größer ist als der langsame MA
        {
         UpCount++;                      //Geht der UpTrend Zähler um eins hoch.
         }

      else
         if(MAFast[i]<MASlow[i])         //wenn andernfalls der schnelle unter dem Langsamen MA
           {            
            DownCount++;                 //liegt, geht der DownTrend Zähler eins hoch.
            }

      }
   Print("UpCount: ",UpCount,"; DownCount: ",DownCount); //Komisch ist, dass in der Printzeile dauerhaft UpCount=0 und DownCount=10 ausgegeben wird, auch
   if(UpCount==InpTrendCrit)                             //auch wenn in dem Chart das Gegenteil erkennbar ist.
     {
                                 //Wenn alle Bars der Schleife auf den Uptrend Zähler fallen,
      OrderType=ORDER_TYPE_BUY;
      Trend=true;                //befindet sich der Preis in einem Aufwärtstrend, es ist also sowas wie das Gegenteil eines Crossovers
      signal="Upwards trend";
     }
   else
      if(DownCount==InpTrendCrit)
        {
         
         OrderType=ORDER_TYPE_SELL;
         Trend=true;                   //befinden sich alle zehn bars im Downtrend Zähler, gibt es
         signal="Downwards trend";     //einen Abwärstrend
        }
      else
        {
        
         Trend=false;                  //Falls es ein geteiltes Ergebnis gibt, gilt dies nicht
         signal="Flat";                //als Trend
        }
  }
//+------------------------------------------------------------------+
 
pennyhunter:

Hallo Freunde der harten Mark,

das hier ist ein EA Schnipsel, der ein Trendsignal gibt. Eine Schleife überprüft, ob der schnelle MA für eine gewisse Anzahl Balken(Trendkriterium) über oder unter dem langsamen MA liegt.

Ein Trend liegt nur vor falls das Ergebnis eindeutig ist, zum Beispiel 10/10, ansonsten gibt es keinen Trend.

Nun ist es leider so, dass er mir DownwardsTrend zeigt, auch wenn der Chart etwas Anderes sagt. Habe den Code jetzt auseinandergenommen und den Trendteil für sich ohne Alles, eigentlich müsste es ganz einfach sein - es gibt ja nun nicht mehr viele Möglichkeiten - finde jedoch den Fehler nicht. Vielleicht sitze ich auch einfach schon zu lange davor.

 Sieht zufällig jemand von Euch, warum es nicht funktioniert?

Was hindert Dich, das auf dem Chart anzuschauen und zu überprüfen, ob Fast die ganze Zeit unter Slow ist? Wenn nicht, wäre der nächst Schritt mit dem Debugger zu schauen, welche Werte in MASlow und MAFast stehen..
 
Carl Schreiber:
Was hindert Dich, das auf dem Chart anzuschauen und zu überprüfen, ob Fast die ganze Zeit unter Slow ist? Wenn nicht, wäre der nächst Schritt mit dem Debugger zu schauen, welche Werte in MASlow und MAFast stehen..

Ja Du hast Recht, ArraySetAsSeries fehlt. Man sollte sowas nie unausgeruht machen...

Grund der Beschwerde: