由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Quant版 - Kalman Filter的交易算法问题
相关主题
[合集] Kalman Filter问题求推荐C++和programming/算法面试书籍
代发上海工作机会,感兴趣者请直接通过电邮(非猎头)联系招聘负责人想做编程方面的金融工作 PhD level的,如何准备
光大证券策略投资部招聘衍生产品自营交易人才有人自己编过kalman filter么?
algorithm question到底是什么东西?能否推荐几本关于选择“Forecasting method and validation“的书
一个简单的数学问题,我和我老板争论不停,其中一定有一个人是趁着有牛人在, 问个kalman filter 的问题.
[合集] Which math/stat language is most popular on the street?线性回归在portfolio中的问题,求助。
要面一个algorithm trader的职位[合集] Kalman filter预测参数?
问一下algorithm的书求助:hierarchical linear model 的问题
相关话题的讨论汇总
话题: beta话题: nan话题: y2
进入Quant版参与讨论
1 (共1页)
h***s
发帖数: 35
1
我在研究Kalman Filter的交易算法问题。算法见附件书上第三章,76-81页。Matlab的
代码见Algorithmic Trading Winning Strategies and Their Rational, Ernest P.
Chan
简单的说观察和统计显示,加元的ETF(EWC)和澳元的ETF(EWA)之差是中值回归的,
可以在差值偏离一个方差时买入,在回归中值时卖出, 或者相反。Chan的书中测试结
果很好,年回报20-30%,sharp ratio 2.3.
观察加元和澳元的汇率也有相同统计特征, 但是用这个模型却完全进入不了交易条件
。原因是用kalman filter得到的预测误差e(t)和它的方差Q(t)距离太大,甚至不是一
个数量级。于是我调整了输入数据,澳元汇率减一后乘以20, 加元汇率乘以20,就可
以得到数值匹配的e(t), Q(t)。年均回报率30%。
但是我无法从数学上解释为何这样调整可以使e(t), Q(t)匹配。我想找到一个通用的
规则用于各种汇率,使之交易策略有效。你是专家,给点开窍的想法? 谢谢!
d********t
发帖数: 9628
2
很好奇业界是否真有用KF交易而且不亏钱的。

【在 h***s 的大作中提到】
: 我在研究Kalman Filter的交易算法问题。算法见附件书上第三章,76-81页。Matlab的
: 代码见Algorithmic Trading Winning Strategies and Their Rational, Ernest P.
: Chan
: 简单的说观察和统计显示,加元的ETF(EWC)和澳元的ETF(EWA)之差是中值回归的,
: 可以在差值偏离一个方差时买入,在回归中值时卖出, 或者相反。Chan的书中测试结
: 果很好,年回报20-30%,sharp ratio 2.3.
: 观察加元和澳元的汇率也有相同统计特征, 但是用这个模型却完全进入不了交易条件
: 。原因是用kalman filter得到的预测误差e(t)和它的方差Q(t)距离太大,甚至不是一
: 个数量级。于是我调整了输入数据,澳元汇率减一后乘以20, 加元汇率乘以20,就可
: 以得到数值匹配的e(t), Q(t)。年均回报率30%。

y******e
发帖数: 5906
3
我晕,还有用kalman filter做汇率交易的,果然是高人,我只拿来做物体追踪,活该
我当民工的料。大哥你的附件书在哪里我看不到呢,发来学习一下啊?matlab代码我也
可以看看。
不清楚你这行,我做追踪时发现KF类似于硬件上的锁相环,从控制来讲,也就是有个负
反馈的,做微调精调不错,但是如果你输入输出差别太大,就匹配不上,会失锁。这估
计就是你说的数值匹配问题吧。
h***s
发帖数: 35
4
谢谢指点,我也是初学者。matlab代码如下。 好像版面不支持上载附件,可以用链接
下载pdf:
http://yun.baidu.com/wap/shareview?&shareid=678253112&uk=141112
or
http://yun.baidu.com/wap/shareview?&shareid=678253112&uk=141112
clear;
% Daily data on EWA-EWC
load('inputData_ETF', 'tday', 'syms', 'cl');
idxA=find(strcmp('EWA', syms));
idxC=find(strcmp('EWC', syms));
x=cl(:, idxA);
y=cl(:, idxC);
s=cat(2, x, y);
figure;
plot(s);
s=x-y;
figure;
plot(s);
figure;
% Augment x with ones to accomodate possible offset in the regression
% between y vs x.
x=[x ones(size(x))];
delta=0.0001; % delta=1 gives fastest change in beta, delta=0.000....1
allows no change (like traditional linear regression).
yhat=NaN(size(y)); % measurement prediction
e=NaN(size(y)); % measurement prediction error
Q=NaN(size(y)); % measurement prediction error variance
% For clarity, we denote R(t|t) by P(t).
% initialize R, P and beta.
R=zeros(2);
P=zeros(2);
beta=NaN(2, size(x, 1));
Vw=delta/(1-delta)*eye(2);
Ve=0.001;
% Initialize beta(:, 1) to zero
beta(:, 1)=0;
% Given initial beta and R (and P)
for t=1:length(y)
if (t > 1)
beta(:, t)=beta(:, t-1); % state prediction. Equation 3.7
R=P+Vw; % state covariance prediction. Equation 3.8
end

yhat(t)=x(t, :)*beta(:, t); % measurement prediction. Equation 3.9
Q(t)=x(t, :)*R*x(t, :)'+Ve; % measurement variance prediction. Equation
3.10


% Observe y(t)
e(t)=y(t)-yhat(t); % measurement prediction error

K=R*x(t, :)'/Q(t); % Kalman gain

beta(:, t)=beta(:, t)+K*e(t); % State update. Equation 3.11
P=R-K*x(t, :)*R; % State covariance update. Euqation 3.12
S((2*t-1):2*t,:)=[P K];
end
plot(beta(1, :)');
figure;
plot(beta(2, :)');
figure;
plot(e(3:end), 'r');
hold on;
plot(sqrt(Q(3:end)));
y2=[x(:, 1) y];
longsEntry=e < -sqrt(Q); % a long position means we should buy EWC
longsExit=e > -sqrt(Q);
shortsEntry=e > sqrt(Q);
shortsExit=e < sqrt(Q);
numUnitsLong=NaN(length(y2), 1);
numUnitsShort=NaN(length(y2), 1);
numUnitsLong(1)=0;
numUnitsLong(longsEntry)=1;
numUnitsLong(longsExit)=0;
numUnitsLong=fillMissingData(numUnitsLong); % fillMissingData can be
downloaded from epchan.com/book2. It simply carry forward an existing
position from previous day if today's positio is an indeterminate NaN.
numUnitsShort(1)=0;
numUnitsShort(shortsEntry)=-1;
numUnitsShort(shortsExit)=0;
numUnitsShort=fillMissingData(numUnitsShort);
numUnits=numUnitsLong+numUnitsShort;
positions=repmat(numUnits, [1 size(y2, 2)]).*[-beta(1, :)' ones(size(beta(1,
:)'))].*y2; % [hedgeRatio -ones(size(hedgeRatio))] is the shares allocation
, [hedgeRatio -ones(size(hedgeRatio))].*y2 is the dollar capital allocation,
while positions is the dollar capital in each ETF.
pnl=sum(lag(positions, 1).*(y2-lag(y2, 1))./lag(y2, 1), 2); % daily P&L of
the strategy
ret=pnl./sum(abs(lag(positions, 1)), 2); % return is P&L divided by gross
market value of portfolio
ret(isnan(ret))=0;
figure;
plot(cumprod(1+ret)-1); % Cumulative compounded return
fprintf(1, 'APR=%f Sharpe=%f\n', prod(1+ret).^(252/length(ret))-1, sqrt(252)
*mean(ret)/std(ret));
% APR=0.262252 Sharpe=2.361162
J*****n
发帖数: 4859
5
应该是两者都是commodity currency,才会有mean的pattern.
问题是,commodity currency这个东西,除了像沙特,就靠石油赚钱。不然其中噪音太
大,变数太多。
当然你做unltra high freq的话,可能不需要那么多顾虑。
y******e
发帖数: 5906
6
大哥,我就是个半吊子,如果说错了,你别揍我啊。
我看了你的书,那个y是你的EWC对不对?x是你的EWA?
在kalman filter系统里面,y就是你的observation/measurement ,但x不是你真正的
state,真正的state是你的beta,这才是KF里面做state predict的。在KF里面,具体
到你这个案例里,x相当于你的state transition model,这个状态转移量实际是KF系统
的可调参数,由你随便调节的。
而y的prediction(yhat)又和x有关系,所以你的x乘以20,y也要跟着乘以20,不然你
的error计算差别就太大了(error=y-yhat)至于你的x为什么要先减个1,我估计可能
和你设置的那些variance的初始值相关,这些参数都是随便调的,怎么调出来效果好就
怎么算。
y******e
发帖数: 5906
7
另外,你的Q(t)是由R和Ve来决定,你调节x实际上就是变着花样改变R和Ve,这两个
是可调参数,如果你不调整x,那就调Ve和R,但是R又是迭代计算的,最多只能调整一
下初值,所以还是得调整Ve。Ve和Vw这两个值很重要,可以用固定值也可以变化的调,
都是你自己设置的,我当时做追踪的时候,调这些参数都调死了。我当时还要调状态转
移参量(相当于调你的x)。
h***s
发帖数: 35
8
有没有调整参数的理论公式呢? 因为几十种汇率的组合成几百种可能,没法手工一一
调整呀。有公式就可以用程序批量自动调整了
y******e
发帖数: 5906
9
KF系统参数的调节改进算法倒是不少,只是不知道符合你的实际情况不,你可以Google
看,不过我感觉你可能得自己设计自适应算法,好难,我搞不定哈。
不过另一种方法你可以考虑用UKF,因为KF是适用于线性系统的,如果是非线性系统的
话用UKF比较好,另外,KF系列都是建立在covariance基于高斯分布的特例下。如果非
高斯情况用particle filter做比较好。但是PF纯用统计了,没有反馈环,效果不稳定
,我个人觉得。
h***s
发帖数: 35
10
有道理,应该考虑UKF和PF,当初有同事做石油天然气定价是用过它们,只是我刚入门
深度不够。最笨的方法就是设立参数上下限,循环调整;或者根据最大利润回报调整。
非常感谢!
相关主题
[合集] Which math/stat language is most popular on the street?求推荐C++和programming/算法面试书籍
要面一个algorithm trader的职位想做编程方面的金融工作 PhD level的,如何准备
问一下algorithm的书有人自己编过kalman filter么?
进入Quant版参与讨论
y******e
发帖数: 5906
11
给石油天然气定价!!!好高大上啊!大哥,你是高人啊,等我忙完这一阵儿,可以跟
你学习点高大上的吗?
KF这些都是民工活,我做跟踪时感觉UKF效果比较好。你也可以考虑给你的参数也加一
个负反馈来控制,或者多看几步。因为KF属于HMM模型,每一步的预测都只跟上一步状
态相关,你也可以多考虑几步,不过系统设计会更复杂一点,我这半吊子就做不出来了
,高人你可以试试。
w**********y
发帖数: 1691
12
不要浪费时间去用过度复杂的model,model永远不是做出策略的最关键部分。
如果你这个idea能用,甚至都不需要用Kalman Filter,更用不着partical filter这些了
.
你要去想想kalman filter比linear regression增加的是什么feature. 而这些feature
实际应用的时候,你都可以用linear regression和选定local window和lookback
period去近似.
所以,唯一的建议,从linear regression开始做. 看看你做的过程中有哪些错误和观察
你上面说的transformation,没大看懂.如果你是 20*y = b*20*(x-1) + e
那你去交易你的spread当然能挣钱了. 你这样算出的spread已经被你人为加上drift了.
not tradable.

【在 h***s 的大作中提到】
: 有道理,应该考虑UKF和PF,当初有同事做石油天然气定价是用过它们,只是我刚入门
: 深度不够。最笨的方法就是设立参数上下限,循环调整;或者根据最大利润回报调整。
: 非常感谢!

h*******u
发帖数: 15326
13
kf
ukf
都不行,没用的
本质上都是基于模型预测
首先模型就搞不定

Google

【在 y******e 的大作中提到】
: KF系统参数的调节改进算法倒是不少,只是不知道符合你的实际情况不,你可以Google
: 看,不过我感觉你可能得自己设计自适应算法,好难,我搞不定哈。
: 不过另一种方法你可以考虑用UKF,因为KF是适用于线性系统的,如果是非线性系统的
: 话用UKF比较好,另外,KF系列都是建立在covariance基于高斯分布的特例下。如果非
: 高斯情况用particle filter做比较好。但是PF纯用统计了,没有反馈环,效果不稳定
: ,我个人觉得。

y******e
发帖数: 5906
14
俺又不是学金融工程的,俺学ECE的,俺用这个做物体追踪的,俺就是看到你们拿KF预
测交易凑个热闹而已,俺就是个外行 啥也不懂啊!

【在 h*******u 的大作中提到】
: kf
: ukf
: 都不行,没用的
: 本质上都是基于模型预测
: 首先模型就搞不定
:
: Google

k***g
发帖数: 7244
15
如果有intercept, 从实际的交易角度讲,会影响hedge ratio, hedge ratio 不
consistent 了,调换 y 和 x 后,新旧hedge ratio 不是互为倒数。因为不对称,
long /short 和short / long 本身就可以反被别人 arb 了。
所以通常会force zero intercept, 或者用 tls, minimize R^2上各点到 regression
line 的距离,而不是minimize residuals, 这样保证对称性。

feature
了.

【在 w**********y 的大作中提到】
: 不要浪费时间去用过度复杂的model,model永远不是做出策略的最关键部分。
: 如果你这个idea能用,甚至都不需要用Kalman Filter,更用不着partical filter这些了
: .
: 你要去想想kalman filter比linear regression增加的是什么feature. 而这些feature
: 实际应用的时候,你都可以用linear regression和选定local window和lookback
: period去近似.
: 所以,唯一的建议,从linear regression开始做. 看看你做的过程中有哪些错误和观察
: 你上面说的transformation,没大看懂.如果你是 20*y = b*20*(x-1) + e
: 那你去交易你的spread当然能挣钱了. 你这样算出的spread已经被你人为加上drift了.
: not tradable.

k***g
发帖数: 7244
16
currency etf 有 fee 和 interest carry, 所以 dynamics 和currency 有不同。
另外纸面上的sharp ratio 在考虑到 spread, slippage, borrow cost 之后就所剩
无几了吧。
体力活的alpha 一般只有market maker 才能做,赚个力气钱。。。

【在 h***s 的大作中提到】
: 我在研究Kalman Filter的交易算法问题。算法见附件书上第三章,76-81页。Matlab的
: 代码见Algorithmic Trading Winning Strategies and Their Rational, Ernest P.
: Chan
: 简单的说观察和统计显示,加元的ETF(EWC)和澳元的ETF(EWA)之差是中值回归的,
: 可以在差值偏离一个方差时买入,在回归中值时卖出, 或者相反。Chan的书中测试结
: 果很好,年回报20-30%,sharp ratio 2.3.
: 观察加元和澳元的汇率也有相同统计特征, 但是用这个模型却完全进入不了交易条件
: 。原因是用kalman filter得到的预测误差e(t)和它的方差Q(t)距离太大,甚至不是一
: 个数量级。于是我调整了输入数据,澳元汇率减一后乘以20, 加元汇率乘以20,就可
: 以得到数值匹配的e(t), Q(t)。年均回报率30%。

n*****g
发帖数: 365
17
Kalman filter 的最基本最重要的假设就是 stationary.
股市的本质就不是stationary的, 反过来说,即使这个KF的backtesting效果不错,真
的使用还要不断调整参数,本质上说,就是假设一小段时间内的平稳随即的。
如果参数太多,调整太复杂,你的cost就太高了。KF60年代就挺成熟了。
还是试试linear regre 或者deep learning。

feature
了.

【在 w**********y 的大作中提到】
: 不要浪费时间去用过度复杂的model,model永远不是做出策略的最关键部分。
: 如果你这个idea能用,甚至都不需要用Kalman Filter,更用不着partical filter这些了
: .
: 你要去想想kalman filter比linear regression增加的是什么feature. 而这些feature
: 实际应用的时候,你都可以用linear regression和选定local window和lookback
: period去近似.
: 所以,唯一的建议,从linear regression开始做. 看看你做的过程中有哪些错误和观察
: 你上面说的transformation,没大看懂.如果你是 20*y = b*20*(x-1) + e
: 那你去交易你的spread当然能挣钱了. 你这样算出的spread已经被你人为加上drift了.
: not tradable.

h***s
发帖数: 35
18
谢谢各位意见,很有启发。我想做1分钟和5分钟的交易,kalman filter calibration
速度还是快的,个人机器上几毫秒可以校准1500个数据点,在多个CPU的服务器上应该
少于1毫秒。完全赞同necyang非stationary的特点,只想用动态的calibration追求短
期的平稳。
w**********y
发帖数: 1691
19
上面的讨论涉及很多问题,看贴的自己去研究吧。快速说两点:
1. stationary process和说一个model的参数是stationary的是两回事
2. Deep learning 至今最好的用途在vision,机器人等方面。 据我有限的知识,没有
任何人靠这个能赚一个子儿。恰恰相反,Deep learning基本属于quant trading大忌的
范畴
a*******e
发帖数: 253
20
能否展开说说为啥deep learning属于quant trading大忌的范畴么?谢谢

【在 w**********y 的大作中提到】
: 上面的讨论涉及很多问题,看贴的自己去研究吧。快速说两点:
: 1. stationary process和说一个model的参数是stationary的是两回事
: 2. Deep learning 至今最好的用途在vision,机器人等方面。 据我有限的知识,没有
: 任何人靠这个能赚一个子儿。恰恰相反,Deep learning基本属于quant trading大忌的
: 范畴

相关主题
能否推荐几本关于选择“Forecasting method and validation“的书[合集] Kalman filter预测参数?
趁着有牛人在, 问个kalman filter 的问题.求助:hierarchical linear model 的问题
线性回归在portfolio中的问题,求助。SV kalman filter parameter estimation
进入Quant版参与讨论
a*******1
发帖数: 1554
21
金融数据噪音大,应该用一些简单一点的模型,如果觉得效果不好,可以靠收集更多的
信息加到模型里面去,而不是用同样的几个参数,不断用更深奥的模型,毕竟模型本身
不会带来更多的信息量,预测能力不会有太大的提高。。
k*******d
发帖数: 1340
22
我觉得问题是data driven, black box,容易overfitting.

【在 a*******e 的大作中提到】
: 能否展开说说为啥deep learning属于quant trading大忌的范畴么?谢谢
l*********g
发帖数: 1899
23
我更喜欢从物理的角度去考虑而不单纯是数学的角度。例如量价关系就是非常好用的一
种关系。
我什么都不研究,除了抄底逃顶。

【在 a*******1 的大作中提到】
: 金融数据噪音大,应该用一些简单一点的模型,如果觉得效果不好,可以靠收集更多的
: 信息加到模型里面去,而不是用同样的几个参数,不断用更深奥的模型,毕竟模型本身
: 不会带来更多的信息量,预测能力不会有太大的提高。。

W***n
发帖数: 11530
24
Why not just flipping
a coin
L*******t
发帖数: 2385
25
楼主还是很执着的,我觉得应该让他试一试
不过我很同意WES(weekendsunny)的观点,就是idea总是第一位的,model次之。
如果楼主有很好的idea,加上牛逼的模型,希望能有好的performance。

【在 W***n 的大作中提到】
: Why not just flipping
: a coin

W***n
发帖数: 11530
26

don't think any modelling would ever works
the financial market is too stochastic
past history can hardly predict the future
with precision

【在 L*******t 的大作中提到】
: 楼主还是很执着的,我觉得应该让他试一试
: 不过我很同意WES(weekendsunny)的观点,就是idea总是第一位的,model次之。
: 如果楼主有很好的idea,加上牛逼的模型,希望能有好的performance。

p**********m
发帖数: 143
27
test
p**********m
发帖数: 143
28
为什么大家都用regression,用z值不行吗?最近在美债上测试了下信号很清晰。
b********3
发帖数: 13
29
黑箱没人敢上大钱 赚钱有赚钱的理由 亏钱也要有理由 这样才能找到问题做出改进
deep learning现在还算一门玄学

【在 a*******e 的大作中提到】
: 能否展开说说为啥deep learning属于quant trading大忌的范畴么?谢谢
1 (共1页)
进入Quant版参与讨论
相关主题
求助:hierarchical linear model 的问题一个简单的数学问题,我和我老板争论不停,其中一定有一个人是
SV kalman filter parameter estimation[合集] Which math/stat language is most popular on the street?
代发上海工作机会。要面一个algorithm trader的职位
代发上海工作机会,感兴趣者请直接通过电邮(非猎头)联系团队招聘负责人[email protected]问一下algorithm的书
[合集] Kalman Filter问题求推荐C++和programming/算法面试书籍
代发上海工作机会,感兴趣者请直接通过电邮(非猎头)联系招聘负责人想做编程方面的金融工作 PhD level的,如何准备
光大证券策略投资部招聘衍生产品自营交易人才有人自己编过kalman filter么?
algorithm question到底是什么东西?能否推荐几本关于选择“Forecasting method and validation“的书
相关话题的讨论汇总
话题: beta话题: nan话题: y2