Rss & SiteMap

金字塔客服中心 - 专业程序化交易软件提供商 http://www.weistock.com/bbs/

专业程序化软件提供商
共1 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

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

1楼
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来统计上证的截至到当前分钟的成交额,准确但效率相当低

共1 条记录, 每页显示 10 条, 页签: [1]


Powered By Dvbbs Version 8.3.0
Processed in 0.03906 s, 3 queries.