Params
Numeric N1(14);//短周期均线
Numeric N2(31);//中周期均线
Numeric ss(1);//交易手数
Numeric TR(4);
Vars
Series<Numeric> var1;
Series<Numeric> var2;
Series<Bool> condition1;
Series<Bool> condition2;
Series<Numeric> bka;
Series<Numeric> bkx;
Series<Numeric> var3;
Series<Numeric> var4;
Series<Bool> condition3;
Series<Bool> condition4;
Series<Bool> condition5;
Series<Bool> condition6;
Series<Numeric> Myprice;
Series<Numeric> var3op;
Series<Numeric> var4op;
Series<Numeric> LowerAfterEntry;
Series<Numeric> HigherAfterEntry;
Series<Numeric> Myprice2;
Series<Numeric> Myprice3;
Events
onBar(ArrayRef<Integer> indexs)
{
var1=Average(C[1],N1);//短周期均线
var2=Average(C[1],N2);//中周期均线
PlotNumeric("var1",var1[1]);
PlotNumeric("var2",var2[1]);
condition1 = CrossOver(var1,var2);//金叉
condition2 = CrossUnder(var1,var2);//死叉
If(condition1);
{
bka=CurrentBar;
}
If(condition2)
{
bkx=CurrentBar;
}
var3=Highest(H[1],(bka-bkx)+1);//计算本次金叉到上次死叉的时间范围内的高点
var4=Lowest(L[1],(bkx-bka)+1);//计算本次死叉到上次金叉的时间范围内的低点
condition3=condition1 And bka>bkx And bka>0 And bkx>0 And CurrentBar>0;//当均线金叉同时bka大于bkx且bka和bkx都不等于0时,条件3成立(多头条件)
If(condition3)
{
var3op=var3;//条件3成立时,将var3赋值储存到var3op,保存金叉时的最高点到全局变量var3op里面
}
condition4=condition2 And bkx>bka And bka>0 And bkx>0 And CurrentBar>0;//当均线死叉同时bkx大于bka且bka和bkx都不等于0时,条件4成立(空头条件)
If(condition4)
{
var4op=var4; //条件4成立时,将var4赋值储存到var4op,保存死叉时的最低点到全局变量var4op里面
}
condition5=var1>var2 and CrossOver(C[1],var3op);//当短周期均线大于中期均线,并且价格突破高点时,条件5成立
If(condition5 And MarketPosition<>1)
{
Myprice=Open;//保存本根bar的开盘价;
Buy(ss,Myprice);//按开盘价开多头;
Commentary("多头开仓");
LowerAfterEntry=EntryPrice;//保存多头开仓价格;
}
condition6=var1<var2 And CrossUnder(C[1],var4op);//当短周期均线小于中周期均线,并且价格跌破最低点时,条件6成立
If(condition6 And MarketPosition<>1)
{
Myprice=Open;//保存本根bar的开盘价;
SellShort(ss,Myprice);//按开盘价开空;
Commentary("空头平仓");
HigherAfterEntry=EntryPrice;//保存空头开仓价格;
}
//记录多头最低价和空头最高价
If(MarketPosition==1 And BarsSinceEntry==0)//有多头持仓时,刚进场时的本根bar线序号
{
HigherAfterEntry= HigherAfterEntry[1];
LowerAfterEntry=Max(LowerAfterEntry,Low);//多头出场的参考价格
}
If(MarketPosition==-1 And BarsSinceEntry==0)//有空头持仓时,刚进场时的本根bar线序号
{
HigherAfterEntry=Min(HigherAfterEntry,High);//空头出场的参考价格
LowerAfterEntry=LowerAfterEntry[1];
}
If(MarketPosition<>0 And BarsSinceEntry>=1)
{
LowerAfterEntry=Max(LowerAfterEntry,Low);//多头出场的参考价格
HigherAfterEntry=Min(HigherAfterEntry,High);//空头出场的参考价格
}
//跟踪出场
Myprice2=LowerAfterEntry-Open*TR/100;
//PlotNumeric("Myprice2",Myprice2);//多头出场线
If(MarketPosition==1 And Low<=Myprice2 And BarsSinceEntry>0)//当持有多单持仓时,最新价格跌破止损线,同时平仓信号和开仓信号不在同一根bar线;
{
Myprice2=Min(Myprice2,Open);//如果跳空击破,取值最新的bar线的开盘价,若不是,去出场线价格;
Sell(ss,Myprice2);//多头平仓;
Commentary("多头平仓");
}
Myprice3=HigherAfterEntry+Open*TR/100;
//PlotNumeric("Myprice3",Myprice3);//空头出场线
If(MarketPosition==-1 And High>=Myprice3 And BarsSinceEntry>0)//当持有空单持仓时,最新价格突破出场线,同时平仓信号和开仓信号不同一根bar线;
{
Myprice3=Max(Myprice3,Open);//如果跳空击破,取值最新的bar线的开盘价,若不是,去出场线价格;
BuyToCover(SS,Myprice3);//空头平仓
Commentary("空头平仓");
}
}
If(condition1);
{
bka=CurrentBar;
}
If(condition1); 这里多了个分号,相当于if条件之后没语句,下面每次bar更新都执行了bka=CurrentBar; 应该是这个问题,楼主你试试修改一下
可以投稿 直播时讲解