OrderSend - Buy geht, Sell nicht

 

Hallo Leute,

ich bin grade an meinem ersten EA dran. Ich habe ein Problem bei der Funktion OrderSend. Allerdings nur bei SELL. BUY geht.

Der Fehler ist 130. Das StopLoss Level wäre fehlerhaft. Trage ich anstatt der Variable eine 0 ein, geht es.

Hier mal der Code:

    //--- get minimum stop level
   double level_tp=500;
   double level_sl=500;
//--- calculated SL and TP prices must be normalized
   double stoploss_buy=NormalizeDouble(Ask-level_sl*Point,Digits);
   double takeprofit_buy=NormalizeDouble(Ask+level_tp*Point,Digits);
   
   double stoploss_sell=NormalizeDouble(Bid-level_sl*Point,Digits);
   double takeprofit_sell=NormalizeDouble(Bid+level_tp*Point,Digits);
//--- place market order to buy 1 lot  
   
   
   if(0==1) // Absichtlich deaktiviert - Zu Testzwecken
   if((High[1]>High[old_max])) 
     {
     OrderSend(Symbol(),OP_BUY,1,Ask,0,stoploss_buy,takeprofit_buy,"EA","100",0,Green);
     } 
   
   if((Low[1]<Low[old_min]))
     {
     OrderSend(Symbol(),OP_SELL,1,Bid,0,stoploss_sell,takeprofit_sell,"EA","100",0,Red);
     }

Jemand eine Idee?


Gruß

 

Hallo Marc , 

 

der Fehler sagt dir das den Mindestabstand in Pips nicht eingehalten hast. Der variiert von Broker zu Broker.

 

Lösung: Stop weiter weg setzen.

 

 

Gruß 

 

Könnte am großen Spread vom Wochenende liegen und daran, dass Du SL und TP für Sell vom falschen Preis rechnest.

Sell = Bid => Exit Sell = Buy = Ask!!

Kriegst Du einen 130er Fehler? Lass Dir mit dem Debugger mal die Preise zeigen!

 
Danke für eure Antworten.

In meinem Code nutze ich ein StopLoss von 500Pip´s. Bin bei meiner Suche auf auf den Hinweis gestoßen das der StopLoss zu nahe wäre.

Habe auch 50Pips probiert sowie 100.

Bei Buy geht jeder Wert.


Ich lasse den EA im Backtest über einen Monat laufen mit einem fixen Spread von 2. Ich habe mir die Preise mit Print ausgeben lassen. Diese liegen 500 Pis drüber und drunter.


2016.09.25 12:35:48.628    2016.09.12 00:25  Simul USDJPY,M1: SL:102.091 , Bid: 102.589

 

Setz den Breakpoint bei Ordersend für Sell und schaue dir die Variable "stoploss_sell" an und berichte.

 

Bei 0 wird kein Stop gesetzt 

 

In einer anderen Installation von MT4 funktioniert der Code.

Ich habe MT4 von AdmiralMarkets. Da geht es nicht.


In der "normalen" MT4 installation geht es.


Edit: Habe es Debuggt. Ergibt die gleichen Ergebnisse wie mein Print aufruf.

 

Fehler gefunden.


StopLoss muss bei Sell ja größer sein. Anders wie bei Buy. Da muss StopLoss kleiner sein. Dämlich ^^


Trotzdem Danke :)

 

1) Welchen Fehler (-meldung) gibt es?

2) Lass Dir mal MarketInfo(...MODE_STOPLEVEL ) zeigen!



 

Der Rat mit dem Debugger war schon mit Hintergrund. Noch kannst du das mit Print händeln.

Aber jeder wie er will.

 

hiermit kannst du dir das Stoplevel ausgeben lassen . Teste das mal ,müsste auf den beiden Installationen verschiedene Ergebnisse bringen.

 

 

//+------------------------------------------------------------------+
//| The script prints information on symbol                          |
//+------------------------------------------------------------------+
void OnStart()
  {
   Print("Symbol=",Symbol());
   Print("Low day price=",MarketInfo(Symbol(),MODE_LOW));
   Print("High day price=",MarketInfo(Symbol(),MODE_HIGH));
   Print("The last incoming tick time=",(MarketInfo(Symbol(),MODE_TIME)));
   Print("Last incoming bid price=",MarketInfo(Symbol(),MODE_BID));
   Print("Last incoming ask price=",MarketInfo(Symbol(),MODE_ASK));
   Print("Point size in the quote currency=",MarketInfo(Symbol(),MODE_POINT));
   Print("Digits after decimal point=",MarketInfo(Symbol(),MODE_DIGITS));
   Print("Spread value in points=",MarketInfo(Symbol(),MODE_SPREAD));
   Print("Stop level in points=",MarketInfo(Symbol(),MODE_STOPLEVEL));
   Print("Lot size in the base currency=",MarketInfo(Symbol(),MODE_LOTSIZE));
   Print("Tick value in the deposit currency=",MarketInfo(Symbol(),MODE_TICKVALUE));
   Print("Tick size in points=",MarketInfo(Symbol(),MODE_TICKSIZE)); 
   Print("Swap of the buy order=",MarketInfo(Symbol(),MODE_SWAPLONG));
   Print("Swap of the sell order=",MarketInfo(Symbol(),MODE_SWAPSHORT));
   Print("Market starting date (for futures)=",MarketInfo(Symbol(),MODE_STARTING));
   Print("Market expiration date (for futures)=",MarketInfo(Symbol(),MODE_EXPIRATION));
   Print("Trade is allowed for the symbol=",MarketInfo(Symbol(),MODE_TRADEALLOWED));
   Print("Minimum permitted amount of a lot=",MarketInfo(Symbol(),MODE_MINLOT));
   Print("Step for changing lots=",MarketInfo(Symbol(),MODE_LOTSTEP));
   Print("Maximum permitted amount of a lot=",MarketInfo(Symbol(),MODE_MAXLOT));
   Print("Swap calculation method=",MarketInfo(Symbol(),MODE_SWAPTYPE));
   Print("Profit calculation mode=",MarketInfo(Symbol(),MODE_PROFITCALCMODE));
   Print("Margin calculation mode=",MarketInfo(Symbol(),MODE_MARGINCALCMODE));
   Print("Initial margin requirements for 1 lot=",MarketInfo(Symbol(),MODE_MARGININIT));
   Print("Margin to maintain open orders calculated for 1 lot=",MarketInfo(Symbol(),MODE_MARGINMAINTENANCE));
   Print("Hedged margin calculated for 1 lot=",MarketInfo(Symbol(),MODE_MARGINHEDGED));
   Print("Free margin required to open 1 lot for buying=",MarketInfo(Symbol(),MODE_MARGINREQUIRED));
   Print("Order freeze level in points=",MarketInfo(Symbol(),MODE_FREEZELEVEL)); 
  }
 
Christian:

Der Rat mit dem Debugger war schon mit Hintergrund. Noch kannst du das mit Print händeln.

Aber jeder wie er will.

 

hiermit kannst du dir das Stoplevel ausgeben lassen . Teste das mal ,müsste auf den beiden Installationen verschiedene Ergebnisse bringen.

 

 

Ich hatte es erst mit Print versucht, da ich so schon ein paar Fehlern auf die Schliche gekommen bin.
Mit dem Debugger habe ich bis eben noch nie probiert.

Aber die Information ist hilfreich. Werde es mal probieren.
 
Marc1993:

Hallo Leute,

ich bin grade an meinem ersten EA dran. Ich habe ein Problem bei der Funktion OrderSend. Allerdings nur bei SELL. BUY geht.

Der Fehler ist 130. Das StopLoss Level wäre fehlerhaft. Trage ich anstatt der Variable eine 0 ein, geht es.

Hier mal der Code:

Jemand eine Idee?


Gruß

Du musst die +/- umdrehen bei sell
   double stoploss_sell=NormalizeDouble(Bid+level_sl*Point,Digits);
   double takeprofit_sell=NormalizeDouble(Bid-level_tp*Point,Digits);
Grund der Beschwerde: