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 |
wie muß der Aufruf der Funktion trailing() aussehen.
Dieter |
So, wie in Post #10 geschrieben:
int start() { ..... trailing(); ..... } int trailing() { ..... } traderdoc |
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 |
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 |
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 |
Alle Zeitangaben in WEZ +2. Es ist jetzt 15:22 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