TbQuant3的复盘调试
Tbquant3的复盘调试不清楚什么逻辑,现在测试的结果得出如下。1 播放适度,是真实速度,1s/1根就是1s一个tick触发。2 周期无,就是历史测试,1K一次tick。然后基础周期设置越小,tick数越多。但是tick的数量多少,弄不清楚。比如我测试的:5分钟周期k线,设置基础周期1分钟,大概600tick,基础周期5分钟,大概120Tick,15分钟,大概40tick,30分钟,大概20tick。然后1分钟周期k线,设置基础周期1分钟,大概120tick,基础周期5分钟,大概24Tick,15分钟,大概8tick,30分钟,大概4tick。完全不和文档的描述的一致,不懂为什么你们设置那么复杂,然后又不解释清楚。我的理解:1 播放速度是一个参数,调节播放时间的,现在的设置就可以。2 那么第二个参数是设置bar的tick数量,你们思考一下,能简单点的吗?
//------------------------------------------------------------------------// 简称: TbQuantRunLogicTest// 名称: // 类别: 策略应用// 类型: 用户应用// 输出: Void//------------------------------------------------------------------------Params //此处添加参数 Numeric millsecs(1000);Vars //此处添加变量 Numeric avg; Global Integer timerId; Global Integer TickCount(0); Series<Numeric> TestSeries(0);Defs //此处添加策略函数 Numeric calcAvg(Numeric a,Numeric b) { return (a+b)/2; }Events //此处实现事件函数 //初始化事件函数,策略运行期间,首先运行且只有一次,应用在订阅数据等操作 OnInit() { timerId=createTimer(millsecs); //与数据源有关 Range[0:DataCount-1] { //=========数据源相关设置============== //AddDataFlag(Enum_Data_RolloverBackWard()); //设置后复权 //AddDataFlag(Enum_Data_RolloverRealPrice()); //设置映射真实价格 //AddDataFlag(Enum_Data_AutoSwapPosition()); //设置自动换仓 //AddDataFlag(Enum_Data_IgnoreSwapSignalCalc()); //设置忽略换仓信号计算 //AddDataFlag(Enum_Data_OnlyDay()); //设置仅日盘 //AddDataFlag(Enum_Data_OnlyNight()); //设置仅夜盘 //AddDataFlag(Enum_Data_NotGenReport()); //设置数据源不参与生成报告标志 //=========交易相关设置============== //SetMarginRate(0.1); //设置保证金率为10% //CommissionRate tCommissionRate; //tCommissionRate.ratioType = Enum_Rate_ByFillAmount; //tCommissionRate.openRatio = 5; //设置开仓手续费为成交金额的5%% //tCommissionRate.closeRatio = 2; //设置平仓手续费为成交金额的2%% //tCommissionRate.closeTodayRatio = 0; //设置平今手续费为0 //SetCommissionRate(tCommissionRate); //设置手续费率 //SetSlippage(Enum_Rate_PointPerHand,2); //设置滑点为2跳/手 //SetOrderPriceOffset(2); //设置委托价为叫买/卖价偏移2跳 //SetOrderMap2MainSymbol(); //设置委托映射到主力 //SetOrderMap2AppointedSymbol(symbols, multiples); //设置委托映射到指定合约,symbols是映射合约数组,multiples是映射倍数数组 } //与数据源无关 //SetBeginBarMaxCount(10); //设置最大起始bar数为10 //SetBackBarMaxCount(10); //设置最大回溯bar数为10 //=========交易相关设置============== //SetInitCapital(1000000); //设置初始资金为100万 //AddTradeFlag(Enum_Trade_Ignore_Buy()); //设置忽略多开 //AddTradeFlag(Enum_Trade_Ignore_Sell()); //设置忽略多平 //AddTradeFlag(Enum_Trade_Ignore_SellShort()); //设置忽略空开 //AddTradeFlag(Enum_Trade_Ignore_Buy2Cover()); //设置忽略空平 } //在所有的数据源准备完成后调用,应用在数据源的设置等操作 OnReady() { } //基础数据更新事件函数 OnDic(StringRef dicName,StringRef dicSymbol,DicDataRef dicValue) { } //在新bar的第一次执行之前调用一次,参数为新bar的图层数组 OnBarOpen(ArrayRef<Integer> indexs) { TickCount = 0; } //Bar更新事件函数,参数indexs表示变化的数据源图层ID数组 OnBar(ArrayRef<Integer> indexs) { TickCount = TickCount + 1; avg=calcAvg(high,low); Print(DateTimeToString(SystemDateTime)+":OnBar"+",Num:"+Text(CurrentBar)+",BarStatus:"+Text(BarStatus)+",TickCount"+Text(TickCount)); }} //------------------------------------------------------------------------// 编译版本 2026/9/24 100305// 版权所有 nh_02101802// 更改声明 TradeBlazer Software保留对TradeBlazer平台// 每一版本的TradeBlazer策略修改和重写的权利//------------------------------------------------------------------------
回复:测试代码发了,我说tick数量就是diamond的tickCount ,就是一更k线,onBar里面触发的次数。
回复:测试代码发了,我说tick数量就是代码的tickCount ,就是一根k线,onBar触发的次数。
官方文档:图表周期是15分钟,也可以设置基础周期是5分钟。如果设置1秒1根K线。 那么用户看到界面是,15分钟的图表,1秒更新当前K线一次,一次更新5分钟的信息,更新3次,就换下一根15分钟K线。那么第二个问题,也不是tick的数量,这个是回放,按一定速率播放历史k线,按您描述测试的,5分钟周期k线,不管几秒一根(这个是设置的播放速度),但是这些播放出来的k线是有变化的,基础周期就是设置变化的次数,设置基础周期1分钟,一次跟新1分钟内的信息,分5次更新完这一根5分钟周期的最终k线形态,设置的基础周期越大,一次更新的分钟信息越长,次数越少,就是很快就帮就帮你把这根k线定型,接着往后播放。不清楚您这边tick数量代码是怎么计算的,但是统计的个数*基础周期数都是600和120,总量是固定的,说明是要在设置的基础周期内按次数播放完这根k线的变化,自定义周期最小1s,按道理盘口活跃会有2个tick数据,播放模拟的tick更新1分钟就是120次,5分钟是就是600,这样其实是对的上的。
回复:官方文档:图表周期是15分钟,也可以设置基础周期是5分钟。如果设置1秒1根K线。 那么用户看到界面是,15分钟的图表,1秒更新当前K线一次,一次更新5分钟的信息,更新3次,就换下一根15分钟K线。就是这个不对啊!更新3次换下一更15分钟k线,我说的tick就是更新的次数,就是onBar进入的次数。5分钟周期k线,设置基础周期是5分钟,按文档描述,1根k线,应该是更新一次onBar,但是实际测试1个k线更新了600次的onBar。
回复:5分钟周期k线,设置基础周期是5分钟,按文档描述,1根k线,应该是更新一次onBar,但是实际测试1个k线更新了120次的onBar。
回复:其实我的意思就是根据你们的设置,不清楚到底一个bar更新了几次onbar. 比如我的测试结果,你不测试你能计算出来一个bar更新几次?5分钟周期k线,基础周期设置5次,按文档理解应该更新一次onBar,但是实际测试更新了120次onBar
回复:不是跟新一次onbar,是更新1次,5分钟内的信息,基础周期5分钟,1次更新完,不是多少次onbar,你按我说的,按道理盘口活跃会有2个tick数据,播放模拟的tick更新1分钟就是120次,5分钟是就是600,这个次数跟你的onbar就对的上
回复:算了,你们玩捉迷藏的,爱咋地咋地
回复:不好意思,态度有点激动,主要是那么一个回测的东西,文档描述不清楚。然后我回测后也弄不清楚,然后问了也说不清楚,弄了几轮都弄不明白,算了,我不管了,总可以了把!
回复:问题结束,不用回复了,浪费了大家时间。
回复:😀给您带来不便了