增加tb的多核使用率和提高单核利用率的建议
2023-02-12 18:50
公式在k线上有绘图,并且屏幕上k线显示数量很多的情况下,放大和缩小的动作执行非常慢。缩小后出现长竖线。观察资源监视器,放大和缩小执行过程中,cpu的十几个核里,只有2~3个核有参与工作的迹象,并且平均利用率低于50%。请问官方,是否能想办法增加tb的多核使用率和提高单核利用率?
这个没有缩小,显示正常!
经软件工程师检测,通过不同显示器、显卡对比,与显示器、显卡没有关系。
请把公式代码发出来,否则无法定位是什么问题、
关于使用cpu线程的问题,由于tbquant是专业的量化交易软件,集回测优化、组合交易等强大功能与一体。k线显示对于这些重要的功能来说并不是非常重要的功能,否则如果因为缩放k线导致占用过多资源,然后影响了后台参数优化或者实盘交易的执行及相应速度,恐怕就是得不偿失了吧
老师:公式早就发了!还希望得到您的帮助!
老师:每天都在看。代码已经提供,期待得到改善!
谢谢老师的关注!缠论要用到,还需要递归升级,这个功能非常重要。我做了一个简单的矩形画线公式,请教老师,能不能解决这个问题!
Vars
//图形输出变量
Plot plt;//定义画图对象结构体
Integer i;
Defs
//函数02:矩形输出(名称,左位索引,右位索引,上值,下值,宽度,颜色)
Bool Party(String name,Numeric LeftOne,Numeric RightOne,Numeric OnValue,Numeric UnValue,Integer Pix,Integer Color)
{
Numeric Leftind;//左索引对应时间
Numeric Rightind;//右索引对应时间
Bar BrLeft;
Bar BrRight;
GetBar(BrLeft,CurrentBar-LeftOne);
GetBar(BrRight,CurrentBar-RightOne);
Leftind=BrLeft.DateTime;//左索引对应时间
Rightind=BrRight.DateTime;//右索引对应时间
plt.setOption(name+"边","color",Color);//颜色
plt.setOption(name+"边","width",Pix);//线条宽度
plt.barv(name+"边",Leftind,OnValue,UnValue);//左边输出
plt.barv(name+"边",Rightind,OnValue,UnValue);//右边输出
plt.setOption(name+"上","color",Color);//颜色
plt.setOption(name+"上","width",Pix);//线条宽度
plt.setOption(name+"上","line-display","interval");//不连续
plt.setOption(name+"下","color",Color);//颜色
plt.setOption(name+"下","width",Pix);//线条宽度
plt.setOption(name+"下","line-display","interval");//不连续
For i=1 To RightOne-LeftOne
{
GetBar(BrLeft,CurrentBar-LeftOne-i);
plt.line(name+"上",BrLeft.DateTime,OnValue);//
plt.line(name+"下",BrLeft.DateTime,UnValue);//
}
Return True;
}
Events
OnInit()
{
SubscribeBar("rb888.SHFE","1m",20230103,20230209,0);
}
OnBar(ArrayRef<Integer> indexs)
{
If(CurrentBar==500)
Party("中枢",50,500,H+10,L-10,Enum_2Pix,RGB(0,0,255));
If(CurrentBar==2000)
Party("中枢",800,2000,H+10,L-10,Enum_2Pix,RGB(0,0,255));
If(CurrentBar==3000)
Party("中枢",2200,3000,H+10,L-10,Enum_2Pix,RGB(0,0,255));
If(CurrentBar==4000)
Party("中枢",3200,4000,H+10,L-10,Enum_2Pix,RGB(0,0,255));
If(CurrentBar==5000)
Party("中枢",4200,5000,H+10,L-10,Enum_2Pix,RGB(0,0,255));
If(CurrentBar==6000)
Party("中枢",5200,6000,H+10,L-10,Enum_2Pix,RGB(0,0,255));
If(CurrentBar==7000)
Party("中枢",6200,7000,H+10,L-10,Enum_2Pix,RGB(0,0,255));
}
我已经实现了缠论的递归,中枢不用竖线,但是,拖动、缩放图表时,卡顿现象十分严重,有时10~20秒才能动一动。请问专家,能不能解决这个缺陷。
缠论实现量化,真的不容易。我已经经过了五年多的努力了,才能基本实现。恳请软件专家能改进改进图表运行速度的问题!!拜托拜托!
我还要向上递归2个级别走势。我担心,图表会运行不起来了!
关闭笔中枢,再向上递归,图表还是运行缓慢
谢谢关注!目前正在优化。昨天梳理参数传递,删除了可有可无的参数。今天考虑分型、笔的函数,调到主程序内部,成为内函数,看看能不能提升效率。
建议你把计算拆成两部分, 如果用的时tbquant 建议你在策略交易单元里把你要输出的这些笔或者中枢位置的点实时计算写基础数据,然后另外再写个公式,读取基础数据并在k线显示即可解决卡顿问题。如果你用的时智大领峰,大批量计算可以通过新建页面的策略运行里运行写基础数据,然后通过另一个公式读基础数据并显示。
你的卡顿问题即使提高了内存和cpu效率, 再你切换品种时,因为要大批量多周期重新订阅及计算也会再卡顿的。所以分布式处理,计算和展示能有效解决你的需求,甚至计算你都可以分布式,一个策略单元运行1分钟中枢计算并写基础数据,另一个策略单元用5分钟读取1分钟中枢信息合成5分钟,并再写入基础数据,15分钟再读5分钟中枢数据,等等
写入基础数据的方法,原先也考虑过,担心实时的效率问题,后来没有进行。现在主要将各个层级走势拆分成函数,然后调用。问题还是比较大!
基础数据是可以用 SubscribeDic 实时订阅的, 只要你硬盘读写速度够快就行, 这样,计算和显示就分离了, 显示时就不需要调用过多资源,你可以试试,
谢谢指点!我目前正在优化,尽力提高运行效率!然后再分布式读写基础数据。最后也只能走这条路!
在一个周期里获取顶底分型,不断向上递归收敛,不跨周期,是不是会快一些
我就是这样做的。
@rtmb888215 可以选择在大周期上操作,可以过滤掉很多小级别,另外请教一下,基础K线处理时,吞没线是一直往前吞,直到吞不下为止,还是只吞前面那一根,我之前只用三根判断,只吞前一根来写的
包含关系,前后都要包含的。
后面有具体图例。