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)
-   -   Stoploss (http://www.expert-advisor.com/forum/showthread.php?t=5599)

Kronenchakra 19.05.17 03:53

Zitat:

Zitat von MA-EA (Beitrag 38694)
Hab aber keine Ahnung, wie man den dann bei OrderSend einbaun soll. :confused:

Das ist ja leider das Problem :rolleyes:

MA-EA 19.05.17 15:44

Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von traderdoc (Beitrag 38690)
Ja, dann musst Du halt vor dem OrderSend() Abfragen lassen, ob TP = 0 ist.
Ist das der Fall, dann darf der TP in der OrderSend()-Funktion auch nur 0 sein.

Code:

//SL / TP "deaktivieren" wenn sie 0.0 betragen
if(Stoploss==0.0)buy_SL=0.0;
if(Stoploss==0.0)sell_SL=0.0;
if(Takeprofit==0.0)buy_TP=0.0;
if(Takeprofit==0.0)sell_TP=0.0;

Vielen Dank. Scheint zu funktionieren. :) Jedenfalls steht jetzt überall bei den offenen Order 0.0 tralala bei TP. :cool:

Aber kann man das auch irgendwie mit diesem minstoplevel vergleichen? Wenn TP < minstoplevel() dann TP = 0.nix? Hab eigentlich nur in den Parametern oben gerne Zahlen und drunter möglichst bloß Deklarationen und so. :rolleyes:

Wie auch immer. Nächster Schritt wär nen Trailing Stop. Scheint immer wieder zu passieren, dass, selbst wenn der Kurs Gewinn bringt, die Indikatoren erst aussteigen wenn der Trend so gut wie vorbei ist. Oder sogar schon in die Gegenrichtung geht und man noch Verlust macht, weil die Indis ja nur stündlich reagieren. :(

Raul0 21.05.17 05:28

Zitat:

Aber kann man das auch irgendwie mit diesem minstoplevel vergleichen? Wenn TP < minstoplevel() dann TP = 0.nix? Hab eigentlich nur in den Parametern oben gerne Zahlen und drunter möglichst bloß Deklarationen und so.
Code:

int STOPLEVEL = MarketInfo(Symbol(), MODE_STOPLEVEL);

if( Takeprofit < STOPLEVEL || Takeprofit == 0 ) dann usw.

Ist halt die Frage ob 4 oder 5 Digit Broker, da Takeprofit noch um eine Kommastelle versetzt wird bei 5 Digit. Vermutlich gibst Du Dein TP bei 30 Pips mit einer 300 ein, dann ist das ok so.

MA-EA 23.05.17 15:17

Liste der Anhänge anzeigen (Anzahl: 1)
Warum korrektes Runden von Stoploss und Takeprofit so wichtig ist | Code4Trading
Code:

extern double Stoploss=0.0;
extern double Takeprofit=0.0;

Code:

//SL / TP Berechnung
double minstoplevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
double openPrice=NormalizeDouble(MarketInfo(Symbol(),MODE_ASK),_Digits);
double buy_SL=NormalizeDouble(openPrice-Stoploss*_Point,_Digits);
double buy_TP=NormalizeDouble(openPrice+Takeprofit*_Point,_Digits);
double sell_SL=NormalizeDouble(openPrice+Stoploss*_Point,_Digits);
double sell_TP=NormalizeDouble(openPrice-Takeprofit*_Point,_Digits);

Wenn ich den Kram nicht eintrage, nutzt er wie gesagt 0 als Berechnungsgrundlage für den TP. Und ich denke auch mal fürn SL, würde der 0 betragen.
Code:

//SL / TP "deaktivieren" wenn sie 0.0 betragen
if(Stoploss==0.0)buy_SL=0.0;
if(Stoploss==0.0)sell_SL=0.0;
if(Trailing_Stop==0.0)buy_TS=0.0;
if(Trailing_Stop==0.0)sell_TS=0.0;
if(Takeprofit==0.0)buy_TP=0.0;
if(Takeprofit==0.0)sell_TP=0.0;

Jedenfalls scheint er so zu funktionieren. :cool:

Jedenfalls soll jetzt nen Trailing Stop rein. Und zwar, indem mit OrderModify der SL immer wieder hinterher gezogen wird. Ist im Großen und Ganzen klar, nur weiß ich nicht, wie man das jetzt berechnet. :confused:

Kronenchakra 23.05.17 21:08

Na das sieht ja schon nach was aus! ;)
Kleine Korrektur: Du brauchst sowohl Ask als auch Bid.
Code:

double openAsk=NormalizeDouble(MarketInfo(Symbol(),MODE_ASK),_Digits);
double openBid=NormalizeDouble(MarketInfo(Symbol(),MODE_BID),_Digits);
double buy_SL =NormalizeDouble(openAsk-Stoploss  *_Point,_Digits);
double buy_TP =NormalizeDouble(openAsk+Takeprofit*_Point,_Digits);
double sell_SL=NormalizeDouble(openBid+Stoploss  *_Point,_Digits);
double sell_TP=NormalizeDouble(openBid-Takeprofit*_Point,_Digits);

Sieht bei mir sehr ähnlich aus:
Code:

//+------------------------------------------------------------------+
//| Calculate SL, TS, TP                                            |
//+------------------------------------------------------------------+
void CalcStopsLong ()
{
  if(SL>0) SL_Buy =NormalizeDouble(Ask-SL*_Point,_Digits);
  if(TS>0) TS_Buy =NormalizeDouble(Ask-TS*_Point,_Digits);
  if(TP>0) TP_Buy =NormalizeDouble(Ask+TP*_Point,_Digits);
}

void CalcStopsShort()
{
  if(SL>0) SL_Sell=NormalizeDouble(Bid+SL*_Point,_Digits);
  if(TS>0) TS_Sell=NormalizeDouble(Bid+TS*_Point,_Digits);
  if(TP>0) TP_Sell=NormalizeDouble(Bid-TP*_Point,_Digits);
}

Den Trailingstop aktualisierst du laufend, und wenn die Position im Gewinn ist und der TS über dem Einkaufspreis (jetzt für eine Long Order), änderst du mit OrderModify(...) den StopLoss Level.
Eine Schrittweite bzw ein Schwellwert (zb OrderStep) sollte auch noch definiert und geprüft werden, damit OrderModify() nicht bei jeder minimalsten Änderung ausgelöst wird.

Ich hoffe dir weitergeholfen zu haben. :)

traderdoc 23.05.17 21:46

@Kronenchakra, da gehst Du aber bei Dir stillschweigend davon aus, dass die Werte der Variablen SL, TS und TP bereits ggf. auf den 5-Digit-Modus angepasst wurden.

traderdoc

Kronenchakra 24.05.17 01:00

Ja klar, ich verkauf das ja nicht und ich habe meinen Broker.
Warum soll ich es mir dann komplizierter machen ;)
LG Otto

traderdoc 24.05.17 09:58

Das ist auch klar. Als Lehrbeispiel sollte man da evtl. doch darauf verweisen, für die nicht so Sattelfesten.

traderdoc

MA-EA 25.05.17 20:29

Liste der Anhänge anzeigen (Anzahl: 1)
Abend.

Es passiert immer wieder, was ich ein wenig befürchtet hatte. Er richtet sich im H1 nach Bar 1. Wenn die nen Signal gibt, steigt er ein. Das auch, wenn der Kurs gerade in die andere Richtung gedreht hat und in den Verlust geht. Er geht durch den SL, Bar 1 gibt aber immer noch für den Rest der Stunde das Einstiegssignal. Welches er auch fröhlich befolgt bis zum Sankt Nimmerleinstag... :confused:

Hatte in einer Vers. zwar auch die Indis auf Bar 0 angesetzt. Allerdings könnten die ja wieder für nen viel zu späten Einstieg sorgen, wenn der Trend schon wieder vorbei ist und nix als Spesen bleiben... :(

Vielleicht den SL höher einstellen? Steht derzeit auf 80.0 .

MA-EA 03.06.17 11:56

Wollt mir erst wieder hochwissenschaftlich das Hirn verrenken, aber: Geht der ganze Mist mit mql5 vielleicht einfacher? Bzw. sollte man grundsätzlich auf mql5 umsteigen?


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:11 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