|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
habe die Routine jetzt inerhalb von int start() gelegt. Funktioniert aber trotzdem nicht.
int trailing() { for (int i = 0; i < OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_BUY) { if ((Bid - OrderOpenPrice()) > TSTP) { if (OrderStopLoss() < (Bid - TSTP)) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSTP, OrderTakeProfit(), Red); }}}} if (OrderType() == OP_SELL) { if ((OrderOpenPrice() - Ask) > TrailingStop * PointValue) { if ((OrderStopLoss() > (Ask + TrailingStop * PointValue)) || (OrderStopLoss() == 0)) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TSTP, OrderTakeProfit(), Red); }}} return; } |
|
|||
gibt es vielleicht innerhalb der Routine einen Fehler (Schleife oder Klammer). Beim compilieren wird kein error angezeigt.
Dieter |
|
|||
Was ist TSTP?
Ist der Sachverhalt des 5-DigitBrokers verarbeitet? Was soll int trailing() in der Routine start()? Die Routine selber muß außerhalb!! von start() {...} liegen. Der Aufruf!!! der Funktion trailing(); muß innerhalb!! von start() liegen. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
wie muß der Aufruf der Funktion trailing() aussehen.
Dieter |
|
|||
So, wie in Post #10 geschrieben:
int start() { ..... trailing(); ..... } int trailing() { ..... } traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
klappt leider nicht.
Hier mal die koml. int start() Funktion. double TSTP = TrailingStop * PointValue; PointValue = MarketInfo(OrderSymbol(), MODE_POINT); //-------------------------------------------------------------------+ int init() { if(Digits == 3 || Digits == 5) { string BrokerType = "5-Digit Broker"; BrokerMultiplier = 10; } } // int start() { Comment("Copyright © 2014 *** Robot_Dax ***"+"\n"+ "TimeStart " , TimeStart, "\n", "TimeEnd " , TimeEnd, "\n", "MaxPrice ", Max_Price, "\n", "MinPrice " , Min_Price, "\n", "Akt.Preis ", Ask, "\n"); if (MoneyManagement) { if (Risk<1 || Risk>100) { Comment("Invalid Risk Value."); return(0); } else { Lots=MathFloor((AccountFreeMargin()*AccountLeverag e()*Risk*Point*BrokerMultiplier*100)/(Ask*MarketInfo(Symbol(),MODE_LOTSIZE)*MarketInfo( Symbol(),MODE_MINLOT)))*MarketInfo(Symbol(),MODE_M INLOT); } } datetime Time_Start = StrToTime(StringConcatenate(Day(),".",Month(),".", Year()," ",TimeStart, ":00")); datetime Time_End = StrToTime(StringConcatenate(Day(),".",Month(),".", Year()," ",TimeEnd, ":00")); datetime Time_CloseOrder = StrToTime(StringConcatenate(Day(),".",Month(),".", Year()," ",TimeCloseOrder,":00")); if (Time_CloseOrder>Time_End) if (CurTime()>=Time_CloseOrder) CLOSEORDERS(); int tip; if (Orders>OrdersTotal()) tip=CloseOrder(); Orders=OrdersTotal(); if (ORDERS(0)==0 && tip==0 && (CurTime()<Time_CloseOrder || Time_CloseOrder<=Time_End) && TradeDay!=TimeDay(CurTime())) { int BarStart = iBarShift(NULL,0,Time_Start,false); int BarEnd = iBarShift(NULL,0,Time_End ,false); Max_Price=iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,B arStart-BarEnd,BarEnd)); Min_Price=iLow (NULL,0,iLowest (NULL,0,MODE_LOW, BarStart-BarEnd,BarEnd)); if (TimeCurrent()>Time_End && ObjectFind("bar0"+Time_End)==-1) { ObjectCreate("bar0"+Time_End, OBJ_RECTANGLE, 0, 0,0, 0,0); ObjectSet ("bar0"+Time_End, OBJPROP_STYLE, STYLE_SOLID); ObjectSet ("bar0"+Time_End, OBJPROP_COLOR, Blue); ObjectSet ("bar0"+Time_End, OBJPROP_BACK, true); ObjectSet ("bar0"+Time_End, OBJPROP_TIME1 ,Time_Start); ObjectSet ("bar0"+Time_End, OBJPROP_PRICE1,Max_Price); ObjectSet ("bar0"+Time_End, OBJPROP_TIME2 ,Time_End); ObjectSet ("bar0"+Time_End, OBJPROP_PRICE2,Min_Price); } if(Bid > Max_Price && order == 0) { OrderSend(Symbol(), OP_BUY, Lots, Ask,Slippage, Ask-SL,Ask+TP, "br", Magic, 0, Green); order=order+1; } if(Ask < Min_Price && order == 0) { OrderSend(Symbol(), OP_SELL, Lots, Bid,Slippage, Bid+SL,Bid-TP, "br", Magic, 0, Green); order=order+1; } if (order > 0) { trailing(); } return(0); } if (No_Loss) No_Loss(); if (tip==1 && TradeDay!=TimeDay(CurTime())) { Lots=Lots*K_martin; if (tipOrders==0) OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP ,NULL,Magic,Blue); if (tipOrders==1) OrderSend(Symbol(),OP_BUY ,Lots,Ask,Slippage,SL,TP,NULL,Magic,Blue); } return(0); } //+-----------------------------------------------------------------+ int trailing() { for (int i = 0; i < OrdersTotal(); i++) { OrderSelect(i, SELECT_BY_POS, MODE_TRADES); if (OrderType() == OP_BUY) { if ((Bid - OrderOpenPrice()) > TSTP) { if (OrderStopLoss() < (Bid - TSTP)) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid - TSTP, OrderTakeProfit(), Red); }}}} if (OrderType() == OP_SELL) { if ((OrderOpenPrice() - Ask) > TrailingStop * PointValue) { if ((OrderStopLoss() > (Ask + TrailingStop * PointValue)) || (OrderStopLoss() == 0)) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask + TSTP, OrderTakeProfit(), Red); }}} return; } |
|
|||
Ja und nun müssen alle Pipwerte, wie z.B. TrailingStop mit dem Multiplier auch multipliziert werden, weil man z.B. in den externen Variablen für den TrailingStop 20 Pips eingibt, der 5-Digitbroker aber mit 5 und nicht mit 4 Stellen nach dem Komma rechnet. D.h. bei ihn entsprechen 20 Pips 200!
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Sollte das dann immer noch nicht gehen, mußt Du mittels
Alert(...); dem Fehler schrittweise auf die Spur gehen. D.h. Ich würde direkt unter int trailing() schreiben: Alert("Test"); Wenn der EA überhaupt in diese Funktion springt, dann muß diese Meldung kommen! Kommt sie nicht, wird aus welchen Gründen auch immer diese Funktion nicht angesprungen. Kommt sie, dann wird der Fehler in der Trailing-Funktion liegen. Dann wird Alert() weiter nach unten gesetzt. Mit der Alert()-Funktion können auch Variablen ausgelesen werden, z.B TSTP oder auch Bid - OrderOpenPrice(). Und dann immer weiter vortasten. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
ok werde es versuchen.
Danke Dieter |
|
|||
In welcher Funktion steht das eigentlich?
double TSTP = TrailingStop * PointValue; PointValue = MarketInfo(OrderSymbol(), MODE_POINT); Und wenn schon, dann in umgekehrter Reihenfolge! traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
Lesezeichen |
Stichworte |
mql4, programmierung, programmierung metatrader, trailing stop, trailingstop |
|
|