Projekt AWSOME OSCILLATOR

 
//+------------------------------------------------------------------+
//|                                                         1502.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
/// NOTWENDIGKEIT FÜR TRADES
#include<Trade\Trade.mqh>
CTrade trade;



/// ENDE NOTWENDIGKEIT FÜR TRADES 
///BOOlS für TRIGGERZOHNEN 

///
bool Zone1;
bool Zone2;
bool Zone3;
bool Zone4;
///

bool longTrigger;
bool shortTrigger;

/// x123
bool wirwarenoben;
bool tradeshort;

bool wirwarenunten;
bool tradelong;
/// ende x123

////// Temporäre Variablen


//////



double AOWERT_POS2;
double HandleAO2;

int HandleAO;

//+------------------------------------------------------------------+
//|  BIS HIER HIN WERDEN VARIABLEN DEKLARIERT                        |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|  BIS HIER HIN WERDEN EIGENE FUNKTIONEN DEKLARIERT                |
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//|  BIS HIER HIN WERDEN EIGENE FUNKTIONEN DEKLARIERT                |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

HandleAO2 = iAO(Symbol(),Period());

 if(HandleAO2 ==  INVALID_HANDLE)
    Print("Handle nicht Initialisiert");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
  //// ASK PRICE BEKOMMEN///
  double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
  /// ASK PRICE ENDE///
//---
    double grenzetriggerup = -0.0001;
    double grenzetriggerdown = 0.0001;
    bool VerboteneZoneOben;
    bool VerboteneZoneUnten;
                                          ///////////// HIER STAND double AO_Buffer2[0];
    double AO_Buffer2[]; 
    ArraySetAsSeries(AO_Buffer2,true);
    
    if( CopyBuffer(HandleAO2,0,0,1,AO_Buffer2) <=0 ) Comment("err: ");
    else Comment("AWSOME OSCILLATOR ] ", NormalizeDouble(AO_Buffer2[0],6));
         Print(AO_Buffer2[0]);
    
    
    
    
     
    /// LONG SHORT ZONE NAHE BEI NULL
    
    if(AO_Buffer2[0] <= 0 && AO_Buffer2[0] >= grenzetriggerup )
    longTrigger = true;
    else
    longTrigger = false;
    
    
     if(AO_Buffer2[0] >= 0 && AO_Buffer2[0] <= grenzetriggerdown )
     shortTrigger = true ;
    else
    shortTrigger = false;
 
    
  // LONG SHORT ZONE NAHE NULL ENDE
  
  /// ZONEN FÜR LONG UND SHORT BEREICH ALSO ALLES ÜBER UND UNTER GRENZETRIGGERN ODER BESSER [-0,0001-0,0001]
  if (AO_Buffer2[0] <= grenzetriggerup)
  VerboteneZoneUnten = true;
  else
  VerboteneZoneOben = false;
 
 
 
  if(AO_Buffer2[0] >= grenzetriggerdown)
  VerboteneZoneUnten = false;
  else
  VerboteneZoneOben = true;
  
  /// ENDE ZONE^
  
  //////// SIGNAL VON UNTEN NACH OBEN 
  //// if (VerboteneZoneUnten = true && longTrigger = true)
  if(VerboteneZoneUnten == true && longTrigger == true )
  trade.Buy(0.5,NULL,Ask,Ask-30*_Point,Ask+100*_Point,NULL);
  ///Sleep(60000);
  
  if(VerboteneZoneOben == true && shortTrigger == true)
  trade.Sell(0.5,NULL,Ask,Ask+30*_Point,Ask-100*_Point,NULL);
  
  
  
  
 ///Versuch einer ORDER
 //if(1 == 1)
 //trade.Buy(1.0,NULL,Ask,Ask-25*_Point,Ask+80*_Point,NULL);
 //Sleep(5000);
 
 
  ////In welcher Zone wir uns derzeit befinden   VIELLEICHT NICHT NOTWENDIG WEIL DAS GLEICHE OBEN SCHON GEPRÜFT WIRD
  
  
  
  if(AO_Buffer2[0] >= grenzetriggerdown)    //// AO größer als 0,0001 
   Zone1 = true;
   else 
   Zone1 = false;
   
  if(AO_Buffer2[0] <= grenzetriggerdown && AO_Buffer2[0] > 0)      /// AO kleiner als 0,0001 und AO großer 0
   Zone2 = true;
   else 
   Zone2 = false;
   
   if(AO_Buffer2[0] >= grenzetriggerup && AO_Buffer2[0] < 0)       /// AO größer als -0.0001 und AO kleiner 0
   Zone3 = true;
   else
   Zone3 = false;
   
   
   if(AO_Buffer2[0] <= grenzetriggerup)                            /// AO kleiner als -0.0001 
   Zone4 = true;
   else 
   Zone4 =false;
  
  
  //// Zone befinden Ende
  
  // Signal für von oben nach unten    VARIABLEN hierfür kenncode (X123)
  
  if(Zone1 == true)
   wirwarenoben = true;
  if (Zone2 == true && wirwarenoben == true){
       tradeshort = true;
       wirwarenoben = false;  
       }                           ///// NEU  wir waren oben false in der hoffnunf fehltrades zu minimieren
       else
       tradeshort = false;
 
 //// Bis hier haben wir zone 2 als short drinnen
 
 if (Zone4 == true)
    wirwarenunten = true;
    
 if (wirwarenunten == true && Zone3 == true){
     tradelong = true;
     wirwarenunten = false;         
     }                               //// NEU wir waren unten false 
     else 
     tradelong = false;
     
/// Ende von SIGNAL OBEN UNTEN UND UNTEN OBEN

// Eröffne trade

if(tradeshort== true && shortTrigger == true)
  trade.Sell(0.5,NULL,Ask,Ask+70*_Point,Ask-100*_Point,NULL);
  Sleep(300000);
  tradeshort =false;
  
  
if (tradelong == true && longTrigger == true)
  trade.Buy(0.5,NULL,Ask,Ask-70*_Point,Ask+100*_Point,NULL);
  Sleep(300000);
  tradelong = false;
  
  
  
  }
   
//+------------------------------------------------------------------+

 Guten Tag liebes Forum, ich versuche gerade einen Tradingbot mit dem AO zu erstellen , das ist kniffliger als gedacht da ,

der AO andauernd springt ist es schwer aus dem AO herauszusagen, ob der Indikatorwert gerade wirklich am steigen oder am fallen ist.

Ich habe mir überlegt das ganze in Zonen zu setzten und diese dann nachzujustieren. 

Nun habe ich folgendes Problem das ich beim Backtesten nicht die Trades sehe die eigentlich hätten da sein sollen.

Die Idee ist  wenn der AO über  +- 0,0001 einen Trigger aktiviert und falls der AO in die Zone 2 = [ 0.0001 - 0]  fällt einen short triggert und andersrum für longs.

Nun die Frage, sieht jemand auf anhieb einen Denkfehler im Code oder ist es so dass der Strategietester in MT5 einfach hochgradiger Trash ist?

 

Kennst Du das hier: https://www.mql5.com/de/articles/11468

oder das: https://www.mql5.com/en/code/39697

oder das: https://www.mql5.com/en/forum/214

oder das: https://www.mql5.com/en/articles/11468

Es gibt fast nichts, was nicht schon für MT5 programmiert wurde.

Suchen ist meist schneller!

Lernen Sie, wie man ein Handelssystem mit dem Awesome Oscillator entwickelt
Lernen Sie, wie man ein Handelssystem mit dem Awesome Oscillator entwickelt
  • www.mql5.com
In diesem neuen Artikel unserer Serie werden wir ein neues technisches Instrument kennenlernen, das für unseren Handel nützlich sein kann: den Indikator Awesome Oscillator (AO). Wir werden lernen, wie man mit diesem Indikator ein Handelssystem entwickeln kann.