Trailing Stop funktioniert nur bei Sell Order
Hallo Forum,
nachdem ich eigentlich bisher immer alle Probleme durch stöbern im Forum lösen konnte muss ich jetzt leider zum ersten Mal nach Hilfe rufen.
Ich habe ein Problem bei dem EA unten welches ich nicht lösen kann....
Der EA soll auf eine kleine Zeiteinheit (5Min / 15Min) angewendet werden und das Tradesignal soll durch kreuzende EMA´s in höheren Zeiteinheiten (1h/4h) entstehen.
Mit der Tradeeröffnung aus einer höheren Zeiteinheit habe ich kein Problem (zumindest glaube ich dass ).
Es geht darum, dass der Trailing Stop nur bei Sell Orders funktioniert und bei Buy Orders den Dienst verweigert.
Die Orders dürfen nur bei einem neuen Bar eröffnet und auch nur bei einem neuen Bar modifiziert werden.
Es darf auch immer nur eine Order offen sein.
Ich bekomme im Strategy Tester keine Error Codes ausgegeben, es kommen einfach keine Order Modify´s bei Buy Orders. Bei Sell Orders funktioniert es wie gesagt tadellos.
Ich quäle mich mit dem EA schon einige Zeit und komme nicht weiter.
- habe schon versucht die ganzen Doubles bei den OrderModify- und Order Send-Funktionen zu Normalisieren, ohne Erfolg.
- die OrderSend hatte ich schon in einer Void-Funktion statt in zwei
- ich hatte schon zwei AdjustTrail Funktionen anstatt einer
- habe schon sämtliche Variationen der Parameter (StopLoss, WhenToTrail, TrailAmount, TakeProfit) durch
- habe schon verschiedene Symbole durchprobiert (DAX, Währungspaare)--> immer das Selbe
Kurz gesagt: ich habe schon alles was ich mir denken konnte versucht und der Code unten stellt einfach die letzte Version dar.
Wäre für Hilfe sehr dankbar!
Die Beschreibungen, die ich beim Kompilieren bekomme:
(bei meinen anderen EA´s hatten diese Warnungen eigentlich nie Auswirkungen auf das Ergebnis)
PHP-Code:
return value of 'OrderSend' should be checked BEW_HighSig.mq4 119 5
return value of 'OrderSend' should be checked BEW_HighSig.mq4 124 4
return value of 'OrderModify' should be checked BEW_HighSig.mq4 142 19
return value of 'OrderModify' should be checked BEW_HighSig.mq4 157 18
0 error(s), 4 warning(s), compile time: 979 msec 1 5
PHP-Code:
extern double LotSize = 0.1;
extern double TakeProfit = 60;
extern double StopLoss = 120;
extern bool UseTrail = true;
extern double TrailAmount = 20;
extern double WhenToTrail = 20;
double pips;
int BarsOnChart;
double EMA_10;
double EMA_10vor;
//double EMA_20;
//double EMA_20vor;
double EMA_50;
double EMA_50vor;
//double EMA_100;
//double EMA_100vor;
//double EMA_200;
//double EMA_200vor;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//Modifizierung SL und TP für 5Digit Broker
double ticksize = MarketInfo(Symbol(),MODE_TICKSIZE);
if (ticksize==0.00001||ticksize==0.001||ticksize==0.1)
pips = ticksize*10;
else pips = ticksize;
//Setze die Variable BarsOnChart auf die tatsächliche Anzahl der Bars beim Start des EA
BarsOnChart=Bars;
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//Überprüfe ob eine Order offen ist und ob ein neuer Bar entstanden ist
if(OrdersTotal()==0)
{
if (Bars!=BarsOnChart)CheckEMA();
}
//Überprüfe ob Trailing Stop aktiviert ist, eine Order zum Modifizieren offen und ob ein neuer Bar entstanden ist
if(UseTrail==true&&OrdersTotal()>0)
{
if (Bars!=BarsOnChart)AdjustTrail();
}
//Aktualisierung der Variable BarsOnChart auf die tatsächliche Anzahl der Bars
BarsOnChart=Bars;
}
//Logik für das Tradesignal aus H1
void CheckEMA()
{
EMA_10 = iMA(NULL,PERIOD_H1,10,0,MODE_EMA,PRICE_CLOSE,0);
EMA_10vor = iMA(NULL,PERIOD_H1,10,0,MODE_EMA,PRICE_CLOSE,1);
//EMA_20 = iMA(NULL,PERIOD_H1,20,0,MODE_EMA,PRICE_CLOSE,0);
//EMA_20vor = iMA(NULL,PERIOD_H1,20,0,MODE_EMA,PRICE_CLOSE,1);
EMA_50 = iMA(NULL,PERIOD_H1,50,0,MODE_EMA,PRICE_CLOSE,0);
EMA_50vor = iMA(NULL,PERIOD_H1,50,0,MODE_EMA,PRICE_CLOSE,1);
//EMA_100 = iMA(NULL,PERIOD_H1,100,0,MODE_EMA,PRICE_CLOSE,0);
//EMA_100vor = iMA(NULL,PERIOD_H1,100,0,MODE_EMA,PRICE_CLOSE,1);
//EMA_200 = iMA(NULL,PERIOD_H1,200,0,MODE_EMA,PRICE_CLOSE,0);
//EMA_200vor = iMA(NULL,PERIOD_H1,200,0,MODE_EMA,PRICE_CLOSE,1);
if(EMA_10vor<EMA_50vor && EMA_10>EMA_50)OrderSendBuy();
if(EMA_10vor>EMA_50vor && EMA_10<EMA_50)OrderSendSell();
}
//Buy oder Sell Order senden
void OrderSendBuy()
{
OrderSend(Symbol(),OP_BUY,LotSize,Ask,10,Ask-StopLoss*pips,Ask+TakeProfit*pips,NULL,3116,0,clrGreen);
}
void OrderSendSell()
{
OrderSend(Symbol(),OP_SELL,LotSize,Bid,10,Bid+StopLoss*pips,Bid-TakeProfit*pips,NULL,3116,0,clrRed);
}
//Überprüfe ob der SL einer Order modifiziert werden muss
void AdjustTrail()
{
if(OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES))//Wähle Order aus
{
if(OrderType()==OP_BUY)//Prüfe ob Buy Order vorliegt
{
if((Bid-OrderOpenPrice())>(WhenToTrail*pips))//Prüfe ob StopLoss nachgezogen werden kann
{
if(OrderStopLoss()<(Bid-(TrailAmount*pips)))//Prüfe ob StopLoss in Traderichtung nachgezogen wird
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailAmount*pips,OrderTakeProfit(),0,clrNONE);//Order Modify
}
}
}
}
if(OrderSelect(OrderTicket(),SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()==OP_SELL)
{
if((OrderOpenPrice()-Ask)>(WhenToTrail*pips))
{
if(OrderStopLoss()>(Ask+(TrailAmount*pips)))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailAmount*pips,OrderTakeProfit(),0,clrNONE);
}
}
}
}
}
|