需要一个拖网专业人员的建议,即控制两个位置相互独立,如何实现? - 页 4

 
charony:

在2次销售中,拖网应该使SL达到850。

我的价格接近950,不是手动交易。

如何在代码中解决这个问题?

它为什么要这样做?如果价格只达到899,那么Trall应该在50个点之外,所以应该在950左右。
 
sanyooooook:
我为什么要这样做?如果价格只达到899,那么Trall应该在50个点之外,所以应该在950左右。

他在SL上关闭了它,从1sell开始
 
让我们等待,看看是否有知道的人出现。
 
难道没有人知道
 
charony:
难道没有人知道


你可能希望只有当价格从开仓价 向右移动了至少X个点(例如100)时,才会激活一个仓位的trall?如果是这样,那就是在trall函数中增加了一行代码

另一个变种是,当从开盘价起经过X个点时,就会触发trall:走100点--trall--50点,再走100点--trall--50点,等等。

 
Avals:


也许您需要的是,只有当价格在所需的方向上移动了至少X个点(例如100点)时,才能激活头寸的拖网?如果是,那么这就是trall函数中额外的一行代码

还有一种变体是,当从开盘价起经过X个点时,就会触发Trall:经过100便士-Trall-50便士,再经过100便士-Trall-50便士,等等。


我是这样做的,也就是说,在某些事件中,Trall被打开了。

当一个位置被打开时,没有任何问题。

如果你开了2个或更多的头寸,trawl只暴露一个SL。

如果任何位置达到SL

该类型的所有职位都已关闭

我需要拖车保持一种类型的位置

独立

 
charony:


我是这样做的,也就是说,在某些情况下,拖网会被打开。

当一个职位空缺时,就没有问题了。

如果你开了2个或更多的头寸,拖网只设置一个SL。

当任何位置达到SL

该类型的所有职位都已关闭


你的止损对所有头寸的设置都是一样的,即从最后的价格开始的TralingStop 点,并且只向开仓 的方向移动。也就是说,对于所有的头寸,买入追踪都 是从 持有期的 最大值开始 设置的,当然它们都是在同一时间关闭的,因为最大值是共同的。考虑一下你需要什么,什么是关闭 "同一类型的位置相互独立 "的算法。有很多变种。
 

在设置中,SL没有被设置,即=0,TP也=0。

Trawl=50点,适用于所有头寸和所有类型

尾随者应独立于对方的领导地位

在1000=pos1Buy时,价格向北在1050 Trawl放SL为pos1Buy。

价格进一步向北走,达到1090,买入位置1的SL仍然是1050,买入位置2没有SL。

价格向南走,到了1050,两个位置都被关闭。

我需要SL只关闭pos1

如果价格达到1140 pos2应该在 SL 上关闭

也就是说,在1130点 pos2SL,从1140点开始,价格跌到1130点以下

应触发 位置2的SL

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

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

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

 

当你打开一个订单时,你可以把它设置为Time[0]或其他东西,日期、时间或其他东西)。

摄取。

level_ts - 以点为单位的追踪止损

level_step - 后续步骤

mn - Magik,如果是-1,它将遍历所有订单。


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

在设置中,SL没有设置,即=0,TP也=0。

Trawl=50点,适用于所有头寸和所有类型

尾随者应独立于对方的领导地位

在1000=pos1Buy时,价格向北在1050 Trawl放SL为pos1Buy。

价格进一步向北走,达到1090,买入位置1的SL仍然是1050,买入位置2没有SL。

价格向南走,到了1050,两个位置都被关闭。

我需要SL只关闭pos1

如果价格达到1140 pos2应该在 SL 上关闭

也就是说,在1130点 pos2SL,从1140点开始,价格跌到1130点以下

应触发 位置2的SL

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

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

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


如果我理解正确,你需要替换

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

  if (NormalizeDouble(SL,Digits)<// Если ниже желаемого..
               NormalizeDouble(Bid-TS,Digits) && (Bid>=Price+TS))
出售也是如此。