求老师解答下代码逻辑
2022-09-02 10:06

Params
    Numeric N(20);
    Numeric X(10);
    Numeric TRS(45);
    Numeric Fund(20000);
Vars
    Series<Numeric> HH;
    Series<Numeric> LL;
    Series<Numeric> upband;
    Series<Numeric> dnband;
    Series<Numeric> H0Slope;
    Series<Numeric> H1Slope;
    Series<Numeric> L0Slope;
    Series<Numeric> L1Slope;
    Series<Numeric> Hdelta;
    Series<Numeric> Ldelta;
    Series<Bool> beta;
    Series<Numeric> HL;
    Series<Bool> buycond;
    Series<Bool> sellcond;
    Series<Numeric> KG(0);
    Series<Numeric> HighAfterEntry;//开仓后出现的最高价
    Series<Numeric> LowAfterEntry;//开仓后出现的最低价
    Series<Numeric> liQKA;
    Series<Numeric> DliqPoint;
    Series<Numeric> KliqPoint;
    Series<Numeric> barcoutN;
    Series<Numeric> Lots;
    Series<Numeric> Ma1;
    Series<Numeric> callkg;
Events
    //此处实现事件函数
    OnInit()
    {
        //=========数据源相关设置==============
        AddDataFlag(Enum_Data_RolloverBackWard());    //设置后复权

        AddDataFlag(Enum_Data_RolloverRealPrice());    //设置映射真实价格

        AddDataFlag(Enum_Data_AutoSwapPosition());    //设置自动换仓

        AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());    //设置忽略换仓信号计算

    }
    onBar(ArrayRef<Integer> indexs)
    {   
    
        Lots=Max(1,IntPart(Fund/(O*ContractUnit*BigPointValue*0.1)));    //计算开仓手数
        //计算斜率
        HL=(H+L)/2;
        H0Slope=LinearRegSlope(HL,N);
        H1Slope=LinearRegSlope(HL[1],N);
        buycond=crossover(H0Slope,H1Slope);
        Sellcond= CrossUnder(H0Slope,H1Slope);
        HH=Highest(H,X);
        LL=Lowest(L,X);
        //保存斜率交叉时的高低点
        if(buycond[1])
        {
            upband=HH;
            KG=1;
        }
        if(Sellcond[1])
        {
            dnband=LL;
            KG=-1;
        }
        PlotNumeric("unband",upband);
        PlotNumeric("dnband",dnband);
        if (KG[1]==1 and H>=upband[1] and MarketPosition==0)
        {
            Buy(Lots,Max(open,upband[1]));
            LowAfterEntry=Max(open,upband[1]);
            callkg=1;
        }
        if(KG[1]==-1 and L<=dnband[1] and MarketPosition==0)
        {
            SellShort(Lots,Min(open,dnband[1]));
            HighAfterEntry=Min(open,dnband[1]);
            callkg=-1;
        }
        //加仓模块
        Ma1=Average(C,5);
        PlotNumeric("Ma1",Ma1);
        if (callkg==1 and MarketPosition>0 and C[1]>EntryPrice and C[1]<Ma1[2] and C[1]>Ma1[1])
        {
            Buy(Lots/2,open);
            callkg=0;
        }
        if(callkg==-1 and MarketPosition<0 and C[1]<EntryPrice and C[1]>Ma1[2] and C[1]<Ma1[1])
        {
            SellShort(Lots/2,open);
            callkg=0;
        }

        //记录开仓后高低点
        If(BarsSinceentry == 0)
        {
            HighAfterEntry = High;
            LowAfterEntry = Low;
        }else
        {
            HighAfterEntry = Min(HighAfterEntry,High); // 空头止损,更新最低的最高价
            LowAfterEntry = Max(LowAfterEntry,Low);    // 多头止损,更新最高的最低价
        }

        //移动出场
        If(MarketPosition == 0)   // 自适应参数默认值;
        {
            liQKA = 1;
            barcoutN=0;
        }Else if(BarsSinceEntry>barcoutN)                     //当有持仓的情况下,liQKA会随着持仓时间的增加而逐渐减小,即止损止盈幅度乘数的减少。
        {
            liQKA = liQKA - 0.1;
            liQKA = Max(liQKA,0.3);
            barcoutN=BarsSinceEntry;
        }
        if(MarketPosition>0)
        {
        DliqPoint = LowAfterEntry - (Open*TRS/1000)*liQKA; //经过计算,这根吊灯出场线会随着持仓时间的增加变的越来越敏感;
        }
        if(MarketPosition<0)
        {
        KliqPoint = HighAfterEntry + (Open*TRS/1000)*liQKA; //经过计算,这根吊灯出场线会随着持仓时间的增加变的越来越敏感;
        }
    
        //If(KliqPoint[1]>0 and MarketPosition<0)PlotNumeric("KliqPoint[1]",KliqPoint[1]);
        //if(DliqPoint[1]>0 and MarketPosition>0)PlotNumeric("DliqPoint[1]",DliqPoint[1]);
        
        // 持有多单时
        If(MarketPosition >0 And BarsSinceEntry >0  And Low <= DliqPoint[1] and DliqPoint[1]>0 and DliqPoint[1]>0  and BarsSinceEntry>0)
        {
        
                Sell(0,Min(Open,DliqPoint[1]));
                DliqPoint=0;
                barcoutN=0;
    
        }
        // 持有空单时
        If(MarketPosition <0 And BarsSinceEntry >0  And High >= KliqPoint[1] and KliqPoint[1]>0 and KliqPoint[1]>0  and BarsSinceEntry>0)
        {    
            
                BuyToCover(0,Max(Open,KliqPoint[1]));
                KliqPoint=0;
                barcoutN=0;
    
        }
        
    }

评论区
sq45711478

老师 你把这个策略的逻辑详细和我说下吗  谢谢

2022-09-05 09:01
sq45711478

可以说下开仓平仓加仓啥的逻辑吗

2022-09-02 14:14
sq45711478

整段逻辑都不懂,,

2022-09-02 14:13
顶部