Support & Resistance Level bzw. StopLoss anhand ATR

 

Hi,

ich habe folgende Idee, mir fehlt aber die Expertise wie genau es zu programmieren gilt, ... ab Punkt 3 steh ich auf dem Schlauch und hoffe ihr könnt mir helfen.


1. Warte auf ein Signal (zB: kaufen)

2. Ermittle einen vorläufigen StopLoss-Level --> Bid - (ATR*2)*_Point

3. gehe die letzten 1.000 Bars durch --> suche die Bars raus, die diesen vorläufigen StopLoss-Level kreuzen ( sprich: High>SL-Level UND Low<SL-Level )

4. Suche aus diesen selektierten Bars das LowestLow raus --> finaler StopLoss Level ist gefunden


Ich bekomme es zar hin, dass er mir die Bars raus sucht, die den vorläufigen StopLoss-Level kreuzen, aber ab diesem Punkt weiß ich nicht weiter...

Kann/Muss/Soll ich diese ermittelten Bars in einem Array sammeln und dann das LowestLow aus diesem Array raus suchen? (Falls ja einen Vorschlag wie könnte der Code lauten , Arrays sind nicht meine Stärke)

danke vorab für Vorschläge


int                  Crossing_Bar;
int                  SL       = int(iATR(Symbol(),_Period,14,0)*MarketInfo(Symbol(),MODE_LOTSIZE)*2);
double               SL_Area   = Bid-SL*Points;

for(int i = 0; i<=1000;i++)
if(High[i]>SL_Area && Low[i]<SL_Area) {Crossing_Bar = i; Print(Crossing_Bar);};
 
Markus Wilhelm:

Hi,

ich habe folgende Idee, mir fehlt aber die Expertise wie genau es zu programmieren gilt, ... ab Punkt 3 steh ich auf dem Schlauch und hoffe ihr könnt mir helfen.


1. Warte auf ein Signal (zB: kaufen)

2. Ermittle einen vorläufigen StopLoss-Level --> Bid - (ATR*2)*_Point

3. gehe die letzten 1.000 Bars durch --> suche die Bars raus, die diesen vorläufigen StopLoss-Level kreuzen ( sprich: High>SL-Level UND Low<SL-Level )

4. Suche aus diesen selektierten Bars das LowestLow raus --> finaler StopLoss Level ist gefunden


Ich bekomme es zar hin, dass er mir die Bars raus sucht, die den vorläufigen StopLoss-Level kreuzen, aber ab diesem Punkt weiß ich nicht weiter...

Kann/Muss/Soll ich diese ermittelten Bars in einem Array sammeln und dann das LowestLow aus diesem Array raus suchen? (Falls ja einen Vorschlag wie könnte der Code lauten , Arrays sind nicht meine Stärke)

danke vorab für Vorschläge


Oha das ist verwirrend. Also ich gehe mal davon aus, dass Du ganz sicher gehen möchtest, dass Dein Stoploss groß genug ist. Der Gedanke ist an sich nicht mal schlecht, aber da sind ein paar Denkfehler drin:

Wenn Du einfach nur das ArrayMinimum von den Low Werten der letzten tausend Bars nehmen würdest, das wäre sehr willkürlich. Schau mal das Lowest Low aus tausend an und ich bezweifle, dass Du das als Regel für Deine Stoplevel nutzen willst.

Wenn wir über das Verhältnis zwischen dem aktuellen Ask/Bid Preis und dem Stoplevel als Ergebnis des ATR Werts (und vielleicht noch einem Faktor) reden, ist klar, dass der Bar noch nicht abgeschlossen ist. Bei zurückliegenden Bars stellt sich die Frage von welchem Ask/Bid Preis Du als Referenz ausgehen möchtest. Der Close wäre zum Beispiel recht willkürlich. Viellleicht der Mittelwert des jeweiligen Bars? Vielleicht...

Hast Du schon einmal einfach nur nach "ATR Stoplevel" gesucht und das umgesetzt? Dann siehst Du mal was rauskommt und das kannst Du später immer noch anpassen. Eigentlich liegt das ja auf dem Weg.

Der Artikel hier ist ziemlich gut: https://www.mql5.com/de/articles/567

Zu guter Letzt zum Rumprobieren:

//+------------------------------------------------------------------+
//|                                                 ArrayMinimum.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

double LowArray[], HighArray[];
int MaxIndex, MinIndex, Referenzzeitraum=1000;

int OnInit()
  {
//---
   ArraySetAsSeries(LowArray,true);
   ArraySetAsSeries(HighArray,true);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   CopyLow(_Symbol,_Period,0,Referenzzeitraum,LowArray);
   CopyHigh(_Symbol,_Period,0,Referenzzeitraum,HighArray);
   
   MaxIndex=ArrayMaximum(HighArray,0,WHOLE_ARRAY);  //hier wird der Index zurückgegeben
   MinIndex=ArrayMinimum(LowArray,0,WHOLE_ARRAY);
   
   Comment("Maximum aus tausend: ",HighArray[MaxIndex],   //hier siehst Du ja dann die Werte die
         "\nMinimum aus tausend: ",LowArray[MinIndex]);  //durch die Indizes aus den Arrays auf-
  }                                                      //gerufen werden.
//+------------------------------------------------------------------+


Ups da ist mir nachträglich ein Fehler aufgefallen. Der ist jetzt korregiert. Der Fehler war, dass ArrayMaximum() Dir nur die Indizes zurückgibt, darüber kannst Du Dir aber die Werte aus dem Arra holen. Gruß

Grundlagen der Programmierung in MQL5: Arrays
Grundlagen der Programmierung in MQL5: Arrays
  • www.mql5.com
Arrays sind zusammen mit Variablen und Funktionen ein wesentlicher Bestandteil so gut wie jeder Programmiersprache. Dieser Beitrag dürfte vor allem für Neueinsteiger in der Programmierung mit MQL5 interessant sein, bietet erfahrenen Programmierern aber gleichzeitig eine gute Gelegenheit, ihr Wissen zusammenzufassen und zu systematisieren.
 
Interessante Herangehensweise, trotzdem sehe ich den Atr alleine als guten SL identifier.


@Pennyhunter hat dir ja schonmal eine Tipp gegeben.

Mir fällt gerade ein, dass man auf eine änliche weise preislevels finden könnte.  Man müsste mit einer Funktion verschiedene Preise (beispielSchrittweite: 100 Points) durchgehen und überprüfen, wie viele der letzten 1000 Kerzen das jeweilige Level gecrosst hat. Haben z.B 700 von 1000 Kerzen dieses Level gekreuzt, oder berührt, könnte man von einer harten Resi sprechen.