zwei horizontale Linien für Buy- und Sellstop

 

Frohe Ostern

habe zwei Scripte die ich in einem zusammenfassen will - aber ich bekomme die nicht zusammen - also will Script 2 in Script 1 einbauen - bitte um Hilfe.

Die gelben Linien lassen sich nach oben und unten bewegen und ich möchte, dass der Buystop immer an der oberen und der Sellstop immer an der unteren ausgeführt wird


Wäre dankbar, wenn mir einer hilft, denn ich bin am verzweifeln 


Übrigens - mein Nick bezieht sich nicht nur auf Autos - bin selbst ein Produkt der 50er 


Script 1

//---

input bool   DynamicLotSize    =true;   //Money Management

input double EquityPercent     = 2;     //Risiko in %

input double FixedLotSize      = 0.1;   //Lot

input double StopLoss          = 100;   //SL(in Punkten)

input double TakeProfit        = 300;   //TP(in Punkten)

input double TrailingStop      = 50;    //TrailingStop(in Punkten)

input double PipsAway          = 50;    //x-Punkte bis Bid & Ask

input double Slippage          = 30;    //Slippage

input double Magic             = 1111;  //Magic Number



double LotSize;

int ticket1;  //L 0.01

int ticket2; // S 0.04

int t=0;

//---


             //int ticket3; L 0.12

             //int ticket4; S 0.36

             //int ticket5; Short 0.01

             //int ticket6; Long 0.04

             //int ticket7; Short 0.12

             //int ticket8; Long 0.36




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

//| expert initialization function                                   |

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

int init()

  {

//----


//----

   return(0);

  }

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

//| expert deinitialization function                                 |

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

int deinit()

  {

//----


//----

   return(0);

  }

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

//| expert start function                                            |

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

int start()

  {


//---Erkenne Open oder Pending Orders

   int total=OrdersTotal();

   t=0;

   for(int i=total-1;i>=0;i--)

     {

      OrderSelect(i,SELECT_BY_POS);

      int type=OrderType();

      if(( OrderSymbol()==Symbol()) && (OrderMagicNumber()==Magic))

        {

         switch(type)

           {

            case OP_BUY       : t=1;

            case OP_SELL      : t=1;

            case OP_BUYLIMIT  : t=1;

            case OP_BUYSTOP   : t=1;

            case OP_SELLLIMIT : t=1;

            case OP_SELLSTOP  : t=1;

           }

        }

     }

   if(t<1)

     {

      //Lotgröße kalkulieren

      if(DynamicLotSize==true)

        {

         double RiskAmount= AccountEquity() *(EquityPercent/100);

         double TickValue = MarketInfo(Symbol(),MODE_TICKVALUE);

         if(Point==0.001 || Point==0.00001) TickValue*=10;

         double CalcLots=(RiskAmount/StopLoss)/TickValue;

         LotSize=CalcLots;

        }

      else LotSize=FixedLotSize;

      // überprüfe Lotgröße

      if(LotSize<MarketInfo(Symbol(),MODE_MINLOT))

        {

         LotSize=MarketInfo(Symbol(),MODE_MINLOT);

        }

      else if(LotSize>MarketInfo(Symbol(),MODE_MAXLOT))

        {

         LotSize=MarketInfo(Symbol(),MODE_MAXLOT);

        }

      if(MarketInfo(Symbol(),MODE_LOTSTEP)==0.1)

        {

         LotSize=NormalizeDouble(LotSize,1);

        }

      else LotSize=NormalizeDouble(LotSize,2);

      

    

      //Öffne gleichzeitig zwei Pending Orders

      double t1 = Ask + PipsAway * Point; //BuyStop Entry Punkt

      double t2 = Bid - PipsAway * Point; //SellStop Entry Punkt

      double sl1 = t1 - StopLoss * Point; //BuyStop SL

      double sl2 = t2 + StopLoss * Point; //SellStop SL

      double tp1 = t1 + TakeProfit * Point; //BuyStop TP

      double tp2 = t2 - TakeProfit * Point; //SellStop TP

      

      ticket1 = OrderSend( Symbol(),OP_BUYSTOP,LotSize,t1, Slippage,sl1,tp1,"ZAY",Magic,0,White);

      ticket2 = OrderSend( Symbol(),OP_SELLSTOP,LotSize,t2, Slippage, sl2,tp2,"ZAY",Magic,0,White);

     }

   

   

   for(int j=0; j<OrdersTotal(); j++)

     {

      //---WENN BUYSTOP ERÖFFNET WIRD, erhöhe Lotgröße von "Sellstop" als Gegenposition um das Vierfache (0,01 * 4 = 0,04) 

      OrderSelect(ticket1,SELECT_BY_TICKET);

      if(OrderType()==OP_BUY)

        {

         // LOTZAHL UM 4 ERHÖHEN

         OrderDelete(ticket2);

         // Trailing Stop MUSS RAUS - LÖSCHEN 

         if(Bid-OrderOpenPrice()>Point*TrailingStop)

           {

            if(OrderStopLoss()<Bid-Point*TrailingStop)

              {

               OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

              }

           }

        }

      //---WENN SELLSTOP ERÖFFNET WIRD, erhöhe Lotgröße von "Buystop" als Gegenposition um das Vierfache (0,01 * 4 = 0,04) 

      OrderSelect(ticket2,SELECT_BY_TICKET);

      if(OrderType()==OP_SELL)

        {

         //  LOTZAHL UM 4 ERHÖHEN

         OrderDelete(ticket1);

         // Trailing Stop    LÖSCHEN

         if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

           {

            if(OrderStopLoss()>(Ask+Point*TrailingStop))

              {

               OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

              }

           }

        }

     }

   return(0);

  }

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

SCRIPT 2

void OnTick()

  {
    // finde den hoechsten Preis fuer 30 Kerzen

       double HighestPrice = High[iHighest(NULL,0,MODE_HIGH,30,0)];


    // Erstelle ein Linien-Objekt fuer Hoechstpreis

       ObjectCreate("ObereLinie",OBJ_HLINE,0,0,HighestPrice);


    // Setze die Objektfarbe

       ObjectSetInteger(0,"ObereLinie",OBJPROP_COLOR,clrGold);      

    // Setze Linienbreite

       ObjectSetInteger(0,"ObereLinie",OBJPROP_WIDTH, 3);           

       

      // finde den niedrigsten Preis fuer 30 Kerzen                     

       double LowestPrice = Low[iLowest(NULL,0,MODE_LOW,30,0)];      

       

    // Erstelle ein Linien-Objekt fuer Niedrigstpreis                  

       ObjectCreate("UntereLinie",OBJ_HLINE,0,0,LowestPrice);        


    // Setze die Objektfarbe                                           

       ObjectSetInteger(0,"UntereLinie",OBJPROP_COLOR,clrGold);      


    // Setze Linienbreite                                              

       ObjectSetInteger(0,"UntereLinie",OBJPROP_WIDTH,3);            

       

       

   

 

   

  }

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


Dateien:
 
  1. Bitte nimm ALT+S (oder den Knopf </> oben), um Code zu posten,
  2. Weil Ostern ist habe ich das mal gemacht, aber ...
  3. Mach doch aus dem zweiten Skript (verwirrend weil Metaquotes kennt Indikatoren, EAs (beide laufen kontinuierlich) und Skripte (laufen einmal) eine Funktion und ruf sie im EA auf?
  4. Such doch erst einmal, ob es das nicht schon gibt - oder so ähnlich: Es gibt fast nix, was nicht schon für MT4/5 programmiert wurde!!
 
Carl Schreiber

:

  1. Bitte nimm ALT+S (oder den Knopf </> oben), um Code zu posten,
  2. Weil Ostern ist habe ich das mal gemacht, aber ...
  3. Mach doch aus dem zweiten Skript (verwirrend weil Metaquotes kennt Indikatoren, EAs (beide laufen kontinuierlich) und Skripte (laufen einmal) eine Funktion und ruf sie im EA auf?
  4. Such doch erst einmal, ob es das nicht schon gibt - oder so ähnlich: Es gibt fast nix, was nicht schon für MT4/5 programmiert wurde!!

Hallo Carl,


erst einmal herzlichen Dank für Deine Antwort. Zu

Punkt 1 - werde ich künftig so machen - bitte um Nachsicht, wenn es mal nicht gelingt - bin zwar meiner Meinung nach ganz gut dabei für mein Alter - aber "alte Säcke" kapieren eben meist nur langsam

Punkt 2 - Danke für das Ostergeschenk - ich weiß es zu würdigen (und das ist nicht ironisch gemeint)

Punkt 3 - auch das werde ich künftig so machen

Punkt 4 - hab das Internet von oben bis unten durchsucht - leider nix gefunden


Ich handel das System jetzt etwas über ein Jahr ohne einen Fehltrade - leider bin ich aber per Hand nicht so schnell um die einzelnen Positionen einzugeben - und wenn ich z.B. DAX, EURUSD und EURJPN gleichzeitig offen hab - dann gibt's richtig Hektik


Was will ich?????????

Ich habe eine gelbe obere und untere Linie die ich verschieben kann. Ich will die beiden Linien in einem Abstand von 11 oder 16 oder 20 Punkten setzen. Bsp.: Abstand der Linien 11 Punkte - WENN:

Trade 1: Kurs kreuzt obere Linie - löst Buystop mit 0,01 Lot und einem TP 10 sowie SL 21 aus - Läuft Kurs in TP ist alles gut - wenn Kurs jedoch dreht, kommt nächster Trade

Trade 2: Kurs kreuzt untere Linie - löst Sellstop mit 0,04 Lot und einem TP 10 sowie SL 21 aus - Läuft Kurs in TP ist alles gut - wenn Kurs jedoch dreht, kommt nächster Trade

Trade 3: Kurs kreuzt obere Linie - löst Buystop mit 0,12 Lot und einem TP 10 sowie SL 21 aus - Läuft Kurs in TP ist alles gut - wenn Kurs jedoch dreht, kommt nächster Trade - ich mache noch einen 4. Trade und hedge dann ab


Habe jetzt mit diesem Prinzip seit 15 Monaten keinen Fehltrade gehabt - 5 mal mußte ich hedgen. Hab das alles immer per Hand eingegeben - aber wenn ich drei Positionen offen hab (z.B.: DAX, EURUSD, EURJPN) dann kommt ganz schnell Streß auf. 

Und deshalb will ich Code 2 in Code 1 integrieren - mein Ziel: Ich will die beiden gelben Linien in einem Chart in einem Abstand von x Punkten setzen, an denen dann die Buystop bzw Sellstop Orders von Code 1 ausgelöst werden


Und wie bekomme ich die beiden gelben Linien die den Buystop bzw Sellstop auslösen sollen in diesen Code 1


Vielen Dank für Deine Hilfe und nochmals Danke für das Ostergeschenk :-)


Oldtimer507  

 

Na klar gibt's das, das sind klassische Breakout-Systeme. Such mal nach Breakout EA (oben rechts die Lupe in der Codebase), oder mit Google mt4 breakout EA.

Die Linien die der Kurs durchbrechen soll werden halt anders berechnet (Fraktale, Vortags-Hoch,-Tief, ...) da setzt Du dann Deinen Code hinein. Da hast Du dann auch gleich das Positionsmanagement!

Um  alles zu kontrollieren gibt es den Debugger (im Editor F5, eingestellt dort unter Werkzeuge => Optionen) Comment und Print!

Zusätzlich ergibt die Suche nach ChartEvent unter anderem diesen Link zu diesem Artikel: https://www.mql5.com/de/articles/689 (ist zwar für MQL5, aber viele Funktionen gibt es auch in MQL4).

Frage musst Du einen Linie ziehen? Genügen denn nicht einfach auch die Werte intern zu kennen und nur über Comment auszugeben?

MQL5-Kochbuch: Umgang mit typischen Chartereignissen
MQL5-Kochbuch: Umgang mit typischen Chartereignissen
  • 2016.06.27
  • Dennis Kirichenko
  • www.mql5.com
In diesem Artikel würde ich sehr gerne die auf meiner praktische Erfahrungen basierenden Möglichkeiten beschreiben, die die Benutzung von () samt typischer, seitens verschiedener MQL5-Entwickler vordefinierter Standardereignisse bietet. Beispiele zur Verwendung dieses Steuerungsprogramms finden sich bereits in verschiedenen MQL5-Artikeln sowie...
 
Carl Schreiber:

Na klar gibt's das, das sind klassische Breakout-Systeme. Such mal nach Breakout EA (oben rechts die Lupe in der Codebase), oder mit Google mt4 breakout EA.

Die Linien die der Kurs durchbrechen soll werden halt anders berechnet (Fraktale, Vortags-Hoch,-Tief, ...) da setzt Du dann Deinen Code hinein. Da hast Du dann auch gleich das Positionsmanagement!

Um  alles zu kontrollieren gibt es den Debugger (im Editor F5, eingestellt dort unter Werkzeuge => Optionen) Comment und Print!

Zusätzlich ergibt die Suche nach ChartEvent unter anderem diesen Link zu diesem Artikel: https://www.mql5.com/de/articles/689 (ist zwar für MQL5, aber viele Funktionen gibt es auch in MQL4).

Frage musst Du einen Linie ziehen? Genügen denn nicht einfach auch die Werte intern zu kennen und nur über Comment auszugeben?

Hallo Carl,

vielen Dank für Deine Tipps - haben mir echt weitergeholfen. Bin jetzt etwas weiter - werde bestimmt nochmals Deine Hilfe brauchen, denn bis zum Profi wird es bei mir nicht mehr reichen - aber icgh lerne dazu.

Deine Frage zu den Linien - ja ich brauche die beiden Linien - also die obere und untere gelbe Linie. Hintergrund: Die beiden gelben Linien sollen für Long und Short die Entrys sein - gleichzeitig will ich durch die beiden Linien auch die Range bestimmen.

Also den Abstand zwischen der oberen und unteren Linie - denn ob dieser Abstand 11 Punkte, 15 Punkte oder 20 Punkte ist - bestimmt auch wo der SL bzw TP hinkommt

Ich mache jetzt Schluß - denn morgenfrüh hab ich ein Meeting für einen längerfristigen Auftrag - muß ja schließlich das Geld was ich an der Börse verballer erstmal verdienen


Nochmals herzlichen Dank


Oldtimer507