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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件交易策略发布专区 → [原创]教你写一个不卡的复杂图表策略

   

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


  共有20848人关注过本帖平板打印复制链接

主题:[原创]教你写一个不卡的复杂图表策略

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


加好友 发短信
等级:黑侠 帖子:993 积分:1787 威望:0 精华:5 注册:2012/11/28 17:37:20
  发帖心情 Post By:2013/5/2 11:46:46 [只看该作者]

昨晚赶着1点前发贴,没写完

 

为了写得通用,我设了两个参数,解释一下

保留信号数=20   //如果设为0表示显示所有交易信号,如果设20表示仅显示最后20个信号,设得值越小肯定速度越快,建议设置5~20个左右

策略号=0          //策略号不能重复,如果你有4个策略同时跑,那么请设置不同的策略号,策略号的设置范围为0~999,如果两个图表策略设置相同策略号,将产生冲突

 

最好不要使用ref等金字塔提示不能用在if ... then语句中的函数,如果你要引用前面的周期,建议改为callstock(stklabel,.....)等表达方式,因为金字塔没有提示在if then中不能用callstock

 

 

假设:你的策略非常复杂,每计算一个K线需要0.2秒,使用一分钟K线周期,每秒收到两个tick行情,您的图表一共有5千根K线,历史上一共产生了200个交易信号

那么,我可以为您做个优化前后的对比:

 

优化前:每收到一个tick行情需要计算0.1秒,每秒需要计算两次,即0.2秒;每根K线走完需要进行一次5千根K线的循环计算,即500秒(那肯定是卡死了),您以前唯一可以优化的是点那个“快速”按钮,假如您输入的是100根K线,那么您的程序1分钟也会卡住10秒钟,如果你的信号跨度比较大,比如有可能持仓超过100根K线,那么此方法还行不通了

 

优化后:一分钟时间内只需要调用最多两次VBA,写和读200次单值全局变量数据库,200个交易指令,一次完整的K线运算,具体如下:

收到新行情时,直接退出,不消耗cpu;每走完一根K线时,需要调用一次VBA(消耗0.00001秒),把历史上的200个交易信号写入单值全局变量数据库,需要写200次全局变量(需要0.000002*200=0.0004秒),以上过程加上数据处理的时间(主要是将信号产生的日期和时间转换为K线序号),我算他0.1秒是绰绰有余了。另外需要0.1秒计算倒数第二根K线,如果这根K线产生了信号,那么需要再次调用VBA把信号记录(这个记录操作我也算他0.1秒)。再加上金字塔本身循环5000个K线所需的时间(但没有任何代码去处理他),这个没测过,应该很快

也就是,最多消耗0.3秒左右即可完成,比之前的大大提高了。

注:关于调用VBA和单值全局变量数据库的操作速度,可参考我另外一个帖子的测试结果,结果显示 GLOBALVARIABLE快于 单值全局变量数据库 快于VBA调用,所以我写程序的时候尽可能把VBA调用次数减少到最低,并且能用GLOBALVARIABLE就不用EXTGBxxx

 

 


[本帖被加为精华]
 回到顶部
总数 18 1 2 下一页