全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
代码有信号,没有买入卖出动作,请老师看一下哦
2022-11-02 10:40

Params
    String Str01("Line2");//公式简称
    String Str02("Line");//线的名称
    Numeric P_pin(5);// 上穿趋势P跳数;
    Numeric S_pin(10);// 止损S跳数;
    Numeric Y_pin(100);// 止盈Y跳数;
    Numeric G_pin(20);// 加仓间隔G跳数;
    Numeric share(1);// 加仓手数;
    Numeric Max_lots(10);// 总加仓次数
Vars
    Series<Numeric> LineValue;
    Series<Numeric> P_Moxe;
    Series<Numeric> S_Moxe;
    Series<Numeric> Y_Moxe;
    Series<Numeric> G_Moxe;
    Series<bool>  cond_BK;
    Series<bool>  cond_BK_T;
    Series<bool>  cond_loss;
    Series<bool>  cond_win;
    Series<Numeric> EntryP_01;//首单建仓价
    Series<Numeric> EntryP_02;
    Series<Numeric> EntryP_03;
    Series<Numeric> EntryP_04;
    Series<Numeric> EntryP_05;
    Series<Numeric> EntryP_06;
    Series<Numeric> EntryP_07;
    Series<Numeric> EntryP_08;
    Series<Numeric> EntryP_09;
    Series<Numeric> EntryP_10;
    Global Bool ret ;
    Global Numeric lots;
    Series<bool>  cond_BK01;
    Series<bool>  cond_BK02;
    Series<bool>  cond_BK03;
    Series<bool>  cond_BK04;
    Series<bool>  cond_BK05;
    Series<bool>  cond_BK06;
    Series<bool>  cond_BK07;
    Series<bool>  cond_BK08;
    Series<bool>  cond_BK09;
    Global Numeric EntryNum;
    Global Numeric Sign_N(0);//状态码
    Series<Numeric> Sign_N_REF;//前一个状态码
    Global array<Integer> my_id;
Events
    //此处实现事件函数
    
    //初始化事件函数,策略运行期间,首先运行且只有一次
    OnInit()
    {
    
    }


    //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组
    OnBar(ArrayRef<Integer> indexs)
    {
        
        LineValue =lion_line(Str01, Str02);
        P_Moxe=P_pin*MinMove*PriceScale;
        S_Moxe=S_pin*MinMove*PriceScale;
        Y_Moxe=Y_pin*MinMove*PriceScale;
        G_Moxe=G_pin*MinMove*PriceScale;
        Sign_N_REF=EntryNum;
        
        IF(LineValue!=InvalidNumeric And LineValue[1]==InvalidNumeric){PlotString("方向","---当前{做多策略}---",Low,white);}
        
        cond_BK=CrossOver(high,LineValue+P_Moxe) and LineValue!=InvalidNumeric ;
        cond_loss=CrossUnder(Low,EntryP_01-S_pin) and LineValue!=InvalidNumeric;
        
        cond_win=high>=EntryP_01+Y_Moxe and LineValue!=InvalidNumeric;
        cond_BK01= high>= EntryP_01+G_Moxe;
        cond_BK02= high>= EntryP_02+G_Moxe;
        cond_BK03= high>= EntryP_03+G_Moxe;
        cond_BK04= high>= EntryP_04+G_Moxe;
        cond_BK05= high>= EntryP_05+G_Moxe;
        cond_BK06= high>= EntryP_06+G_Moxe;
        cond_BK07= high>= EntryP_07+G_Moxe;
        cond_BK08= high>= EntryP_08+G_Moxe;
        cond_BK09= high>= EntryP_09+G_Moxe;
        //===================================开仓区域===========================
        If(MarketPosition==0  && cond_BK  )
        {
            ret=Buy(1,Max(Open,LineValue+P_Moxe));
            EntryNum=1;
            EntryP_01=Max(Open,LineValue+P_Moxe);
            if(ret){PlotString("开仓","首单",High,Red);}
            
        }
        If(MarketPosition>0  && cond_loss and BarsSinceEntry>0 )
        {
            ret=Sell(0,Min(EntryP_01-S_pin,Open));
            EntryNum=0;
            if(ret){PlotString("平仓","止损",High,Red);}
            Sign_N=11;
        }
        If(MarketPosition>0  && cond_win and BarsSinceEntry>0)
        {
            ret=Sell(0,Max(EntryP_01+Y_Moxe,Open));
            EntryNum=0;
            if(ret){PlotString("平仓","止盈",High,Red);}
            Sign_N=12;
        }
        
        //=========================================加仓==================
        
           If( cond_BK01 and EntryNum==1 And EntryNum<Max_lots and BarsSincelastEntry>0 ){Buy(share,Max(EntryP_01+G_Moxe,Open));EntryNum=2;EntryP_02=Max(EntryP_01+G_Moxe,Open);}
           If( cond_BK02 and EntryNum==2 And EntryNum<Max_lots and BarsSincelastEntry>0 ){Buy(share,Max(EntryP_02+G_Moxe,Open));EntryNum=3;EntryP_03=Max(EntryP_02+G_Moxe,Open);}
           If( cond_BK03 and EntryNum==3 And EntryNum<Max_lots and BarsSincelastEntry>0 ){Buy(share,Max(EntryP_03+G_Moxe,Open));EntryNum=4;EntryP_04=Max(EntryP_03+G_Moxe,Open);}
           If( cond_BK04 and EntryNum==4 And EntryNum<Max_lots and BarsSincelastEntry>0 ){Buy(share,Max(EntryP_04+G_Moxe,Open));EntryNum=5;EntryP_05=Max(EntryP_04+G_Moxe,Open);}
           If( cond_BK05 and EntryNum==5 And EntryNum<Max_lots and BarsSincelastEntry>0 ){Buy(share,Max(EntryP_05+G_Moxe,Open));EntryNum=6;EntryP_06=Max(EntryP_05+G_Moxe,Open);}
           If( cond_BK06 and EntryNum==6 And EntryNum<Max_lots and BarsSincelastEntry>0 ){Buy(share,Max(EntryP_06+G_Moxe,Open));EntryNum=7;EntryP_07=Max(EntryP_06+G_Moxe,Open);}
           If( cond_BK07 and EntryNum==7 And EntryNum<Max_lots and BarsSincelastEntry>0 ){Buy(share,Max(EntryP_07+G_Moxe,Open));EntryNum=8;EntryP_08=Max(EntryP_07+G_Moxe,Open);}
           If( cond_BK08 and EntryNum==8 And EntryNum<Max_lots and BarsSincelastEntry>0 ){Buy(share,Max(EntryP_08+G_Moxe,Open));EntryNum=9;EntryP_09=Max(EntryP_08+G_Moxe,Open);}
           If( cond_BK09 and EntryNum==9 And EntryNum<Max_lots and BarsSincelastEntry>0 ){Buy(share,Max(EntryP_09+G_Moxe,Open));EntryNum=10;EntryP_10=Max(EntryP_09+G_Moxe,Open);}
         //=======================================状态码控制=============
           If(Sign_N_REF[1]!=EntryNum and BarStatus == 2)
           {
                 If(EntryNum==1 and Sign_N!=1){A_SendOrderEx(Enum_Buy,Enum_Entry,1,EntryP_01,my_id); print("订单委托:--首单---委托价:"+text(EntryP_01)+"---时间="+Text(time));Sign_N=1;}
                 If(EntryNum==2 and Sign_N!=2){A_SendOrderEx(Enum_Buy,Enum_Entry,share,EntryP_02,my_id); print("订单委托:--加仓1---委托价:"+text(EntryP_02)+"---时间="+Text(time));Sign_N=2;}
                 If(EntryNum==3 and Sign_N!=3){A_SendOrderEx(Enum_Buy,Enum_Entry,share,EntryP_03,my_id); print("订单委托:--加仓2---委托价:"+text(EntryP_03)+"---时间="+Text(time));Sign_N=3;}
                 If(EntryNum==4 and Sign_N!=4){A_SendOrderEx(Enum_Buy,Enum_Entry,share,EntryP_04,my_id); print("订单委托:--加仓3---委托价:"+text(EntryP_04)+"---时间="+Text(time));Sign_N=4;}
                 If(EntryNum==5 and Sign_N!=5){A_SendOrderEx(Enum_Buy,Enum_Entry,share,EntryP_05,my_id); print("订单委托:--加仓4---委托价:"+text(EntryP_05)+"---时间="+Text(time));Sign_N=5;}
                 If(EntryNum==6 and Sign_N!=6){A_SendOrderEx(Enum_Buy,Enum_Entry,share,EntryP_06,my_id); print("订单委托:--加仓5---委托价:"+text(EntryP_06)+"---时间="+Text(time));Sign_N=6;}
                 If(EntryNum==7 and Sign_N!=7){A_SendOrderEx(Enum_Buy,Enum_Entry,share,EntryP_07,my_id); print("订单委托:--加仓6---委托价:"+text(EntryP_07)+"---时间="+Text(time));Sign_N=7;}
                 If(EntryNum==8 and Sign_N!=8){A_SendOrderEx(Enum_Buy,Enum_Entry,share,EntryP_08,my_id); print("订单委托:--加仓7---委托价:"+text(EntryP_08)+"---时间="+Text(time));Sign_N=8;}
                 If(EntryNum==9 and Sign_N!=9){A_SendOrderEx(Enum_Buy,Enum_Entry,share,EntryP_09,my_id); print("订单委托:--加仓8---委托价:"+text(EntryP_09)+"---时间="+Text(time));Sign_N=9;}
                 If(EntryNum==10 and Sign_N!=10){A_SendOrderEx(Enum_Buy,Enum_Entry,share,EntryP_10,my_id); print("订单委托:--加仓9---委托价:"+text(EntryP_10)+"---时间="+Text(time));Sign_N=10;}
                 
                 If(Sign_N==11){A_SendOrderEx(Enum_Sell,Enum_Exit,MaxContracts,Min(EntryP_01-S_pin,Open),my_id); print("订单委托:--止损---委托价:"+text(Min(EntryP_01-S_pin,Open))+"---时间="+Text(time));Sign_N=0;}
                 If(Sign_N==12){A_SendOrderEx(Enum_Sell,Enum_Exit,MaxContracts,Max(EntryP_01+Y_Moxe,Open),my_id); print("订单委托:--止盈---委托价:"+text(Max(EntryP_01+Y_Moxe,Open))+"---时间="+Text(time));Sign_N=0;}
           }
           //====================================
            If(Sign_N_REF[1]!=EntryNum )
           {
               print("EntryNum-[发生变化]---当前:"+text(EntryNum)+"---前一个---"+text(Sign_N_REF[1])+"   时间= "+text(time));
               
               }
               If(Sign_N_REF[1]==EntryNum )
           {
               print("EntryNum-[相同]-------当前:"+text(EntryNum)+"---前一个---"+text(Sign_N_REF[1])+"   时间= "+text(time));
               
               }
    }
    
 

shunshui168

代码是请别人帮忙写的,我不懂代码 ,请老师看看。

1  只有信号没有买入平仓动作。

2  代码有信号闪烁问题 

麻烦老师修改一下,策略的思路是我画趋势线,然后价格到了趋势线上面就开仓,然后还有平仓 加仓 止损。

2022-11-02 10:41
您未登录,请先 登录注册 后发表评论
顶部