《量化投资:以MATLAB为工具》连载(18)如何构建基于MATLAB的回测系统(中)

标签:
matlabquant交易系统量化投资 |
分类: 量化投资:以MATLAB为工具 |
《量化投资:以MATLAB为工具》连载(18)如何构建基于MATLAB的回测系统(中)
《量化投资:以MATLAB为工具》简介
《量化投资:以MATLAB为工具》连载(18)如何构建基于MATLAB的回测系统(中)
一个简单均线系统的MATLAB实现展示
这里给出一个简单的均线系统使用MATLAB进行回测的展示,一窥使用MATALB进行回测的大体步骤。
交易策略:5日均线上穿20日均线做多(即买入,若有空头仓位先平掉空头再建多头),5日均线下破20日均线做空(即卖出,若有多头仓位先平掉多头再建空头),上穿定义如下:
其中
表示5日均线,
表示20日均线,
表示5日均线在拉升,
表示5日均线已经位于20日均线之上并且得到确认,
表示5日上穿20日均线是一个动作,5日均线由20日均线下面拉升到20日均线上面。类似可以得到下破定义如下:
该策略暂没考虑交易成本、冲击成本等影响。
测试数据:
股指主力连续数据
IF888
,
2011
年全年日收盘数据。
MATLAB
代码(
MatlabTradingDemo.m
):
function MatlabTradingDemo
% MATLAB开发交易策略范例:一个简单均线交易系统
% by LiYang 2014/05/01 farutliyang@foxmail.com
%% 清空工作空间、命令窗口
clc;clear;
close all;
format compact;
%% 载入测试数据 : 股指连续IF888 2011年全年数据
load IF888-2011.mat
IFdata = IF888(:,2);
%% 选择短期5日均线、长期20日均线
ShortLen = 5;
LongLen = 20;
[MA5, MA20] = movavg(IFdata, ShortLen, LongLen);
MA5(1:ShortLen-1) = IFdata(1:ShortLen-1);
MA20(1:LongLen-1) = IFdata(1:LongLen-1);
scrsz = get(0,'ScreenSize');
figure('Position',[scrsz(3)*1/4 scrsz(4)*1/6 scrsz(3)*4/5 scrsz(4)]*3/4);
plot([IFdata,MA5,MA20]);
grid on;
legend('IF888','MA5','MA20','Location','Best');
title('交易策略回测过程','FontWeight', 'Bold');
hold on;
%% 交易过程仿真
% 仓位 Pos = 1 多头1手; Pos = 0 空仓; Pos = -1 空头一手
Pos = zeros(length(IFdata),1);
% 初始资金
InitialE = 50e4;
% 日收益记录
ReturnD = zeros(length(IFdata),1);
% 股指乘数
scale = 300;
for t = LongLen:length(IFdata)
end
%% 累计收益
ReturnCum = cumsum(ReturnD);
ReturnCum = ReturnCum + InitialE;
%% 计算最大回撤
MaxDrawD = zeros(length(IFdata),1);
for t = LongLen:length(IFdata)
end
MaxDrawD = abs(MaxDrawD);
%% 图形展示
scrsz = get(0,'ScreenSize');
figure('Position',[scrsz(3)*1/4 scrsz(4)*1/6 scrsz(3)*4/5 scrsz(4)]*3/4);
subplot(3,1,1);
plot(ReturnCum);
grid on;
axis tight;
title('收益曲线','FontWeight', 'Bold');
subplot(3,1,2);
plot(Pos,'LineWidth',1.8);
grid on;
axis tight;
title('仓位','FontWeight', 'Bold');
subplot(3,1,3);
plot(MaxDrawD);
grid on;
axis tight;
title(['最大回撤(初始资金',num2str(InitialE/1e4),'万)'],'FontWeight', 'Bold');
最终回测结果如下图所示。
图15- 2:交易策略回测信号
图15- 3:收益曲线、仓位、最大回测展示
从上面简单均线系统的MATLAB回测展示可以看出,一个完整的交易系统回测需要生成相应的交易信号,进而计算相应的资金流和仓位记录,最后给出相应的图形展示。
更多内容参见《量化投资:以MATLAB为工具》。
书籍交流论坛:MATLAB技术论坛读书频道《量化投资:以MATLAB为工具》专版,地址:http://www.matlabsky.com/forum-112-1.html
作者简介
李洋(faruto),中国量化投资学会专家委员会成员,MATLAB技术论坛(www.matlabsky.com)联合创始人,北京师范大学应用数学硕士,先后就职于私募、期货公司、保险公司,从事量化投资相关工作。十年MATLAB编程经验,对机器学习、量化投资等相关领域有深入研究,已出版《MATLAB神经网络30个案例分析》和《MATLAB神经网络43个案例分析》等书籍。
邮箱:farutoliyang@foxmail.com
微博:http://weibo.com/faruto
郑志勇(Ariszheng),中国量化投资学会专家委员会成员,方正富邦基金产品总监,北京理工大学运筹学与控制论硕士,先后就职于中国银河证券、银华基金、方正富邦基金,从事金融产品研究与设计工作。十余年MATLAB编程经验,专注于产品设计、量化投资等相关领域的研究,尤其对于各种结构化产品、分级基金产品有着深入的研究,已出版《运筹学与最优化MATLAB编程》和《金融数量分析:基于MATLAB编程》等书籍。
邮箱:ariszheng@gmail.com
微博:http://weibo.com/ariszheng