besoin de conseils d'un pro du chalut qui contrôle deux positions indépendamment l'une de l'autre, comment le mettre en œuvre ? - page 4

 
charony:

sur la 2sell le chalut devrait avoir mis le SL à 850

je l'ai eu proche de 950, pas à l'échange manuel

Comment le résoudre dans le code ?

Pourquoi ferait-il ça ? Si le prix n'a atteint que 899, le trall devrait être à 50 pips, donc quelque part autour de 950.
 
sanyooooook:
Pourquoi je ferais ça ? Si le prix n'a atteint que 899, le trall devrait être à 50 pips, donc quelque part autour de 950.

il l'a fermé sur SL à partir de 1sell
 
Attendons de voir si quelqu'un qui sait se manifeste.
 
Personne ne sait
 
charony:
personne ne sait


Vous souhaitez probablement qu'un trall pour une position ne soit activé que lorsque le prix a évolué dans la direction souhaitée d'au moins X pips par rapport au prix d'ouverture de la position (par exemple 100) ? Si c'est le cas, il s'agit d'une ligne de code supplémentaire dans la fonction trall.

Une autre variante consiste à déclencher un trall lorsque X points se sont écoulés depuis le cours d'ouverture : 100 points de plus - trall - 50 points, 100 points de plus - trall à nouveau à - 50, etc.

 
Avals:


Peut-être avez-vous besoin que le chalutage d'une position ne soit activé que lorsque le prix a évolué dans la direction requise d'au moins X points par rapport au prix d'ouverture de la position (par exemple 100) ? Si oui, il s'agit d'une ligne de code supplémentaire dans la fonction trall.

Il existe également une variante selon laquelle un trall sera déclenché lorsque X points passent à partir du prix d'ouverture : passer 100p - trall -50p, passer encore 100p - trall à nouveau à -50p, etc.


Je l'ai fait comme ça, c'est-à-dire que le trall est activé lors de certains événements.

il n'y a aucun problème lorsqu'une position est ouverte,

si vous ouvrez 2 positions ou plus, le chalut n'expose qu'un seul SL,

si une position atteint le SL

tous les postes de ce type sont fermés

J'ai besoin des remorques pour tenir des positions d'un type

indépendamment

 
charony:


C'est ce que je fais, c'est-à-dire que le chalut est activé lors de certains événements.

lorsqu'un poste est ouvert, il n'y a pas de problème,

si vous ouvrez 2 positions ou plus, le chalut ne fixe qu'un seul SL,

lorsqu'une position quelconque atteint SL

tous les postes de ce type sont fermés


Vous définissez le même stop loss pour toutes les positions à TralingStop points du dernier prix et vous vous déplacez uniquement dans la direction de la position ouverte. C'est-à-dire que pour toutes les positions, le suivi d'achat est fixé à partir du maximum de la période de détention et, bien sûr, elles se clôturent toutes en même temps car le maximum sera commun. Considérez ce dont vous avez besoin, quel est l'algorithme qui ferme "les positions du même type indépendamment les unes des autres". Il existe de nombreuses variantes.
 

Dans les paramètres, SL n'est pas réglé, c'est-à-dire =0, TP aussi =0,

Trawl=50 pips pour toutes les positions et tous les types

Les positions de suivi doivent être indépendantes les unes des autres

à 1000=pos1Buy le prix est monté à 1050 Trawl met SL pour pos1Buy

le prix a continué à monter vers le nord, atteignant 1090, le SL pour la position 1Buy est resté à 1050, pas de SL pour la position 2Buy.

Le prix est allé vers le sud, jusqu'à 1050, les deux positions sont fermées.

J'ai besoin que SL ne ferme que la position 1

pos2 devrait fermer sur SL si le prix atteint 1140 ,

C'est-à-dire qu'à 1130, il y a un SL pour la position 2, et à partir de 1140, le prix descend en dessous de 1130.

devrait déclencher SL pour la position 2

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

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

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

 

Lorsque vous ouvrez un ordre, vous pouvez le définir sur Time[0] ou sur autre chose, date, heure ou autre).

prend :

level_ts - stop suiveur en points

level_step - Pas de traînage

mn - Magik, si -1, il parcourra toutes les commandes.


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

Dans les paramètres, SL n'est pas réglé, c'est-à-dire =0, TP aussi =0,

Trawl=50 pips pour toutes les positions et tous les types

Les positions de suivi doivent être indépendantes les unes des autres

à 1000=pos1Buy le prix est remonté à 1050 Trawl met SL pour pos1Buy

le prix a continué à monter vers le nord, atteignant 1090, le SL pour la position 1Buy est resté à 1050, pas de SL pour la position 2Buy.

Le prix est allé vers le sud, jusqu'à 1050, les deux positions sont fermées.

J'ai besoin que SL ne ferme que la position 1

pos2 devrait fermer sur SL si le prix atteint 1140 ,

C'est-à-dire qu'à 1130, il y a un SL pour la position 2, et à partir de 1140, le prix descend en dessous de 1130.

devrait déclencher SL pour la position 2

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

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

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


si je comprends bien, vous devez remplacer

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

à l'adresse

  if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits) && (Bid>=Price+TS))
la même chose pour la vente.