necesito consejo de un profesional de la pesca de arrastre que controle dos posiciones independientemente una de la otra, ¿cómo se puede implementar? - página 4

 
charony:

en el 2sell el arrastre debería haber puesto el SL en 850

Lo tengo cerca de 950, no en el comercio manual

¿Cómo se puede resolver esto en el código?

¿Por qué iba a hacer eso? Si el precio sólo ha llegado a 899, el trall debería estar a 50 pips de distancia y, por tanto, en torno a 950.
 
sanyooooook:
¿Por qué iba a hacerlo? Si el precio sólo ha llegado a 899, el trall debería estar a 50 pips de distancia, así que en algún lugar alrededor de 950 debería estar.

lo cerró en SL de 1sell
 
Esperemos a ver si aparece alguien que lo sepa.
 
¿No sabe nadie
 
charony:
no sabe nadie


¿Probablemente quiere que un trall para una posición se active sólo cuando el precio se haya movido hacia la derecha al menos X pips desde el precio de apertura de la posición (por ejemplo, 100)? Si es así, es una línea de código adicional en la función trall

Otra variante es que se active un trall cuando hayan pasado X puntos desde el precio de apertura: ir 100 puntos - trall -50 puntos, ir otros 100 puntos - trall de nuevo a -50, etc.

 
Avals:


¿Quizás necesite que el arrastre de una posición se active sólo cuando el precio se haya movido en la dirección requerida por al menos X puntos desde el precio de apertura de la posición (por ejemplo, 100)? Si es así, entonces esta es una línea de código adicional en la función trall

También existe la variante de que se activará un trall cuando pasen X puntos desde el precio de apertura: pasar 100p - trall -50p, pasar otros 100p - trall de nuevo a -50p, etc.


Lo tengo así, es decir, el trall se enciende en ciertos eventos

no hay problemas cuando se abre una posición,

si abre 2 o más posiciones, la red de arrastre sólo expone un SL,

si alguna posición alcanza el SL

todas las posiciones de este tipo están cerradas

Necesito que los remolques mantengan posiciones de un tipo

independientemente

 
charony:


Yo lo tengo así, es decir, la red de arrastre se enciende en determinados eventos

cuando un puesto está abierto no hay problema,

si abre 2 o más posiciones, la red de arrastre sólo fija un SL,

cuando cualquier posición llega a SL

todas las posiciones de este tipo están cerradas


Se establece el mismo stop loss para todas las posiciones en los puntos TralingStop del último precio y se mueve sólo en la dirección de la posición abierta. Es decir, para todas las posiciones el buy trailing se establece a partir del máximo del periodo de tenencia y por supuesto todas se cierran al mismo tiempo ya que el máximo será común. Considere lo que necesita, cuál es el algoritmo que cierra "posiciones del mismo tipo independientemente unas de otras". Hay muchas variantes.
 

En los ajustes, SL no está configurado, es decir, =0, TP también =0,

Arrastre=50 pips para todas las posiciones y todos los tipos

Las posiciones de arrastre deben ser independientes unas de otras

a 1000=pos1Compra el precio se fue al norte a 1050 Trawl pone SL para pos1Compra

el precio fue más al norte, alcanzó 1090, el SL para pos1Buy se mantuvo en 1050, no hay SL para pos2Buy

El precio se fue al sur, llegó a 1050, ambas posiciones están cerradas.

Necesito que SL cierre sólo la posición 1

pos2 debería cerrar en SL si el precio llega a 1140 ,

Es decir, en 1130 hay SL para pos2, y a partir de 1140 el precio cae por debajo de 1130

debería activar SL para pos2

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

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

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

 

Cuando abres una orden puedes ponerla en Hora[0] o en otra cosa, fecha, hora o lo que sea).

toma:

level_ts - trailing stop en puntos

level_step - Paso final

mn - Magik, si es -1, buscará todos los pedidos.


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

En los ajustes, SL no está configurado, es decir, =0, TP también =0,

Arrastre=50 pips para todas las posiciones y todos los tipos

Las posiciones de arrastre deben ser independientes unas de otras

a 1000=pos1Compra el precio se fue al norte a 1050 Trawl pone SL para pos1Compra

el precio fue más al norte, alcanzó 1090, el SL para pos1Buy se mantuvo en 1050, no hay SL para pos2Buy

El precio se fue al sur, llegó a 1050, ambas posiciones están cerradas.

Necesito que SL cierre sólo la posición 1

pos2 debería cerrar en SL si el precio llega a 1140 ,

Es decir,en 1130 hay SL para pos2, y a partir de 1140 el precio cae por debajo de 1130

debería activar SL para pos2

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

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

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


si he entendido bien, hay que sustituir

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

en

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