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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → [转帖]金字塔关于编写高效率的程序

   

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


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

主题:[转帖]金字塔关于编写高效率的程序

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


加好友 发短信
等级:论坛游民 帖子:102 积分:0 威望:0 精华:0 注册:2015/7/29 23:53:28
[转帖]金字塔关于编写高效率的程序  发帖心情 Post By:2016/6/5 20:29:42    Post IP:106.117.123.93[只看该作者]

由于buy、sell要求逐K线,按我的理解,每收到一次行情数据(如期货每秒会收到两次行情),金字塔都会从第一根K线到最后一根K线逐根调用你的程序,假如你的程序加载要5秒钟,那么每收到一个tick,也同样需要5秒钟时间运算,而tick是每秒两个,你的程序来不及运算所以怎么可能不卡?逐K线的原理就是每次都是从头到尾。

废话少说,说说编写高效率程序的方法吧,以下假设你的程序相当的复杂,需要大量费时的运算:

1、勾选“仅刷最后一根K线”,这样每次就只计算一根K线,效率大大提高,勾选之后你一定不能使用未来函数,当然,我从来不使用未来函数。当然还有其它代价,就是全局变量对最后一根K线无效,后面会提到

2、少用stkindi,因为每次调用,里面都还有大量运算,就好比嵌套循环一样效率成倍下降,不得以要用时,调用的那个指标也请勾上“仅刷最后一根K线”

3、选项中“图形显示X周期”可以设小一点,一般设比你一个屏幕的K线数大一点就可以了,我发现即使图形不显示,但指标仍然会计算的,holding是正确的。显示周期设小好处是节约内存,减少界面的卡

4、内存保存K线可以设大点,选项的“内存”页选最大内存使用(用内存空间换效率)

5、写的交易程序或者指标,如果最后K线的指标值或交易信号,和N根K线前的指标值、交易信号和K线数据无关,那么点下公式编辑窗口那个“快速”按钮,根据你公式的情况输入,值越小越快,但不要小于你实际需要用到的K线数

6、善用跨周期引用行情数据(不是引用指标)而少用统计函数,这个举一个例子说明:

假如交易程序运行在1分钟K线图上,但你需要获得当日的交易额,那么有两种写法:

写法1:callstock(stklabel,vtAMOUNT,6,0);

写法2:sum(AMOUNT,BARSLAST(date<>ref(date,1)));

显然写法1比写法2效率高得多,但写法1有一个问题,那就是对历史上的K线,获得的实际上是收盘时的成交额,而不是盘中对应于1分钟图上的某时刻的成交额,属于使用了“未来数据”(未收盘而使用了收盘数据),可能大大影响你历史信号的可靠性。以下是我程序中的一段代码,供参考:

if ISLASTBAR then

SH_A_0:=CALLSTOCK('SH000001',vtAMOUNT,6,0); //当天的数据直接取,免去计算

else

SH_A_0:=STKINDI('SH000001','ac.ac',0,1,0); //历史K线也用自定义的指标ac来统计上证的截至到当前分钟的成交额,准确但效率相当低


版主评定:好评,获得10个金币奖励好评,获得10个金币奖励
(理由:奖励)
 回到顶部