|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
||||
und hier noch mal ein update der letzten Stunde ....
hier wurde zumindestens 1x ein SL gesetzt sl: 10563.50 tp: 0.00 2015.01.28 17:30:03.254 '2715450': order was opened : #21941794 sell 0.10 EUREX.FDX at 10697.50 sl: 0.00 tp: 0.00 2015.01.28 17:30:03.205 '2715450': order sell market 0.10 EUREX.FDX sl: 0.00 tp: 0.00 2015.01.28 17:30:03.204 '2715450': order #21941038 buy 0.10 EUREX.FDX at 10691.75 sl: 10563.50 tp: 0.00 closed at price 10697.50 2015.01.28 17:30:02.807 '2715450': close order #21941038 buy 0.10 EUREX.FDX at 10691.75 sl: 10563.50 tp: 0.00 at price 0.00 2015.01.28 16:17:00.879 '2715450': order #21941038 buy 0.10 EUREX.FDX at 10691.75 was modified -> sl: 10563.50 tp: 0.00 2015.01.28 16:17:00.785 '2715450': modify order #21941038 buy 0.10 EUREX.FDX at 10691.75 sl: 0.00 tp: 0.00 -> sl: 10563.50 tp: 0.00 2015.01.28 16:17:00.785 '2715450': order was opened : #21941038 buy 0.10 EUREX.FDX at 10691.75 sl: 0.00 tp: 0.00 2015.01.28 16:17:00.724 '2715450': order buy market 0.10 EUREX.FDX sl: 0.00 tp: 0.00 |
|
|||
Gab es ansonsten Fehlermeldungen?
Um den Verlauf im Programm zu kontrollieren immer mal an bestimmten Stellen ein Alert(...) setzen, dann kann man sehen, ob das Programm überhaupt an dieser Stelle entlang lief und welchen Wert bestimmte Variablen besitzen. Also z.B. an der Stelle nach der Nachkommaberechnung: Alert (DoubleToStr(StopLoss, 2)); bzw. Alert (DoubleToStr(TakeProfit, 2)); sollten die Alerts mit identischen Variablennamen an verschiedenen Stellen gleichzeitig gesetzt werden, dann empfiehlt sich eine Unterscheidung durch eine vor- oder nachgestellte Ziffer oder Buchstaben, z.B.: Alert ("1: ", DoubleToStr(StopLoss, 2)); Dann kann man ganz genu sehen, wo das Programm vorbei gelaufen war. Oder auch hier ein Alert einbauen, um festzustellen, ob das Programm hier reinspringt: if(OrderCloseTime()==0 && OrderTakeProfit()==0) { Alert ("TP1"); OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderSt opLoss(),TakeProfit,0,Orange); Print("TP für Long Order gesetzt bei = ",TakeProfit); } usw. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
||||
ne, ansonsten gab es keine Fehlermeldungen
aber das mit der Alert Funktion ist ne gute idee hatte das eigentlich versucht mit Print umzusetzten .... hab jetzt mal ein bisschen mit der Alert Funktion herumgespielt und bemerkt das z.B. die Nachkomma bei jedem Tick berechnet werden .... war dann ne richtige Flut im Alert Fenster ... deshalb hab ich die nachkomma Berechnungen jetzt mal in die if==true Funktionen mit eingebaut .... die Variablen werd ich auch noch differenzieren - nur zur Sicherheit dann lass ich das teil morgen noch mal nen testlauf machen Code:
// SL bei Long Deals setzen if (OrderSelect(LongOrder,SELECT_BY_TICKET)==true) { if(OrderCloseTime()==0 && OrderStopLoss()==0) { // SL bei Long Deals setzen - Erst aber umrechnung für 0,25 Schritt Broker // Umrechnung SL_Prozent in 0,25er Schritten StoppLoss = NormalizeDouble(OrderOpenPrice()/(1+(SL_Prozent/100.0)),2); SL = (int)StoppLoss; //zur Sicherheit! NachkommaSL = StoppLoss - SL; if (NachkommaSL <= 0.12) StoppLoss = SL; if (NachkommaSL > 0.12 && NachkommaSL <= 0.37) StoppLoss = SL + 0.25; if (NachkommaSL > 0.37 && NachkommaSL <= 0.62) StoppLoss = SL + 0.5; if (NachkommaSL > 0.62 && NachkommaSL <= 0.87) StoppLoss = SL + 0.75; if (NachkommaSL > 0.87) StoppLoss = SL + 1.0; Alert ("NachkommaSL bei LD = ",DoubleToStr(StoppLoss, 2)); //StoppLoss = NormalizeDouble(OrderOpenPrice()/(1+(SL_Prozent/100)),Digits);// nur bei ohne Umrechnung in 0,25er Schritten OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoss,OrderTakeProfit(),0,Yellow); Print("SL für Long Order gesetzt bei = ",StoppLoss); Alert ("SL für Long Order gesetzt ",DoubleToStr(StoppLoss, 2)); } } |
|
|||
falsch berechnete StoppLoss
|
|
|||
Code:
extern double SL_Prozent = 0.5; // StopLoos in Prozent |
|
|||
Code:
//+------------------------------------------------------------------+ //| The script prints information on symbol | //+------------------------------------------------------------------+ void OnStart() { Print("Stop level in points=",MarketInfo(Symbol(),MODE_STOPLEVEL)); } konto, demo oder real? wenn demo - login, pass, server |
|
|||
Code:
//+------------------------------------------------------------------+ //| daxV1.mq4 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict int countB,countS; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- countB=0; countS=0; for(int pos=OrdersTotal()-1; pos>=0; pos--) { if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { countB++; if(OrderStopLoss()==0) { bool res=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()-(OrderOpenPrice()/100)*0.5,Digits),0,0,Blue); if(!res) Print("Error in OrderModify. Error code=",GetLastError()); else Print("Order modified successfully."); } } if(OrderType()==OP_SELL) { countS++; if(OrderStopLoss()==0) { bool res=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(OrderOpenPrice()+(OrderOpenPrice()/100)*0.5,Digits),0,0,Blue); if(!res) Print("Error in OrderModify. Error code=",GetLastError()); else Print("Order modified successfully."); } } } } //--------------------------------------------------------------+ if(countB==0) int ticket=OrderSend(Symbol(),OP_BUY,1.0,Ask,30,0,0,"buy",16384,0,clrGreen); if(countS==0) int ticket=OrderSend(Symbol(),OP_SELL,1.0,Bid,30,0,0,"sell",16384,0,clrGreen); //--------------------------------------------------------------+ } //+------------------------------------------------------------------+ |
|
||||
nachdem ich die von mir erwähnten änderungen vorgenommen habe klappt nun alles so wie es soll
Zitat:
|
|
||||
Versteh nicht was du mit "falsch berechnete StoppLoss" meinst
wie kommst du darauf? Zitat:
Code:
StoppLoss = NormalizeDouble(OrderOpenPrice()/(1+(SL_Prozent/100.0)),2); |
Lesezeichen |
Stichworte |
digits, digits problem, mql4, nachkomma stellen, nachkomma stellen problem, nachkommastellen, programmierung, programmierung metatrader |
|
|