全部 智大领峰 TBQuant功能 TBL语言 TB开户 其他
TBQ跨周期调用实时进出场的例子
tblaocai 分享到
2020-06-20 10:07

最近在客服群看到还有很多用户在讨论如何写跨周期的问题,尤其是有一些执迷于非要从大周期去产生信号,到小周期去执行的用户,我实在忍不住要说一句,这是绝对错误的,至少基于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社区,也欢迎大家评论。

 

TB_Futures

请问这个变量定义后面的括号里的数字是什么意思?

Series<Numeric> Ma(1,2);// 均线

2020-11-24 11:29
您未登录,请先 登录注册 后发表评论
顶部