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));
}
}
代码是请别人帮忙写的,我不懂代码 ,请老师看看。
1 只有信号没有买入平仓动作。
2 代码有信号闪烁问题
麻烦老师修改一下,策略的思路是我画趋势线,然后价格到了趋势线上面就开仓,然后还有平仓 加仓 止损。