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

dieter23 24.08.14 15:12

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;
}

dieter23 24.08.14 15:19

gibt es vielleicht innerhalb der Routine einen Fehler (Schleife oder Klammer). Beim compilieren wird kein error angezeigt.

Dieter

traderdoc 24.08.14 17:56

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

dieter23 24.08.14 23:14

wie muß der Aufruf der Funktion trailing() aussehen.

Dieter

traderdoc 24.08.14 23:35

So, wie in Post #10 geschrieben:

int start() {
.....
trailing();
.....
}

int trailing() {
.....
}

traderdoc

dieter23 25.08.14 07:06

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;

}

traderdoc 25.08.14 08:30

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

traderdoc 25.08.14 08:41

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

dieter23 25.08.14 08:47

ok werde es versuchen.
Danke
Dieter

traderdoc 25.08.14 18:42

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