欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → 软件调用策略速度太慢问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有3064人关注过本帖树形打印复制链接

主题:软件调用策略速度太慢问题

帅哥哟,离线,有人找我吗?
solegoose
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:69 积分:0 威望:0 精华:0 注册:2015/7/6 16:32:57
软件调用策略速度太慢问题  发帖心情 Post By:2019/9/16 14:21:16 [显示全部帖子]

 我现在想在5秒线上交易,发现速度很慢,我就测试一下,赶紧软件在调用策略的时候速度太慢,不知道有没有什么办法解决,或者是用专业版能否解决这个问题呢?

我先弄一个策略,里面只有这么一句:
ret := "test@test"();

就是调用test.dll函数中的test函数,其它任何语句都没有了,也不送入自定义的参数。


然后在test函数中,我用QueryPerformanceCount函数进行读取CPU的时钟周期,在我的机器上,QueryPerformanceFrequency函数返回的结果是10000000,也就是说,QueryPerformanceCount返回结果的单位是100纳秒,结果发现test函数两次调用之间的间隔可达好几百,多的可以到达1000多,这样算起来,两次函数调用的间隔居然能到达好几十微秒,如果有10000根K线,那么这个时间就需要几百毫秒,而此时还没有任何的策略计算。
对于5秒线来说,1天的K线数就达到5000以上,例如原油,金银。

 回到顶部
帅哥哟,离线,有人找我吗?
solegoose
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:69 积分:0 威望:0 精华:0 注册:2015/7/6 16:32:57
  发帖心情 Post By:2019/9/16 18:58:40 [显示全部帖子]

是逐K线模式的,我的代码如下。
__declspec(dllexport) int WINAPI RUNMODE()
{
    //本DLL运行序列模式,如果运行逐K线模式将此函数返回1,此时每执行一个K线都是调用本接口一次。
    return 1;
}

策略函数中的代码如下:
if (p->m_dwBarpos == 0)
{
QueryPerformanceCounter(&start_tick);
fprintf(fp, "%lld\n", start_tick.QuadPart);
}
p->m_pResultBuf[0] = 0;
if (p->m_dwBarpos == p->m_nNumData - 1)
{
LARGE_INTEGER freq;
QueryPerformanceFrequency(&freq);
QueryPerformanceCounter(&end_tick);
fprintf(fp, "%lld, %lld\n", end_tick.QuadPart,
(end_tick.QuadPart - start_tick.QuadPart) * 1000 / freq.QuadPart);
}
return 0;
只在第一根K线和最后一根K线做日志,故不是写文件引起的速度慢。

输出的结果是:
50594583544
50602855894, 827
总共耗时827ms,这样的耗时算得上很吓人吧。K线数目31338根。平均每根K线耗时20多微秒。这个情况你们自己可以测试的。

 回到顶部
帅哥哟,离线,有人找我吗?
solegoose
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:69 积分:0 威望:0 精华:0 注册:2015/7/6 16:32:57
  发帖心情 Post By:2019/9/17 20:19:59 [显示全部帖子]

我晕,你看代码了吗,我只在最后一根K线的时候调用了fprintf,不是每根K线都调用的。

 回到顶部
帅哥哟,离线,有人找我吗?
solegoose
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:69 积分:0 威望:0 精华:0 注册:2015/7/6 16:32:57
  发帖心情 Post By:2019/9/18 14:37:46 [显示全部帖子]

 版主能解答一下吗,整个过程中我只调用了2次fprintf,硬盘是固态的,不可能需要很多时间的。

 回到顶部
帅哥哟,离线,有人找我吗?
solegoose
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:69 积分:0 威望:0 精华:0 注册:2015/7/6 16:32:57
  发帖心情 Post By:2019/10/14 14:59:24 [显示全部帖子]

 我测试的机器cpu较差,你们测试的情况和我测试的结果一样。
我不知道你说的PEL是不是你们金字塔那个语言的引擎,好像为每一根k线调用一次引擎不合理。毕竟这里不需要调用语言中的任何函数,不需要任何指标。
我们dll内策略的优化是另外一回事,因为我们的策略只需要计算最后一根K线,前面所有K线的中间结果都有缓冲。当然以前我们的策略依赖PEL中的均线箱体等,这部分可能速度较慢。

 回到顶部