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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件功能教学汇总区 → 序列模式的运行效率是逐k线模式的10倍

   

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


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

主题:序列模式的运行效率是逐k线模式的10倍

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


加好友 发短信
等级:新手上路 帖子:73 积分:177 威望:0 精华:0 注册:2012/12/30 1:44:06
序列模式的运行效率是逐k线模式的10倍  发帖心情 Post By:2019/10/30 12:14:13 [只看该作者]

    大家都知道序列模式的运行速度比逐K线快,那么具体能快多少呢?下面我们来做个实验吧!

    以AG00白银连续为例进行测试,1分钟数据,5万根K线计算量,测试公式代码如下:

 

//逐K线模式测试代码

RUNMODE: 0;//逐k线运行模式

if barpos = 1 then
 DEBUGFILE2('D:\2222.TXT','开始',0,1);
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,P1,1);
D:SMA(K,P2,1);
J:3*K-2*D;
if barpos= DATACOUNT then
 DEBUGFILE2('D:\2222.TXT','结束',0,1);


打开图表运行完毕后,关闭图表,然后打开 D:\2222.TXT文件,看到日志记录如下:

2019-10-29 16:39:05.772    开始
2019-10-29 16:39:05.928    结束

其中后缀的 .772和 .928是毫秒数, 928-772 = 156 ,得出本次逐K线模式运行的总计算时间为156毫秒

 

下面我们再将公式的运行模式修改为序列模式

 

//序列模式测试代码

RUNMODE :1;//序列运行模式
DEBUGFILE('D:\2222.TXT','开始',0);
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,P1,1);
D:SMA(K,P2,1);
J:3*K-2*D;
DEBUGFILE('D:\2222.TXT','结束',0);


打开图表运行完毕后,关闭图表,然后打开 D:\2222.TXT文件,看到日志记录如下:

2019-10-29 16:46:43.338    开始
2019-10-29 16:46:43.352    结束

以同样的计算方法 352-338=14, 得出本次序列模式运行的总计算时间为14毫秒,比逐K线模式速度提高了10倍!


之所以序列模式会比逐K线有如此高的运行效率,主要是还是序列模式的运行机制觉定的,但是这种运行机制也带来无法从K线的时间序列上做精细控制的缺点,因此序列模式主要还是用来做指标分析,后台程序化等。其实图表程序化中用到的逐K线模式其实也可以用到序列模式的,那就是使用金字塔提供的“用户函数”功能,通过直接引用序列模式的公式来提高逐k公式的运行效率,示例如下:

我们继续以KDJ交易系统为例来说明如何对我们的交易系统进行改进,原来的KDJ交易系统代码如下:


RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,P1,1);
D:SMA(K,P2,1);
J:3*K-2*D;

手数:=ss;
//交易条件

开多平空条件:=CROSS(J,0);//开多平空条件
开空平多条件:=CROSS(100,J);//开空平多条件

//交易系统
平空:SELLSHORT(开多平空条件,手数,MARKET);
平多:SELL(开空平多条件,手数,MARKET);
开多:BUY(开多平空条件,手数,MARKET);
开空:BUYSHORT(开空平多条件,手数,MARKET);


通过上述公式我们看到,形成KDJ系统的主要算法部分是完全可以单独封装在一个序列公式中的,假设系统自带的KDJ指标就是我们重新封装好的序列公式,那么改进后的代码如下:


J:#KDJ.J(N,P1,P2)#,nodraw;

手数:=ss;
//交易条件

开多平空条件:=CROSS(J,0);//开多平空条件
开空平多条件:=CROSS(100,J);//开空平多条件

//交易系统
平空:SELLSHORT(开多平空条件,手数,MARKET);
平多:SELL(开空平多条件,手数,MARKET);
开多:BUY(开多平空条件,手数,MARKET);
开空:BUYSHORT(开空平多条件,手数,MARKET);


是不是就这么简单?范例代码中的nodraw目的是在图表上输出j值公式线便于调试

有关“用户函数 ”功能,请用户参考软件中的函数帮助


 回到顶部