Brauche Rat von einem Schleppnetzprofi, der zwei Positionen unabhängig voneinander steuert, wie kann das umgesetzt werden? - Seite 4

 
charony:

beim 2er-Verkauf hätte das Schleppnetz den SL auf 850 setzen müssen

Ich habe es nahe bei 950, nicht beim manuellen Handel

Wie kann dies im Code gelöst werden?

Warum sollte sie das tun? Wenn der Preis nur 899 erreicht hat, sollte der Trall 50 Pips entfernt sein, also irgendwo um 950 herum liegen.
 
sanyooooook:
Warum sollte ich das tun? Wenn der Preis nur 899 erreicht hat, sollte der Trall 50 Pips entfernt sein, also irgendwo um 950 herum liegen.

er schloss es auf SL von 1sell
 
Warten wir ab, ob sich jemand meldet, der es weiß.
 
Weiß denn niemand, dass
 
charony:
weiß denn niemand


Sie möchten wahrscheinlich, dass ein Trall für eine Position erst dann aktiviert wird, wenn sich der Preis um mindestens X Pips vom Eröffnungskurs der Position (z.B. 100) nach rechts bewegt hat? Wenn ja, handelt es sich um eine zusätzliche Codezeile in der Funktion trall

Eine andere Variante besteht darin, dass ein Trall ausgelöst wird, wenn X Punkte vom Eröffnungskurs entfernt sind: 100 Punkte gehen - Trall -50 Punkte, weitere 100 Punkte gehen - Trall wieder bei -50, usw.

 
Avals:


Vielleicht möchten Sie, dass das Schleppnetz für eine Position erst dann aktiviert wird, wenn sich der Kurs um mindestens X Punkte vom Eröffnungskurs der Position (z.B. 100) in die gewünschte Richtung bewegt hat? Wenn ja, dann ist dies eine zusätzliche Codezeile in der Funktion trall

Es gibt auch eine Variante, bei der ein Rückfall ausgelöst wird, wenn X Punkte vom Eröffnungskurs entfernt sind: 100 Pence überschritten - Rückfall auf -50 Pence, weitere 100 Pence überschritten - erneuter Rückfall auf -50 Pence, usw.


Ich habe es so eingerichtet, dass das Schleppnetz bei bestimmten Ereignissen eingeschaltet wird.

es keine Probleme gibt, wenn eine Position geöffnet wird,

Wenn Sie 2 oder mehr Positionen eröffnen, zeigt die Schleppnetzsuche nur eine SL an,

wenn eine Position den SL erreicht

alle Positionen dieses Typs sind geschlossen

Ich brauche die Anhänger, um Positionen eines Typs zu halten

unabhängig

 
charony:


Ich habe es so eingestellt, dass das Schleppnetz bei bestimmten Ereignissen eingeschaltet ist.

Wenn eine Stelle frei ist, gibt es kein Problem,

Wenn Sie 2 oder mehr Positionen eröffnen, setzt das Schleppnetz nur einen SL,

wenn eine beliebige Position SL erreicht

alle Positionen dieses Typs sind geschlossen


Sie setzen den gleichen Stop-Loss für alle Positionen auf TralingStop-Punkte vom letzten Kurs und bewegen sich nur in Richtung der offenen Position. D.h. für alle Positionen wird das Buy-Trailing vom Maximum für die Haltedauer gesetzt und natürlich schließen sie alle zur gleichen Zeit, da das Maximum gemeinsam ist. Überlegen Sie sich, welchen Algorithmus Sie benötigen, der "Positionen desselben Typs unabhängig voneinander schließt". Es gibt eine Vielzahl von Varianten.
 

In den Einstellungen ist SL nicht gesetzt, d. h. =0, TP ebenfalls =0,

Schleppnetz=50 Pips für alle Positionen und alle Typen

Nachlaufende Positionen sollten unabhängig voneinander geführt werden

bei 1000=pos1Buy Preis ging nach Norden bei 1050 Trawl setzt SL für pos1Buy

Preis ging weiter nach Norden, erreichte 1090, SL für pos1Buy blieb 1050, kein SL für pos2Buy

Der Preis ging nach Süden, erreichte 1050, beide Positionen wurden geschlossen.

Ich brauche SL, um nur pos1 zu schließen

pos2 sollte auf SL schließen , wenn der Preis 1140 erreicht ,

D.h.bei 1130 gibt es einen SL für pos2, und ab 1140 fällt der Kurs unter 1130

sollte SL für pos2auslösen

поз2Buy--------------------------------------------------------------------------1080

SL---------------------------------------------------------------------------------1050

поз1Buy--------------------------------------------------------------------------1000

 

Wenn Sie einen Auftrag öffnen, können Sie ihn auf Time[0] oder etwas anderes setzen (Datum, Uhrzeit oder was auch immer).

nimmt:

level_ts - nachlaufender Stopp in Punkten

level_step - Nachlaufschritt

mn - Magik, wenn -1, werden alle Aufträge durchsucht.


//+----------------------------------------------------------------------------+
//| TrailingStop.                                                              |
//|   траллит все ордера, на уровень выставленный во входных параметрах.       |
//+----------------------------------------------------------------------------+
void TrailingStop(int level_ts, int level_step = 5, int mn = -1) 
{
   int ot, err, quantity_orders, cx;
   bool fm;
   double op, as, bd, pt, sl, tp, ut;
//----
   quantity_orders = OrdersTotal();
   if(quantity_orders >= 0) {
      for(cx = 0; cx < quantity_orders; cx++) {
         if(!OrderSelect(cx, SELECT_BY_POS, MODE_TRADES)) {
            Print("Error: SimpleTrailing(), OrderSelect: " + cx + ". Ошибка: " + GetLastError());
         }
         if (mn < 0 || OrderMagicNumber()==mn) {   
            pt = MarketInfo(OrderSymbol(), MODE_POINT);
            bd = MarketInfo(OrderSymbol(), MODE_BID);
            as = MarketInfo(OrderSymbol(), MODE_ASK);
            op = OrderOpenPrice();
            ot = OrderType();
            sl = OrderStopLoss();
            tp = OrderTakeProfit();
            ut = level_ts + level_step;
         
            if(ot == OP_BUY) {
               if(sl == 0 || sl < op) {                              // если стопа нет или стоп ниже цены открытия
                  if(op <  (bd - ut * pt)) {                         // если цена открытия ниже чем текущая цена минус ( стоп - шаг стопа)
                     sl = bd - level_ts * pt;
                  }
               }
               else {
                  if(sl < (bd - ut * pt) && bd > (op + ut * pt)) {
                     sl = bd - level_ts * pt;
                  }
               }
            }
            if(ot == OP_SELL) {
               if(sl == 0 || sl > op) {
                  if(op > (as + ut * pt)) {
                     sl = as + level_ts * pt;
                  }
               }
               else {
                  if(sl > (as + ut * pt) && as < (op - ut * pt)) {
                     sl = as + level_ts * pt;
                  }
               }
            }
            if (sl != OrderStopLoss()) {
               op = NormalizeDouble(op, Digits);
               tp = NormalizeDouble(tp, Digits);
               sl = NormalizeDouble(sl, Digits);
               fm = OrderModify(OrderTicket(), op, sl, tp, 0, CLR_NONE);
               if (fm) {
                  if (UseSound) PlaySound(NameFileSound);
               }
               else {
                  err=GetLastError();
                  Print("Error(",err,") SimpleTrailing(): ",ErrorDescription(err));
               }
            }
         }
      }
   }
}
 
charony:

In den Einstellungen ist SL nicht gesetzt, d. h. =0, TP ebenfalls =0,

Schleppnetz=50 Pips für alle Positionen und alle Typen

Nachlaufende Positionen sollten unabhängig voneinander geführt werden

bei 1000=pos1Buy Preis ging nach Norden bei 1050 Trawl setzt SL für pos1Buy

Preis ging weiter nach Norden, erreichte 1090, SL für pos1Buy blieb 1050, kein SL für pos2Buy

Der Preis ging nach Süden, erreichte 1050, beide Positionen wurden geschlossen.

Ich brauche SL, um nur pos1 zu schließen

pos2 sollte auf SL schließen , wenn der Preis 1140 erreicht ,

D.h.bei 1130 gibt es einen SL für pos2, und ab 1140 fällt der Kurs unter 1130

sollte SL für pos2auslösen

поз2Buy--------------------------------------------------------------------------1080

SL---------------------------------------------------------------------------------1050

поз1Buy--------------------------------------------------------------------------1000


Wenn ich es richtig verstanden habe, müssen Sie Folgendes ersetzen

  if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits))

unter

  if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits) && (Bid>=Price+TS))
dasselbe gilt für den Verkauf.