Params
Numeric FastLength(1);// 短期指数平均线参数
Numeric SlowLength(276);// 长期指数平均线参数
Vars
Series<Numeric> AvgValue1;
Series<Numeric> AvgValue2;
Series<Numeric> CrossTimes; // 穿越次数
Series<Numeric> XDss;
Events
OnReady()
{
SetBackBarMaxCount(1+Max(FastLength,SlowLength));
}
OnBar(ArrayRef<Integer> indexs)
{
// 每次进入 OnBar 时,先检查是否有持仓
If(MarketPosition == 0)
{
CrossTimes = 0; // 无持仓时,重置穿越次数为0
}
AvgValue1 = AverageFC(Close,FastLength);
AvgValue2 = AverageFC(Close,SlowLength);
PlotNumeric("MA1",AvgValue1);
PlotNumeric("MA2",AvgValue2);
// 当有持仓且均线发生交叉时,增加穿越次数
If(MarketPosition <> 0 && (CrossOver(AvgValue1,AvgValue2) || CrossUnder(AvgValue1,AvgValue2)))
{
CrossTimes = CrossTimes + 1;
Print("穿越次数:" + Text(CrossTimes));
}
// 买入条件
If(MarketPosition <> 1 && AvgValue1[1] > AvgValue2[1])
{
BuyToCover(0, Open);
Buy(0, Open);
}
// 卖出条件
If(MarketPosition <> -1 && AvgValue1[1] < AvgValue2[1])
{
Sell(0, Open);
SellShort(0, Open);
}
}
建议投稿
CrossTimes设置成Global Integer试试?
感觉每次平对向仓,开新仓的时候,CrossTIMES都需要重置为0
谢谢 我试试 不过还是不能感觉,需要官方信息
应该是被污染了
在onbar域里 所有代码前面加一句
if(currentbar<maxbarsback) return;
老师好,被污染是什么意思?怎么解决呢?我加了还是不行。谢谢指教
Params
Numeric FastLength(10);// 短期指数平均线参数
Numeric SlowLength(60);// 长期指数平均线参数
Vars
Series<Numeric> AvgValue1;
Series<Numeric> AvgValue2;
Series<Numeric> CrossTimes; // 穿越次数
Series<Numeric> XDss;
Events
OnBar(ArrayRef<Integer> indexs)
{
if(currentbar<maxbarsback) return;
If(MarketPosition == 0)
{
if(currentbar<maxbarsback) return;
CrossTimes=0; // 无持仓时,重置穿越次数为0
}
}
OnBarOpen(ArrayRef<Integer> indexs)
{
// 每次进入 OnBar 时,先检查是否有持仓
if(currentbar<maxbarsback) return;
AvgValue1 = AverageFC(Close,FastLength);
AvgValue2 = AverageFC(Close,SlowLength);
PlotNumeric("MA1",AvgValue1);
PlotNumeric("MA2",AvgValue2);
// 当有持仓且均线发生交叉时,增加穿越次数
If(MarketPosition <> 0 && (CrossOver(AvgValue1,AvgValue2) || CrossUnder(AvgValue1,AvgValue2)))
{
CrossTimes = CrossTimes + 1;
Print("穿越次数:" + Text(CrossTimes));
}
// 买入条件
If(MarketPosition <> 1 && AvgValue1[1] > AvgValue2[1])
{
BuyToCover(0, Open);
Buy(0, Open);
}
// 卖出条件
If(MarketPosition <> -1 && AvgValue1[1] < AvgValue2[1])
{
Sell(0, Open);
SellShort(0, Open);
}
}