Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Expert-Advisors (http://www.expert-advisor.com/forum/forumdisplay.php?f=25)
-   -   "Trailing buy limit"? (http://www.expert-advisor.com/forum/showthread.php?t=3343)

soundslikeTomek 20.11.13 15:30

"Trailing buy limit"?
 
Hi,
dies ist mein erster Post hier, deshalb entschuldigt bitte falls ich etwas anfängermäßig rüber komme :)

Ich habe vor einer Weile angefangen mit mt4 bitcoins zu handeln was mich zu folgender Frage brachte:

Gibt es ein EA, der ähnlich dem trailing stop ein "trailing buy limit" erzeugt, also das buylimit immer eine gewisse Anzahl von pips (bzw. %vom Kurs oder EMA abhängig) mit nach unten zieht wenn der Kurs fällt? Um dann bei steigendem Kurs, also überschreiten dieses Limits zu kaufen und ein vordefiniertes trailingStoploss zu erzeugen. Die ganze Geschichte würde dann umgekehrt laufen.
Könnte mir das gut als eine Art schleife vorstellen, dass der Verkaufskurs für den nächsten Durchlauf wieder als "trailing buy limit" gilt.

Vieleicht gibt es so ein mitlaufendes "trailing buy limit" schon aber ich konnte nichts finden.

Wäre schön wenn ihr mir weiter helfen könntet.

Gruß
Tomek

pako 21.11.13 21:50

Code:

if( NormalizeDouble( OrderOpenPrice() - Ask - Offset*Point, Digits ) > 0.0 )
      if(!OrderModify(OrderTicket(), NormalizeDouble( Ask+Offset*Point, Digits ), SL, TP, 0))
        Alert(" MODIFY BUYSTOP ERROR", GetLastError());

so ähnlich

Code:

//+----------------------------------------------------------------------------+
void TrailingOrders()
{
    double di, pa, pb, pp, sl, tp;
    pp=MarketInfo(OrderSymbol(), MODE_POINT);
    if (OrderType()==OP_SELLLIMIT)
    {
      pa=MarketInfo(OrderSymbol(), MODE_BID);
      if (OrderOpenPrice()-pa>(TrailingStop+TrailingStep-1)*pp)
        {
          di=OrderOpenPrice()-pa-TrailingStop*pp;
          if (OrderStopLoss()  >0) sl=OrderStopLoss()  -di; else sl=0;
          if (OrderTakeProfit()>0) tp=OrderTakeProfit()-di; else tp=0;
          ModifyOrder(pa+TrailingStop*pp, sl, tp);
        }
    }
  if (OrderType()==OP_BUYLIMIT)
  {
    pb=MarketInfo(OrderSymbol(), MODE_ASK);
    if (pb-OrderOpenPrice()>(TrailingStop+TrailingStep-1)*pp)
      {
        di=pb-OrderOpenPrice()-TrailingStop*pp;
        if (OrderStopLoss()  >0) sl=OrderStopLoss()  +di; else sl=0;
        if (OrderTakeProfit()>0) tp=OrderTakeProfit()+di; else tp=0;
        ModifyOrder(pb-TrailingStop*pp, sl, tp);
      }
  }
}
//+------------------------------------------------------------------+


traderdoc 22.11.13 10:32

Hier sollte für einen Anfänger nicht unerwähnt bleiben, dass ohne vorheriges
OrderSelect() nichts geht.
Desweiteren würde der Code nur mit einem 4-Digit-Broker sauber funktionieren. In der Regel werden die Werte in den Variablen in F7 für SL, TP, TrailingStop, TrailingStep etc., immer so angegeben wie gewöhnlich, d.h. 20 Pips sollen dann auch 20 Pips sein. Unter Benutzung eines 5-Digit-Brokers wären das aber dann nur 2 Pips und das ist erstens sicher so nicht gewollt und zweitens kann es Probleme mit dem STOPLEVEL geben, welches in der Erromeldung "Invalid SL/TP" münden würde.

Deshalb muß unbedingt, am besten in der init()-Funktion, folgendes stehen:

multiplier = 1;
digit = MarketInfo(Symbol(), MODE_DIGITS);
if (digit == 3 || digit == 5) multiplier = 10;

//als Beispiel

TrailingStop *= multiplier;

Und dann kann der angepaßte Pipwert für z.B. TrailingStop weiter benutzt werden.

traderdoc


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:07 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