楼主: 挖矿专家
2331 4

[源码分享] 【每日一策】Matlab量化交易策略之 Hilbert [推广有奖]

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

威望
0
论坛币
2016 个
通用积分
5.2622
学术水平
21 点
热心指数
21 点
信用等级
21 点
经验
6055 点
帖子
403
精华
0
在线时间
151 小时
注册时间
2017-2-8
最后登录
2017-6-27

楼主
挖矿专家 发表于 2017-3-17 11:07:23 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
策略思路:

改写的“从希尔伯特变化到波浪理论择时”,通过希尔伯特变换得到瞬时周期T,将今日收盘价于T日之前收盘价做对比,若上涨则做多,若下跌则做空。若T过大则舍弃。

回测曲线(由Auto-Trader提供回测报告)

Hilbert.png

策略代码:

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);    endN = 27;hil = zeros(1,N);for j = 1:Nfor r = 1:2*M+1 % 离散希尔伯特变换        hil(j) = hil(j) + HPFv(end-N-1+j-2*M+r)*mu(r,M);    endendtempT = 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% tempTT = 0;alpha = 2/N;for i = 1:N-1        T = alpha*tempT(i) + (1-alpha)*T;    endT = round(T); % 瞬时周期的EMA平均if (T>=length(close))         return    enddelta = 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    endif delta<0        if marketposition>=0                orderID = traderSellShort(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','开空'); % 开空单            end    endendfunction muv=mu(r,M)            if r==M+1                muv = 0;            else                muv = (1-(-1)^(r-M-1))/(pi*(r-M-r));            end    end


更多免费策略源码下载请登录DigQuant社区-策略资源~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


沙发
peppep 发表于 2017-3-21 16:32:55
期待下一篇~~已关注楼主~~~

藤椅
ghjktdf 发表于 2017-3-22 10:11:53
楼主好人~

板凳
ydc129 发表于 2017-3-29 22:11:41
谢谢分享

报纸
ghjktdf 发表于 2017-3-31 18:43:20

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2026-1-21 04:39