Moving Average auf RSI --- Komme nicht weiter

 

Hallo liebe Leute,


ich kriege bei diesem Code leider die Fehler nicht raus.


Es soll ein simpler RSI-EA sein, der ein Buy-Signal generiert, wenn der RSI über einen definierten Moving Average steigt.


Behebe ich einen der Fehler beim Kompilieren, tauchen gleich mehrere neue auf :(


Vielleicht findet ja jemand von euch Zeit, mal drüberzuschauen und mir zu sagen, was das Problem am Code ist.


Ich glaube, es liegt an falscher Klammersetzung, aber da ich neu in MQL bin, weiß ich gar nicht so recht, was ich wo genau beheben soll.


//+------------------------------------------------------------------+
//|                                  Follow the RSI.mq4 |
//|                                                    Thorsten Kock |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Thorsten Kock"
#property link      ""
#property version   "1.00"
#property strict
input int SMAPeriod = 100;
int ThisBarTrade = 0;
datetime PeriodenStartZeit;
bool NeuePeriodeBegonnen,LongSignal;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   PeriodenStartZeit = Time[0];
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }

//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()

{
{
//---
//Überprüfen ob neuer Periodenbeginn vorliegt
   if(PeriodenStartZeit != Time[0])
     {
      NeuePeriodeBegonnen = true;
      PeriodenStartZeit = Time[0];
     }
   else
      NeuePeriodeBegonnen = false;

// wenn neue Bar
{
   if(ThisBarTrade != Bars)
     {
      ThisBarTrade = Bars;

      double RSI = iRSI(NULL,0,14,PRICE_CLOSE,1);
      double RSIPreviousPeriod = iRSI(NULL,0,14,PRICE_CLOSE,1);
      double SMA = calcRSIAverage(SMAPeriod); // 100 SMA auf den RSI
     }
}
}

// Funktionen hier runter
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
  {
   double calcRSIAverage(int period)
     {
      double temp = 0.0;
      for(int i = 1; i < period + 1; i++)
        {
         temp += iRSI(NULL,0,14,PRICE_CLOSE,i);
        }
        return temp/period;   
    

if(NeuePeriodeBegonnen == true)
{
if(RSI>SMA && RSIPreviousPeriod<SMA)
{
LongSignal = true;
}
else LongSignal = false;
}

return(0);
}
}
}

            //+------------------------------------------------------------------+

            //+------------------------------------------------------------------+
            
 
Bin ich auf dem richtigen Wege, wenn ich es mal mit Buffern versuche?
 
ThorstenKock:
Bin ich auf dem richtigen Wege, wenn ich es mal mit Buffern versuche?

Arichtigen weg wärst du mit mt5

aber probier mal den styler aus, dann sieht man gleich mehr bei den klammer

 
ThorstenKock:
Bin ich auf dem richtigen Wege, wenn ich es mal mit Buffern versuche?
  1. Erst einmal herzlich willkommen und schon mal viel Erfolg später!
  2. Genereller Tipp vor dem Selbermachen erst einmal suchen, denn es gibt fast nix, was nicht schon programmiert wurde!
  3. So gibt es mehrere verschiedene Versionen vom RSI, einschl. dem originalen => nimm den (ist fehlerfrei!), mach eine Kopie und ändere die Kopie nach Deinen Ideen und kompiliere nach jedem Stritt - so lernst Du am schnellsten, denke ich!
  4. Wenn dann Dein RSI sich fehlerfrei kompilieren lässt, aber irgendwie falsch Zahlen liefert, dann nimm im Editor den Debugger und gehe Zeile für Zeile durch Dein Programm und kontrolliere die Werte der einzelnen Variablen - ist schneller als hier eine Frage stellen und einen halben oder ganzen Tag auf Antwort warten.
  5. Bei einem Fehler immer auch die Logs mitliefern - einfach nur ist falsch oder geht nicht oder crasht ist zu wenig für eine Hilfe!
 

Danke für eure Antworten!


Versuche es jetzt mal weiter, leider geht es nur extrem kleinschrittig voran.

Die Einarbeitung ist wirklich ziemlich schwierig.

 

Woran kann es liegen, wenn der EA fehlerfrei kompiliert, auch geladen wird, aber dann im Strategietester keine Trades ausführt?

Habe mich an ein Tutorial gehalten, aber nun führt der EA leider keine Aktionen aus.


//+------------------------------------------------------------------+
//|                                  Follow the volume DAX & DOW.mq4 |
//|                                                    Thorsten Kock |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Thorsten Kock"
#property link      ""
#property version   "1.00"
#property strict
input int SMAPeriod = 100;
int ThisBarTrade = 0;
datetime PeriodenStartZeit;
bool NeuePeriodeBegonnen,LongSignal,ShortSignal;
double RSI,SMA,RSIPreviousPeriod;
int LongOrder,ShortOrder;
extern double HandelsLots = 0.1;
extern int MagicNummer = 12345;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   PeriodenStartZeit = Time[0];
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }

//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
// wenn neue Bar
   if(ThisBarTrade != Bars)
     {
      ThisBarTrade = Bars;

      double RSI = iRSI(NULL,0,14,PRICE_CLOSE,1);
      double RSIPreviousPeriod = iRSI(NULL,0,14,PRICE_CLOSE,1);
      double SMA = calcRSIAverage(SMAPeriod); // 100 SMA auf den RSI^

     }
     
     
     
     //Handelssignale ermitteln
     
     //Buy-Signal

if(RSI>SMA && RSIPreviousPeriod<SMA)
  {
   LongSignal = true;
  }
else
  {
   LongSignal = false;
  }
  
  //Short-Signal
  
if(RSI<SMA && RSIPreviousPeriod>SMA)
  {
   ShortSignal = true;
  }
else
  {
   ShortSignal = false;
  }    

//Long-Signale umsetzen
if (LongSignal == true)
{
//Mögliche Short-Order schließen
if(ShortOrder>0)
{
OrderSelect(ShortOrder,SELECT_BY_TICKET);
bool ShortOrderGeclosed = OrderClose(ShortOrder,OrderLots(),Ask,200,Blue);
if (ShortOrderGeclosed==true) ShortOrder=0;
}
//Long-Order eröffnen
while(LongOrder<=0)
{
LongOrder = OrderSend(Symbol(),OP_BUY,HandelsLots,Ask,200,0,0,"RSILong",MagicNummer,0,Green);
}
}

if (ShortSignal == true)
{
//Mögliche Long-Order schließen
if(LongOrder>0)
{
OrderSelect(LongOrder,SELECT_BY_TICKET);
bool LongOrderGeclosed = OrderClose(ShortOrder,OrderLots(),Bid,200,Blue);
if (LongOrderGeclosed==true) LongOrder=0;
}
//Short-Order eröffnen
while(ShortOrder<=0)
{
ShortOrder = OrderSend(Symbol(),OP_SELL,HandelsLots,Bid,200,0,0,"RSIShort",MagicNummer,0,Red);
}
}

//Ticketnummern nach Closing auf 0 zurücksetzen
if(OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
{
if(OrderTicket()>0 && OrderCloseTime()>0) LongOrder=0;
}
if(OrderSelect(ShortOrder,SELECT_BY_TICKET)==true)
{
if(OrderTicket()>0 && OrderCloseTime()>0) ShortOrder=0;
}
  }

// Funktionen hier runter
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double calcRSIAverage(int period)
  {
   double temp = 0.0;
   for(int i = 1; i < period + 1; i++)
     {
      temp += iRSI(NULL,0,14,PRICE_CLOSE,i);
     }

   return temp/period;
  }

//+------------------------------------------------------------------+
 
ThorstenKock:

Woran kann es liegen, wenn der EA fehlerfrei kompiliert, auch geladen wird, aber dann im Strategietester keine Trades ausführt?

Habe mich an ein Tutorial gehalten, aber nun führt der EA leider keine Aktionen aus.


Dann such Dir eine Situation im Chart aus, wo der EA handeln sollte und starte den Debugger kurz vorher und kontrolliere die Variablen, die einen Auftrag auslösen sollten - das wäre das Standardvorgehen!

 
Und verwende den styler, dann kann man den code auch lesen
 
Wenn du auf MT5 umsteigst helfe ich dir.
 
Habe es soweit hinbekommen, danke für eure Antworten :)
Grund der Beschwerde: