precisam de conselhos de um profissional de arrasto que controla duas posições independentemente uma da outra, como pode ser implementado? - página 4

 
charony:

no 2sell a rede de arrasto deveria ter colocado o SL em 850

eu consegui fechar em 950, não no comércio manual

Como isso pode ser resolvido no código?

Por que ele faria isso? Se o preço chegou apenas a 899, a loja deve estar a 50 pips de distância, então em algum lugar em torno de 950 deve estar.
 
sanyooooook:
Por que eu faria isso? Se o preço chegou apenas a 899, a loja deve estar a 50 pips de distância e, portanto, em algum lugar em torno de 950.

ele o fechou no SL de 1sell
 
Vamos esperar e ver se aparece alguém que saiba.
 
Será que ninguém sabe
 
charony:
ninguém sabe


Você provavelmente quer que um trall para uma posição seja ativado somente quando o preço tiver se movido para o lado direito por pelo menos X pips do preço de abertura da posição (por exemplo, 100)? Se assim for, é uma linha de código adicional na função trall

Uma outra variante é que uma valsa é acionada quando X pontos passaram do preço aberto: vá 100 pontos - valsa -50 pontos, vá outros 100 pontos - valsa novamente a -50, etc.

 
Avals:


Talvez você precise que a rede de arrasto para uma posição seja ativada somente quando o preço tiver se movido na direção desejada em pelo menos X pontos do preço aberto da posição (por exemplo, 100)? Se sim, então esta é uma linha de código adicional na função trall

Há também uma variante que será acionada quando X pontos passarem do preço de abertura: passe 100p - trall -50p, passe outros 100p - trall novamente a -50p, etc.


Tenho-o assim, ou seja, a rede de arrasto é ligada em certos eventos

não há problemas quando uma posição é aberta,

se você abrir 2 ou mais posições, a rede de arrasto expõe apenas um SL,

se alguma posição chegar ao SL

todas as posições deste tipo são fechadas

Eu preciso que os reboques mantenham posições de um tipo

independentemente

 
charony:


Tenho-o assim, ou seja, a rede de arrasto é ligada em certos eventos

quando uma posição está aberta, não há problema,

se você abrir 2 ou mais posições, a rede de arrasto estabelece apenas um SL,

quando qualquer posição atinge SL

todas as posições deste tipo são fechadas


Seu stop loss é definido da mesma forma para todas as posições nos pontos TralingStop a partir do último preço e se move apenas na direção da posição aberta. Isto é, para todas as posições, o rastreamento de compra é definido a partir do máximo para o período de manutenção e, é claro, todas elas fecham ao mesmo tempo em que o máximo será comum. Considere o que você precisa, qual é o algoritmo que fecha "posições do mesmo tipo independentemente uma da outra". Existem muitas variantes.
 

Em configurações SL não é definido, ou seja, =0, TP também =0,

Rede de arrasto=50 pips para todas as posições e todos os tipos

O trailing deve liderar posições independentemente um do outro

a 1000=pos1Buy preço foi para o norte a 1050 Trawl coloca SL para pós1Buy

o preço foi mais para o norte, atingiu 1090, SL para pos1Buy permaneceu 1050, sem SL para pos2Buy

O preço foi para o sul, chegou a 1050, ambas as posições estão fechadas.

Preciso SL para fechar somente pos1

pos2 deve fechar no SL se o preço chegar a 1140 ,

Ou seja,às 1130 há SL para pos2, e a partir de 1140 o preço cai abaixo de 1130

deve acionar SL para pos2

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

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

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

 

Quando você abre um pedido, você pode configurá-lo para Hora[0] ou algo mais, data, hora ou o que quer que seja).

toma:

level_ts - ponto de parada em pontos

level_step - Etapa de descida

mn - Magik, se -1, arrasta todos os 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:

Em configurações SL não é definido, ou seja, =0, TP também =0,

Rede de arrasto=50 pips para todas as posições e todos os tipos

O trailing deve liderar posições independentemente um do outro

a 1000=pos1Buy preço foi para o norte a 1050 Trawl coloca SL para pós1Buy

o preço foi mais para o norte, atingiu 1090, SL para pos1Buy permaneceu 1050, sem SL para pos2Buy

O preço foi para o sul, chegou a 1050, ambas as posições estão fechadas.

Preciso SL para fechar somente pos1

pos2 deve fechar no SL se o preço chegar a 1140 ,

Ou seja,às 1130 há SL para pos2, e a partir de 1140 o preço cai abaixo de 1130

deve acionar SL para pos2

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

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

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


se eu entendi corretamente, você precisa substituir

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

em

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