trailing SL in SMA Crossing EA einbauen & dauernde Short ORders

 

Hallo zusammen,


bin grade beim erstellen eines EA auf Basis von sich kreuzenden MA.

und zwar habe ich aktuell 2 Probleme, an denen ich grade verzweifel:

- ich finde keine Anleitung für einen Trailing SL. die, die ich gefunden habe, funktionieren weder isoliert in einem eigenen EA noch kopiert in meinen. hat da wer eine brauchbare Anleitung?

- soweit funktioniert der EA auf der Long Seite gut, nur sobald ich quasi verkehrt die Short Seite einbaue, geht der EA immer short, sobald es ihn ausstoppt und er eig keine neue Short order eingeben soll. und dazu dann noch long obwohl keine Überkreuzung vorliegt.

vielen Dank!

DAniel


der Code für Problem 2 sowie der Screenshot wäre hier:




#include  <Trade\Trade.mqh>

CTrade trade;



int OnInit()  {

Print("OnInit");

   return(INIT_SUCCEEDED);
     }

void OnDeinit(const int reason)
  {
Print("OnDeinit");
  
  }
 
 
void OnTick()  {

static datetime timestamp;
datetime time = iTime(_Symbol, PERIOD_CURRENT,0);
if(timestamp != time){
   timestamp = time;

//int ma shift ist die MA periode, shift period auf 0 lassen, mode sma ist sma od ema bspw, price close ist schlusskurse f kalkulation
static int handleSlowMa = iMA(_Symbol,PERIOD_CURRENT,200,0,MODE_SMA,PRICE_CLOSE);
double slowMaArray[];
CopyBuffer(handleSlowMa,0,1,2,slowMaArray);
ArraySetAsSeries(slowMaArray,true);


static int handleFastMa = iMA(_Symbol,PERIOD_CURRENT,30,0,MODE_SMA,PRICE_CLOSE);
double FastMaArray[];
CopyBuffer(handleFastMa,0,1,2,FastMaArray);
ArraySetAsSeries(FastMaArray,true);

if(FastMaArray[0] > slowMaArray[0] && FastMaArray[1] < slowMaArray[1]){
Print("fast MA ist now > than slow ma");
double ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
double sl = ask -100 * SymbolInfoDouble(_Symbol, SYMBOL_POINT);
double tp = ask +100 * SymbolInfoDouble(_Symbol, SYMBOL_POINT);
//lot grosse, symbol, double ask nimmt dann den ask preis, sL aktueller ask preis minus 100 pips bspw
trade.Buy(0.10,_Symbol,ask,sl,tp,"this is a buy");

}


// aktuell ausgeblendet, da der EA damit immer short geht
//if(FastMaArray[0] < slowMaArray[0] && FastMaArray[1] > slowMaArray[1]){
//Print("fast MA ist not < than slow ma"); }
//double bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);
//double sl = bid +100 * SymbolInfoDouble(_Symbol, SYMBOL_POINT);
//double tp = bid -100 * SymbolInfoDouble(_Symbol, SYMBOL_POINT);
//lot grosse, symbol, double ask nimmt dann den ask preis, sL aktueller ask preis minus 100 pips bspw
//trade.Sell(0.10,_Symbol,bid,sl,tp,"this is a sell");




}

Dateien:
bso_EA_MA.PNG  88 kb
 
dniind:

Hallo zusammen,


bin grade beim erstellen eines EA auf Basis von sich kreuzenden MA.

und zwar habe ich aktuell 2 Probleme, an denen ich grade verzweifel:

- ich finde keine Anleitung für einen Trailing SL. die, die ich gefunden habe, funktionieren weder isoliert in einem eigenen EA noch kopiert in meinen. hat da wer eine brauchbare Anleitung?

- soweit funktioniert der EA auf der Long Seite gut, nur sobald ich quasi verkehrt die Short Seite einbaue, geht der EA immer short, sobald es ihn ausstoppt und er eig keine neue Short order eingeben soll. und dazu dann noch long obwohl keine Überkreuzung vorliegt.

vielen Dank!

DAniel


der Code für Problem 2 sowie der Screenshot wäre hier:




beim Code posten bitte den Code button benutzen, sonst ist das unlesbar

ich nehme an, der EA ist so programmiert das er das tut 

 

Man, gerade habe ich jemand anderem empfohlen, dass der loake EA MACD in \Examples\ einen Trailing Stop hat - lesen & kopieren.

Außerdem gibt es sicher ein Dutzend EAs, die das Kreuzen von MAs handeln: Suchen in der CodeBase.

 
//+------------------------------------------------------------------+
//| TrailingStop für erste SellOrder                                 |
//+------------------------------------------------------------------+

 
    double ask = SymbolInfoDouble(CurrentSymbol, SYMBOL_ASK); //ask preis
    if(ask <= triggerShort1) //
    {
      double slNew = ask + SL; //neuer SL
      triggerShort1 = iClose(CurrentSymbol, TriggerTf, 1) - Trigger; // sagt dir, ab wann der SL wieder nachgezogen werden soll

      if(slNew > 0) 
      {
        slNew = NormalizeDouble(slNew, Digits()); //runden

        if(slNew < slOld) // wenn der neue sl kleiner als der alte ist
        {
         
          tradeObject.PositionModify(CurrentSymbol, slNew, 0);
           slOldSell = slNew; //aktualisiert den alten SL 
        }
      }
    }
  }

etwa so?
Grund der Beschwerde: