以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4) ---- [转帖]金字塔关于编写高效率的程序 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=98257) |
-- 作者:beldon -- 发布时间:2016/6/5 20:29:42 -- [转帖]金字塔关于编写高效率的程序 由于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来统计上证的截至到当前分钟的成交额,准确但效率相当低 |