bisogno di consigli da un professionista della pesca a strascico che controlla due posizioni indipendentemente l'una dall'altra, come può essere implementato? - pagina 4

 
charony:

sul 2sell il trawl avrebbe dovuto mettere lo SL a 850

L'ho avuto vicino a 950, non al commercio manuale

Come può essere risolto nel codice?

Perché dovrebbe farlo? Se il prezzo ha raggiunto solo 899, il trall dovrebbe essere a 50 pip di distanza, quindi da qualche parte intorno a 950 dovrebbe essere.
 
sanyooooook:
Perché dovrei farlo? Se il prezzo ha raggiunto solo 899, il trall dovrebbe essere a 50 pip di distanza, quindi da qualche parte intorno a 950 dovrebbe essere.

ha chiuso su SL da 1sell
 
Aspettiamo e vediamo se arriva qualcuno che lo sa.
 
Nessuno sa che
 
charony:
nessuno sa


Probabilmente volete un trall per una posizione da attivare solo quando il prezzo si è spostato a destra di almeno X pip dal prezzo aperto della posizione (per esempio 100)? Se è così, è una linea di codice in più nella funzione trall

Un'altra variante è che un trall è attivato quando X punti sono passati dal prezzo aperto: vai 100 punti - trall -50 punti, vai altri 100 punti - trall di nuovo a -50, ecc.

 
Avals:


Forse avete bisogno che il trawl per una posizione sia attivato solo quando il prezzo si è mosso nella direzione richiesta di almeno X punti dal prezzo aperto della posizione (per esempio 100)? Se sì, allora è una linea di codice in più nella funzione trall

C'è anche la variante che un trall sarà attivato quando passano X punti dal prezzo di apertura: passa 100p - trall -50p, passa altri 100p - trall di nuovo a -50p, ecc.


Io ce l'ho così, cioè il trall è acceso in certi eventi

non ci sono problemi quando si apre una posizione,

se si aprono 2 o più posizioni, trawl espone solo uno SL,

se una qualsiasi posizione raggiunge lo SL

tutte le posizioni di questo tipo sono chiuse

Ho bisogno che i rimorchi tengano posizioni di un tipo

indipendentemente

 
charony:


L'ho fatto in questo modo, cioè la rete a strascico è attivata in certi eventi

quando una posizione è aperta non ci sono problemi,

se aprite 2 o più posizioni, il trawl imposta solo uno SL,

quando qualsiasi posizione raggiunge SL

tutte le posizioni di questo tipo sono chiuse


Si imposta lo stesso stop loss per tutte le posizioni a punti TralingStop dall'ultimo prezzo e ci si muove solo nella direzione della posizione aperta. Cioè per tutte le posizioni il buy trailing è impostato a partire dal massimo per il periodo di detenzione e naturalmente si chiudono tutte allo stesso tempo perché il massimo sarà comune. Considerate cosa vi serve, qual è l'algoritmo che chiude "posizioni dello stesso tipo indipendentemente l'una dall'altra". Ci sono molte varianti.
 

Nelle impostazioni SL non è impostato, cioè =0, anche TP è =0,

Trawl=50 pips per tutte le posizioni e tutti i tipi

Il trailing dovrebbe condurre le posizioni indipendentemente l'una dall'altra

a 1000=pos1Buy il prezzo è andato a nord a 1050 Trawl mette SL per pos1Buy

il prezzo è andato più a nord, ha raggiunto 1090, SL per pos1Buy è rimasto 1050, nessun SL per pos2Buy

Il prezzo è andato a sud, è arrivato a 1050, entrambe le posizioni sono chiuse.

Ho bisogno che SL chiuda solo la pos1

pos2 dovrebbe chiudere su SL se il prezzo raggiunge 1140 ,

Cioèa 1130 c'è SL per pos2, e da 1140 il prezzo scende sotto 1130

dovrebbe innescare SL per pos2

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

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

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

 

Quando aprite un ordine potete impostarlo su Time[0] o su qualcos'altro, data, ora o altro).

prende:

level_ts - trailing stop in punti

level_step - Passo finale

mn - Magik, se -1, rastrella tutti gli ordini.


//+----------------------------------------------------------------------------+
//| 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:

Nelle impostazioni SL non è impostato, cioè =0, anche TP è =0,

Trawl=50 pips per tutte le posizioni e tutti i tipi

Il trailing dovrebbe condurre le posizioni indipendentemente l'una dall'altra

a 1000=pos1Buy il prezzo è andato a nord a 1050 Trawl mette SL per pos1Buy

il prezzo è andato più a nord, ha raggiunto 1090, SL per pos1Buy è rimasto 1050, nessun SL per pos2Buy

Il prezzo è andato a sud, è arrivato a 1050, entrambe le posizioni sono chiuse.

Ho bisogno che SL chiuda solo la pos1

pos2 dovrebbe chiudere su SL se il prezzo raggiunge 1140 ,

Cioèa 1130 c'è SL per pos2, e da 1140 il prezzo scende sotto 1130

dovrebbe innescare SL per pos2

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

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

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


se ho capito bene, è necessario sostituire

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

su

  if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits) && (Bid>=Price+TS))
lo stesso per la vendita.