Matlab自适应均线_一个简易均线策略Demo|MATLAB 程序化交易(量化投资)|MATLAB技术论坛 - Powered by Discuz!...

%% yafcoTest1

% 脚本程序

% Last Modified by LiYang @ yafco 2011/12/07

% farutoliyang@gmail.com

% 程序实现测试所使用的MATLAB版本:MATLAB R2011b(7.13)

% 如果程序在您本机运行不了,请首先检查您MATLAB的版本号,推荐使用较新版本的MATLAB。

%% a little clean work

tic;

clear;

clc;

close all;

format compact;

%%  Load Data

load IFdata;

%% Initialization

IF = data;

len = length(IF);

[Short5, Long20] = movavg(IF, 5, 20);

IF = data(20:end);

MA5 = Short5(20:end);

MA20 = Long20(20:end);

EquityDay = zeros(len,1);

EquityDay = EquityDay(20:end);

EquityDay(1) = 50e4;

%% plot

figure;

plot(IF);

hold on;

grid on;

plot(MA5,'k');

plot(MA20,'r');

legend('IF1112','MA5','MA20');

title('策略展示图');

%% 策略过程

% 开多标签 1 多一手 0 无

LongFlag = 0;

% 开工表桥 1 空一手 0 无

ShortFlag = 0;

% 记录多头序列

LongS = zeros(len,1);

LongSlen = 1;

% 记录空头序列

ShortS = zeros(len,1);

ShortSlen = 1;

for i = 1:length(IF)

if i >=2

EquityDay(i) = EquityDay(i-1);

end

% 计算当天资金流

if i>1 && LongFlag == 1 && ShortFlag == 0

EquityDay(i) = EquityDay(i-1) + (IF(i)-IF(i-1))*300;

end

if i>1 && ShortFlag == 1 && LongFlag == 0

EquityDay(i) = EquityDay(i-1) + (IF(i-1)-IF(i))*300;

end

% MA5上穿MA20平空并开多1手

% 上穿定义:MA5当天大于MA20,前一天MA5位于MA20之下

if LongFlag == 0 && i>2 && MA5(i-1)<=MA20(i-1) && MA5(i)>MA20(i)

if ShortFlag == 1

ShortFlag = 0;

EquityDay(i) = EquityDay(i) + (ShortS(ShortSlen-1)-IF(i))*300;

ShortS(ShortSlen) = IF(i);

ShortSlen = ShortSlen + 1;

text(i,IF(i),' \leftarrow 平空1手&开多1手','FontSize',10);

else

text(i,IF(i),' \leftarrow 开多1手','FontSize',10);

end

LongFlag = 1;

LongS(LongSlen) = IF(i);

LongSlen = LongSlen + 1;

plot(i,IF(i),'ro','markersize',8);

end

% MA5下穿MA20平多并开空1手

% 下穿定义:MA5当天小于于MA20,前一天MA5位于MA20之上

if ShortFlag == 0 &&  i>2 && MA5(i-1)>=MA20(i-1) && MA5(i)

if LongFlag == 1

LongFlag = 0;

EquityDay(i) = EquityDay(i) + (IF(i)-LongS(LongSlen-1))*300;

LongSlen = LongSlen + 1;

text(i,IF(i),' \leftarrow 平多1手&开空1手','FontSize',10);

else

text(i,IF(i),' \leftarrow 开空1手','FontSize',10);

end

ShortFlag = 1;

ShortS(ShortSlen) = IF(i);

ShortSlen = ShortSlen + 1;

plot(i,IF(i),'rd','markersize',8);

end

% 最后一天如果还有持仓,进行平仓

if i == length(IF)

if LongFlag == 1

LongFlag = 0;

EquityDay(i) = EquityDay(i) + (IF(i)-LongS(LongSlen-1))*300;

end

if ShortFlag == 1;

ShortFlag = 0;

EquityDay(i) = EquityDay(i) + (ShortS(ShortSlen-1)-IF(i))*300;

end

end

end

%% 计算回撤比例

BackRatio = zeros(length(EquityDay),1);

BackRatio(1:19) = 0;

for i = 20:length(BackRatio)

[C,ind] = max(EquityDay(20:i));

ind = ind + 19;

if C == EquityDay(i)

BackRatio(i) = 0;

else

BackRatio(i) = (EquityDay(i)-C)/EquityDay(ind);

end

end

%% 画出资金流图

figure;

subplot(2,1,1);

plot(EquityDay)

grid on;

title('资金权益');

subplot(2,1,2);

plot(BackRatio);

title('最大回撤比例');

grid on;

axis([0 150 -0.2 0.2]);

%% Record time

toc;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值