|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Also persönlich finde ich mql4 einfacher. Mql5 ist technisch klarer definiert und verlangt daher eine konkrete Vorgehensweise.
|
|
|||
Hallo.
Wofür genau steht Code:
double OrderOpenPrice(); Schätze mal, das bedeutet den Kurs, zu dem die Order geöffnet wurde. Aber ist da auch schon Spread drin? Kommission? Was auch immer? |
|
|||
Richtig, OrderOpenPrice() liefert den Einstiegspreis der selektierten Order.
Der Preis ist bei Marktausführung Ask / Bid, je nachdem welche Richtung ohne "einkalkulierten" Spread. |
|
|||
Danke.
Hat noch nie Jemand erlebt, dass ein EA, nach dem der SL benutzt wurde, wieder ne Verlust-Order öffnet, weil das Einstiegssignal noch aktuell ist? Jetzt mal als Bsp.: Er öffnet im H1 nen Buy im EURUSD, weil jetzt mal der 50er GD über dem 100er GD ist. Der Kurs geht aber nach unten. Deswegen schließt der SL die Order nach einigen Minuten. Der 50er GD ist aber immer noch über dem 100er GD, so dass der EA gleich wieder nen Long öffnet. Der nach einigen Minuten wieder den SL erreicht und dicht gemacht wird. Die GDs sagen aber immer noch "Du musst long gehn", was er auch macht. Und das geht so weiter, solange der 50er über dem 100er ist. Was kann man dagegen machen? |
|
|||
Zitat:
Zitat:
Falls doch, dann im Code entsprechend Weichen stellen, damit das von dir beschriebene nicht passiert... Wenn du unbedingt anhand dieser Signale long gehen willst, dann musst du entsprechend auf solche Fehlsignale reagieren. Oder, ums noch einfacher zu machen, du fragst die Orderhistorie nach den letzten Trades ab, ob die vor kurzem durch deinen EA gesetzt, und durch entsprechendem "Fehlsignal" geschlossen wurden. Ich würde es allerdings bei der Quelle angehen, deinen GD und deren Einstellungen. Vielleicht sind diese ja doch nicht so optimal für einen Trade. Kurz noch zum Code: Kann es sein, das der großteil der externen Variablen reine Info / Stütze / Hilfe für dich sind und keinen echten Wert im Code haben? Code:
extern int MaxSpread=40; =================== Bei Code:
double OOP=OrderOpenPrice(); =================== Code:
if (Digits<=3)PointSet=0.01; else PointSet=0.0001; if (Digits<=1)PointSet=1; Code:
if(Digits<=1)PointSet = 1; else if(Digits<=3)PointSet = 0.01; else PointSet = 0.0001; Code:
if (TimeFrame==0)TimeFrame=NULL; =================== Code:
Lots=MathMax(MathMin(Lots,MarketInfo(Symbol(),MODE_MAXLOT)),MarketInfo(Symbol(),MODE_MINLOT)); =================== Code:
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; Code:
if(Stoploss==0.0) {buy_SL=0.0; sell_SL=0.0;} if(Takeprofit==0.0) {buy_TP=0.0; sell_TP=0.0;} Code:
datetime F=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + Open_Orders_From); datetime T=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + Open_Orders_Till); Bei "Start Indikatoren auslesen" sind die geschweiften Klammern eher ein optischer Block als notwendig. Die Variable "CloseTicket" nutzt du nicht. So, kurz mal meinen Senf gegeben Du und andere mögen es vielleicht, aber ich finde so formatierten Code eher nicht so gut leserlich. PS: Wieso wechselst du nicht zu der besseren beschreibung "OnTick()"? |
|
|||
Mit SL 150 scheints zu gehn.
Mein Versuch eines Trailing-Stops. Ist der Sch... so zu gebrauchen? Oder überhaupt richtig? Code:
//Globale Variablen //Sicherheitsausstieg extern double Stoploss=150.0; extern string TS="true=Yes / false=No"; extern bool Use_Trailing_Stop=true; extern double Takeprofit=0.0; Code:
//SL TP Deklas 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); //------------------------------------------------------------------------------------------------------------- //Trailing Stop if(Use_Trailing_Stop==true){ if(Ask>buy_SL)buy_SL=NormalizeDouble(openPrice-Stoploss*_Point,_Digits); if(Ask<sell_SL)sell_SL=NormalizeDouble(openPrice+Stoploss*_Point,_Digits);} |
|
|||
Grundsätzlich würde es funktionieren, aber:
1. Schau dir bitte nochmal etwas genauer an, was es mit Ask & Bid in Bezug auf eine Order auf sich hat. 2. Ich würde dir echt empfehlen einen Abstand zu definieren, in dem der SL nachgezogen wird. So wie du es machst, würde er bei jeder kleinsten Kursveränderung den SL nachziehen. Mal abgesehen davon, dasss es sinnlos wäre, sehen es auch die Broker ungerne, wenn quasi "durchgehend" ne OrderModify gesendet wird. |
Lesezeichen |
Stichworte |
mql4, programmierung, programmierung metatrader, programmierung mql4, sl, stoploss, takeprofit, tp |
|
|