最近在客服群看到还有很多用户在讨论如何写跨周期的问题,尤其是有一些执迷于非要从大周期去产生信号,到小周期去执行的用户,我实在忍不住要说一句,这是绝对错误的,至少基于TB的机制来写策略,这样写是必定会产生信号闪烁的!!
所以,正确的写法一定是从小周期来调用大周期。这样写完全能够实现大家想从大周期调用要实现的策略目标,而且不会产生信号闪烁。个中原理,有时间再发帖细述。
今天先贴个TBQ一出来,我就写过的老例子,供TBQ爱好者参考。
// 演示 -- 跨周期加数组实现盘中进出场
// 以单均线系统为例,Data0为小周期(可Tick),Data1为实际策略运行周期
// 通过数组从Data1读取大周期历史数据,从data0获取实时数据
//在Data0(小周期)上通过数组函数计算大周期实时指标,判断交易条件
// 实现盘中进场和出场等
//
// 总结:
//通过TBQuant提供的跨周期调用,加上数组,实现对大周期实时数据的调用
Params
Numeric MaLen(5,5,50,5);// 均线周期
Numeric amount(100);// 使用资金N万
Numeric myTP(200);// 止盈跳数
Numeric mySL(50);// 止损跳数
Numeric Offset(10);// 均线突破偏移跳数,避免价格频繁穿越均线产生交易
Vars
Numeric Lots;// 交易手数
Series<Numeric> Ma(1,2);// 均线
Array<Numeric> D1Close;// D1收盘价
Series<Numeric> TradeDirection(0); // 交易方向
Numeric MinPoint;
Numeric i;
Events
onBar(ArrayRef<Integer> indexs)
{
MinPoint = MinMove * PriceScale;
Lots = Max(1,IntPart(amount*10000/(Open*ContractUnit*BigPointValue)));
// 计算大周期均线
Range[1:1]
{
Ma = AverageFC(Close,MaLen);
PlotNumeric("Ma",Ma);
}
// 通过数组实现在Data0图层计算Data1图层的实时指标
// 历史数据直接从Data1获取
for i = 1 to MaLen-1
{
D1Close[i] = Data1.Close[i];
}
// 实时数据从Data0获取
D1Close[0] = Close;
// 数据集中到数组后,通过数组函数计算Data1均线
Ma = AverageArray(D1Close);
PlotNumeric("Ma",Ma);
// 交易进场
If(MarketPosition <> 1 And Close[1] > Ma[1] + Offset*MinPoint And TradeDirection <> 1)
{
Buy(Lots,Open);
TradeDirection = 1;
}
If(MarketPosition <> -1 And Close[1] < Ma[1] - Offset*MinPoint And TradeDirection <> -1)
{
SellShort(Lots,Open);
TradeDirection = -1;
}
// 多头出场
If(MarketPosition == 1 And BarsSinceEntry > 0 And Low <= EntryPrice - mySL * MinPoint)
{
//止损
Sell(0,Min(Open,EntryPrice - mySL * MinPoint));
}
Else If(MarketPosition == 1 And BarsSinceEntry > 0 And High >= EntryPrice + myTP * MinPoint)
{
// 止盈
Sell(0,Max(Open,EntryPrice + myTP * MinPoint));
}
// 空头出场
If(MarketPosition == -1 And BarsSinceEntry > 0 And High >= EntryPrice + mySL * MinPoint)
{
//止损
BuyToCover(0,Max(Open,EntryPrice + mySL * MinPoint));
}
Else If(MarketPosition == -1 And BarsSinceEntry > 0 And Low <= EntryPrice - myTP * MinPoint)
{
// 止盈
BuyToCover(0,Min(Open,EntryPrice - myTP * MinPoint));
}
}
请大家多多关注TBQuant社区,也欢迎大家评论。
请问这个变量定义后面的括号里的数字是什么意思?
Series<Numeric> Ma(1,2);// 均线