Params
Numeric NumberONE(1); //开仓数
Numeric Q(9); //过阈值 9
Numeric N(120); //分水岭 120
Vars
Series<Numeric> H1;
Series<Numeric> L1;
Series<Numeric> H2;
Series<Numeric> L2;
Series<Numeric> K1;
Series<Numeric> K2;
Series<Numeric> G;
Series<Numeric> MA;
Numeric MinPoint;
Bool Condition1;
Bool Condition2;
Numeric Condition3;
Numeric Condition4;
Numeric Condition5;
Numeric Condition6;
Events
OnInit()
{
SetbeginBarMaxCount(-1);
SubscribeBar(data0.symbol, \"5m\",Data0.BeginDateTime);
/*
Range[0:DataCount-1]
{
AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权
AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格
SetOrderMap2MainSymbol(); //设置委托映射到主力
SetSlippage(Enum_Rate_PointPerHand,1); //设置滑点为2跳/手
SetOrderPriceOffset(0); //设置委托价为叫买/卖价偏移2跳
SetInitCapital(1000000); //设置初始资金为X万
}
*/
}
OnBarClose(ArrayRef<Integer> indexs)
{
Range[0 : DataCount - 1]
{
H1 = IIF(H<H[2] And H[1]<H[2],H[2],0);
L1 = IIF(L>L[2] And L[1]>L[2],L[2],0);
If(H1>0) H2 = H1+2*MinPoint;
If(L1>0) L2 = L1-2*MinPoint;
K1 = IIF(C>H2,-1,IIF(C<L2,1,0));
If(K1<>0) K2 = K1;
MinPoint = MinMove*PriceScale;
G = IIF(K2==1,H2,L2);
MA = XAverage(C,N);
}
Range[1 : 1]
{
Plotauto(\"data1.G\",data1.G,0,Yellow,Enum_Solid,Enum_Line,Enum_2Pix);
Plotauto(\"data1.MA\",data1.MA,0,Red,Enum_Solid,Enum_Line,Enum_2Pix);
}
Range[0 : 0]
{
//Plotauto(\"data1.G\",data1.G,0,Yellow,Enum_Solid,Enum_Line,Enum_2Pix);
// Plotauto(\"data1.MA\",data1.MA,0,Red,Enum_Solid,Enum_Line,Enum_2Pix);
}
}
OnBar(ArrayRef<Integer> indexs)
{
Condition1 = data0.C[1]>data1.G[1] And data0.H>data0.H[1] And data0.H>data1.G[1]+Q*MinPoint ;
Condition2 = data0.C[1]<data1.G[1] And data0.L<data0.L[1] And data0.L<data1.G[1]-Q*MinPoint ;
Condition3 = Max(Max(Max(data0.H[1],data0.O),data1.G[1]+Q*MinPoint),data1.MA[1]);
Condition4 = Min(Min(Min(data0.L[1],data0.O),data1.G[1]-Q*MinPoint),data1.MA[1]);
Condition5 = Max(Max(data0.H[1],data0.O),data1.G[1]+Q*MinPoint);
Condition6 = Min(Min(data0.L[1],data0.O),data1.G[1]-Q*MinPoint);
If(MarketPosition == 1) //平多
{
If (Condition2 And BarsSinceEntry > 0 )
Sell(0,Condition6);
}
If(MarketPosition == -1) //平空
{
If (Condition1 And BarsSinceEntry > 0 )
BuyToCover(0,Condition5);
}
If(MarketPosition == 0 )
{
{ //开多
If (Condition1 And data0.H>data1.MA[1] )
Buy(NumberONE,Condition3);
}
{ //开空
If (Condition2 And data0.L<data1.MA[1])
SellShort(NumberONE,Condition4);
}
}
Commentary(\"浮动盈亏=\"+text(Portfolio_PositionProfit));//当前持仓浮动盈亏
Commentary(\"建仓价格=\"+text(EntryPrice));//当前持仓建仓价格
Commentary(\"净持仓=\"+text(MarketPosition));//当前持仓净持仓
}
每节都听,而且也都下载了,反复看。。。。我再详细看看,谢谢老师详细讲解。
kyover老师,我要是只运行data1图层的onbarclose,改怎么修改呢?针对跨周期?
onbarclose返回的参数indexs里会记录驱动图层的序号
你如果想只在data1图层发生驱动的时候执行代码,那就用分支结构判断indexs数组里是否含有1元素
这些机制应该在视频课程里都有详细介绍过
第一 你给的代码无法完全复现你图表里展示的内容,需要进行调整才能变成你图上的样子。我自己调整了一下,但是不能确定调整的部分是不是会导致差异的部分。
第二 你的onbarclose里代码没有限定data1图层的代码只有在data1图层驱动的时候才运行,所以data0的图层发生驱动,导致代码执行,然后data1图层画出了点。而下面一张图,只有一个图层,确实没有发生驱动,就不会执行代码,这个效果是符合说明文档里的运行机制说明的
第三 建议你在没有完全掌握语法机制的前提下,不要随随便便拉个标题“重大bug”,本来以为真的是有什么bug,结果发现只是你没搞明白运行机制而已,久而久之问题就不想回答了。
1