写的一个比较简单的单均线反手策略,参考了说明文档里的平仓反手的代码,为什么不反手呢?
OnBar(ArrayRef<Integer> indexs)
{
AvgValue = AverageFC(Close,Length);
If(Close > AvgValue)
{
PlotAuto("均线",AvgValue,AvgValue,Red,Enum_Line,Enum_Solid);
}Else
{
PlotAuto("均线",AvgValue,AvgValue,Green,Enum_Line,Enum_Solid);
}
jincha = CrossOver(Low,AvgValue);
sicha = CrossUnder(High,AvgValue);
LastBarTime = GetGlobalVar(0);
TickCounter = GetGlobalVar(1);
// 最新Bar第一次生成时,Tick重新开始计数
If(BarStatus == 2 && gValue[0]!= Time)
{
LastBarTime = Time;
TickCounter = 0;
}
Print("TickCounter="+text(TickCounter));
If(MarketPosition <> 1 && jincha[1])
{
If(MarketPosition == 0 || BarStatus != 2)
// 无持仓,直接买多仓
// 持空仓且Bar不是实时行情,平空仓,买多仓
{
Buy(lots,Open);
}Else // 持空仓,Bar实时行情,平空仓,通过TickCounter计数,延迟反手
{
BuyToCover(0,Open);
If(TickCounter == 0)
{
TickCounter = 1;
}Else If(TickCounter < DelayTicks)
{
TickCounter = TickCounter + 1;
}Else
{
Buy(lots,Open);
}
}
}
If(MarketPosition <> -1 && sicha[1])
{
If(MarketPosition == 0 || BarStatus != 2)
{
SellShort(lots,Open);
}Else // 持多仓且Bar为实时行情,平多,延迟反手
{
Sell(0,Open);
If(TickCounter == 0)
{
TickCounter = 1;
}Else If(TickCounter < DelayTicks)
{
TickCounter = TickCounter + 1;
}Else
{
SellShort(lots,Open);
}
}
}
SetGlobalVar(0,LastBarTime);
SetGlobalVar(1,TickCounter);
}
语句没执行到,则代表条件不满足
你出于什么目的这里面要使用全局变量SetGlobalVar的呢
全局变量的使用需要精准控制,
再例如你平多也不和开空在一起,你怎么保证平多就能开空?