设为首页收藏本站

 找回密码
 注册
查看: 2200|回复: 0
打印 上一主题 下一主题

Hilbert模型 附源码 [复制链接]

精华
0
UID
247176
积分
162
帖子
72
主题
68
阅读权限
0
注册时间
2017-2-14
最后登录
2017-5-18
跳转到指定楼层
1#
发表于 2017-3-17 11:48:21 |只看该作者 |倒序浏览
改写的“从希尔伯特变化到波浪理论择时”,通过希尔伯特变换得到瞬时周期T,将今日收盘价于T日之前收盘价做对比,若上涨则做多,若下跌则做空。若T过大则舍弃。

策略代码:
function Hilbert(Freq,shareNum,M,d)

% ------------ Hilbert Strategy-------------------%

% Freq 为输入时间频率

% shareNum 为操作的手数

% M 计算希尔伯特变化的截断参数

% d 过滤短周期波动的参数

%---------------------策略初始化与是否日内平仓---------------%

% traderDailyCloseTime(145000);     

targetList = traderGetTargetList();

HandleList = traderGetHandleList();

[marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(1).Market,targetList(1).Code);

%---------------------策略提取数据---------------%

len = 100;

[time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(1).Market,targetList(1).Code,'min',Freq, 0-len, 0,false,'FWard');

if length(close)<len+1

    return
   
end

%---------------------策略计算与基本逻辑---------------%

a = 2/(1+d);

HPFv=zeros(1,length(close)); % H浪
        
HPFv(1:2)=[0 0];

for i=3:length(close)

    HPFv(i)=(1-a/2)^2*(close(i)-2*close(i-1)+close(i-2))+2*(1-a)*HPFv(i-1)-(1-a)^2*HPFv(i-2);
   
end

N = 27;

hil = zeros(1,N);

for j = 1:N

for r = 1:2*M+1 % 离散希尔伯特变换
   
    hil(j) = hil(j) + HPFv(end-N-1+j-2*M+r)*mu(r,M);
   
end

end

tempT = zeros(1,N-1);

for i = 1:N-1
   
    tempT(i) = 2*pi/ acos( (hil(i)*hil(i+1)+HPFv(end-M-N+i)*HPFv(end-M-N+i+1)) / sqrt( (hil(i)^2+HPFv(end-M-N+i)^2) * (hil(i+1)^2+HPFv(end-M-N+i+1)^2) ) ); % 相角差为瞬时周期
   
end

% tempT

T = 0;

alpha = 2/N;

for i = 1:N-1
   
    T = alpha*tempT(i) + (1-alpha)*T;
   
end

T = round(T); % 瞬时周期的EMA平均

if (T>=length(close))
   
    return
   
end

delta = close(end) - close(end-T);

if delta>=0
   
    if marketposition<=0
        
        orderID = traderBuy(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','开多'); % 开多单

    end
   
end

if delta<0
   
    if marketposition>=0
        
        orderID = traderSellShort(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','开空'); % 开空单
        
    end
   
end

end




function muv=mu(r,M)
        
    if r==M+1
        
        muv = 0;
        
    else
        
        muv = (1-(-1)^(r-M-1))/(pi*(r-M-r));
        
    end
   
end


更多免费策略源码下载请登录DigQuant社区-策略资源下载,http://www.digquant.com.cn/stra.php

Hilbert模型源码下载:http://www.digquant.com.cn/stra.php?mod=model&pid=85
您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-4 10:22

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部