Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   BE Func setzt instant BE ohne auf im Profit zu achten (http://www.expert-advisor.com/forum/showthread.php?t=6619)

chesstigran 30.03.20 14:41

BE Func setzt instant BE ohne auf im Profit zu achten
 
Moin Leute,

Code:


double UpdateToBE = 50.00;

void UpdateBE()
{
 if(UpdateToBE <= 0) return;

 for(int i = OrdersTotal() - 1; i >= 0; i--)
  {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
      if(OrderType() == OP_BUY && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point)
          {
            orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
          }
                 
          if(OrderType() == OP_SELL && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point)
          {
            orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
          }
      }
    }
}

Mein Problem ist, dass er sobald der Trade auch nur einen Punkt im Profit ist das Stoploss instant auf breakeven setzt. Weiß jemand wo das Problem ist?

Ich habe ja definiert er soll es erst auf BE setzen wenn der Trade 50 Punkte im Profit ist, aber er beachtet es gar nicht. Vorschläge?

traderdoc 30.03.20 17:12

Code:

if(OrderType() == OP_BUY && OrderSymbol() == Symbol() && OrderOpenPrice() > OrderStopLoss() && Bid - OrderOpenPrice() >= UpdateToBE * Point)
  {
      orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  }
                 
if(OrderType() == OP_SELL && OrderSymbol() == Symbol() && OrderOpenPrice() < OrderStopLoss() && OrderOpenPrice() - Ask >= UpdateToBE * Point)
  {
      orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
  }

traderdoc

chesstigran 31.03.20 13:10

Ok danke dir, ich probiers aus hoffe das klappt :)

chesstigran 01.04.20 12:33

Nop, es hat wieder nicht geklappt. Noch irgendeine Idee woran es liegen könnte? Ich will mit meinem EA endlich auf Echtgeld gehen, aber ich arbeite seit 2 Monaten an dieser BE Func die nicht funktioniert ich bin echt am verzweifeln.

traderdoc 01.04.20 12:59

Dann liegt es an etwas anderem.

traderdoc

MA-EA 01.04.20 13:04

Hab gerade nicht viel Zeit, also sorry, wenns falsch ist...



Liegts vielleicht am Update-Wert von fünfzig! € / $ / Pfund / was auch immer? Versuch vielleicht mal nen int Wert und NormalizeDouble.

Vielleicht muss die Berechnung bei OrderModify auch in Klammern?
Code:

... && ( Bid - OrderOpenPrice() ) >= UpdateToBE * Point)...
Code:

...&& ( OrderOpenPrice() - Ask ) >= UpdateToBE * Point)...
Ich würd auch mal statt >= nur </> versuchen. Und ist da ein Vergleich bei Modify Sell nicht falsch herum?

MA-EA 01.04.20 20:07

Code:

extern int Order_Punkte_im_Profit = 50;
Code:

if( OrderType == OBBuy ... {

double Buy_BE = NormalizeDouble(OrderOpenPrice() + Order_im_Profit );

if( Ask > Buy_BE ) OrderModify(... , -Buy_SL = Buy_BE- , ...) } ;

So ungefähr würde ich das wohl machen. :rolleyes:

traderdoc 01.04.20 20:13

Dann würde es mit Sicherheit falsch sein.
An dem Code stimmt so gut wie gar nichts.

traderdoc

MA-EA 02.04.20 23:23

Natürlich nicht die exakt selben Zeichen. :rolleyes: Aber das Prinzip müsste funktionieren.

chesstigran 05.04.20 22:34

BE Funktion
 
Hey Leute,
danke erstmal für jeden der sich die Zeit genommen hat um mir zu helfen.

Ich hab einfach von Scratch selbst eine BE Func geschrieben, die funktioniert.
Daher wollte ich sie hier einfach mit euch teilen, damit auch andere Leute die damit strugglen hier eine Lösung haben:

Code:


double PIP; // Pips in Profit
double nd_PIP; // normalized Pips in Profit

void PipsInProfit() {      //Breakeven Func

for(int i = OrdersTotal() - 1; i >= 0; i--) {
  if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if(OrderType() == OP_BUY) {
        if(Bid > OrderOpenPrice()) { // falls der aktuelle Kaufpreis über dem OpenPrice deiner laufenden Order liegt rechne folgendes:
            PIP = Bid - OrderOpenPrice();
            nd_PIP = NormalizeDouble(PIP,Digits);
            //Comment(nd_PIP); dient zur Überprüfung ob er den Wert korrekt ausliest.
            }
            else {
            if(OrderOpenPrice() > Bid) {// falls der aktuelle Kaufpreis unter dem OpenPrice deiner laufenden Order liegt rechne folgendes:
              //return;
              PIP = OrderOpenPrice() - Bid;
              nd_PIP = NormalizeDouble(PIP,Digits);
              //Comment("-",nd_PIP);
              }
            }
          }
          else {
          if(OrderType() == OP_SELL) {
              if(Ask > OrderOpenPrice()) {// falls der aktuelle Verkaufspreis über dem OpenPrice deiner laufenden Order liegt rechne folgendes:
              //return;
              PIP = Ask - OrderOpenPrice();
              nd_PIP = NormalizeDouble(PIP,Digits);
              //Comment("-",nd_PIP);
              }
              else {
              if(OrderOpenPrice() > Ask) {// falls der aktuelle Verkaufspreis unter dem OpenPrice deiner laufenden Order liegt rechne folgendes:
              PIP = OrderOpenPrice() -  Ask;
              nd_PIP = NormalizeDouble(PIP,Digits);
              //Comment(nd_PIP);
              }
              }
          }
        }
// da jetzt jede Möglichkeit durchgespielt wurde,  und man alle Werte ob im minus oder im Plus durchgerechnet wurde wird jetzt die BE Func definiert. Wenn der PIP Wert nun +40 ist dann wird BE gesetzt.
        if(PIP == 40) {
        orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
        }
      }
    }
}

Hoffe ich konnte euch allen auch damit helfen :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:48 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum