请教如何分别计算两次开仓的分别止损

老师好。我想实现这一个交易策略,以多仓交易为例。

开仓条件:

1. 最多同方向开两次仓。

2. 当收盘价上穿布林线上轨时,在下根Bar的开盘价开第一次多单。计算第一次多单的跟踪止损位。

3. 当有一次多单时,K线收盘价二次上穿布林线上轨时,在下根Bar的开盘价开第二次多单。计算第二次多单的跟踪止损位。

4. 跟踪止损位是开仓后的最高价大于开仓价的1.06倍时进行跟踪,当最高价下跌2%时平仓。

平仓条件:

1. 收盘价下穿布林线下轨,全部平仓。

2. 当收盘价低于第一次多单的跟踪止损位时,在下根Bar的开盘平掉第一次多单。

3. 当收盘价低于第二次多单的跟踪止损位时,在下根Bar的开盘平掉第二次多单。

请教的问题是:

我不知道如何实现平仓条件的第2和第3个。即如何分别计算和记录两个止损位,并在价位到达时平仓。

以下是简易的代码,但是跟踪止损那部分是错误的,请老师指教。


Vars 
    Series<Numeric> UpperBand;
    Series<Numeric> LowerBand;
    Series<Numeric> AveMa;
    Series<Numeric> StdValue;
    Series<Numeric> buylasthigh;   
    Series<Numeric> buyfirst;     // 第一次开多仓价
    Series<Numeric> buysecond;     // 第二次开多仓价
    Series<Numeric> jishulong(0);

Events
OnInit()
{
    //=========除权换月相关设置==============
    AddDataFlag(Enum_Data_RolloverBackWard());    //设置后复权
    AddDataFlag(Enum_Data_RolloverRealPrice());    //设置映射真实价格
    AddDataFlag(Enum_Data_AutoSwapPosition());    //设置自动换仓
    AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());    //设置忽略换仓信号计算
}                    

    onBar(ArrayRef<Integer> indexs)
    {
        Range[0:0]
        {
            // ===================== 计算boll ==========================
            AveMa = Average(Close, 100);
            StdValue = StandardDev(Close, 100, 2);
            UpperBand = Avema + 1 * StdValue;
            LowerBand = Avema - 1 * StdValue;
            PlotNumeric("upperband", upperband);
            PlotNumeric("lowerband", lowerband);
            PlotNumeric("AveMa", AveMa);
    
            // 首次开多单
            If(MarketPosition <>1 and  c[1] > UpperBand[1] and jishulong < 2)
            {
                Buy(1, Open);
                jishulong = 1;
                buyfirst = open;
            }
    
            //二次开多单
            If(MarketPosition == 1 and  BarsSinceEntry > 1 and c[2] <= UpperBand[2] and c[1] >= UpperBand[1]  and jishulong < 2) //Crossover(close[1],UpperBand[1])
            {
                Buy(1, Open);
                jishulong = jishulong + 1;
                buysecond = open;
            }
    
            //多单平仓
            If(MarketPosition == 1 and BarsSinceEntry > 0 and close[1] <= LowerBand[1] )
            {
                sell(0, open);
                jishulong = 0;
            }
    
    
    
            // ================ 【追踪止损不会,请教如何编写】 =================
            If(MarketPosition == 1  )
            {
                If(BarsSinceEntry == 0)
                    buylasthigh = EntryPrice;
                Else
                    buylasthigh = Max(High, buylasthigh);
            }
    
            If(MarketPosition == 1 and close[1] <= buylasthigh * 0.98 and buylasthigh > EntryPrice * 1.06 and BarsSinceEntry > 0)
                Sell(0, Open);
        }
    }


分别计算多个合约买入后的收益率
两个交易信号,如何分别开单和控单
MACD金叉死叉的分别
如何分别对每一仓进行止损?
多个策略叠加时,能否分别判断开平仓
开仓后,如何记录开仓价前一根棒的最低价作为止损
老师好,请教一个问题,如何写当跟BAR上不能交易两次,比如开仓后不能平仓和平仓后不能再开仓?谢谢!
多个bar上多次开仓分别止盈止损
Account 和AccountRef的区别是什么,分别在什么时候用?
增加止盈止损后,原位置不开仓了

https://tbq3.tbquant.net/helper?product_id=991&keyword=3507&content_id=2843&type=article#%E8%B7%9F%E8%B8%AA%E6%AD%A2%E6%8D%9F

参考

谢谢老师!