海龟交易法则与matlab程序代码

2018-11-29 16:27

海龟交易法则与matlab程序代码

字号:大 中 小 %%%5 %% Turtle.M

% 海龟交易法则(多品种、多市场) % 主要包括:

% ? 市场----买卖什么,根据SVR强弱觉得买卖优先顺序

% ? 头寸规模----买卖多少,根据ATR以及不对称相关性风险矩阵进行寸风险管理 % ? 入市----何时买卖,根据突破信号辨别方法,辨别真假信号,并受账户资金水平限制其头寸,这里没有考虑到快速变化行情的滑点。 % ? 止损----何时退出亏损的头寸,根据ATR和固定损失水平设定。这里没有考虑到快速变化行情的滑点。

% ? 离市----何时退出赢利的头寸,根据特定参数回归。

% ? 策略----如何买卖,此处只考虑了4种策略,但如何更细致的执行改策略我们没有考虑到。如:如何利用其他指标辅助,如何优化组合资产配置等。

% 说明:

% 为了明晰化思路,一些循环被拆成若干个子循环,影响了速度,但不妨碍我们学习和分析。

% 为了更为精确的服务高频数据,这里设定所得数据为1分钟数据。所以,这里特别要注意的是,程序目前只能处理同样交易时间的市场品种。

% 那么,郑州和大连(9:00-10:15 10:30-11:30 1:30-3:00),上海(9:00-10:15 10:30-11:30 1:30-2:10 2:20-3:00),证券市场(9:30-11:30 1:00-3:00)就被割裂开来了。

% 因为无法控制非对称时间窗口内的风险,策略和程序暂时不向此扩展和修改。不过,如果用天数据,则不存在任何问题了。

% 讨论:

% 这里我没有写出强弱讨论程序,因为我觉得我的思路还不完全清晰。我的初步想法是,根据相关性水平,如果上涨相关性水平高情形下,

% 如果上涨击穿压力线,则买入最强的SVR,卖出最弱的;理论根据是journal of Finance 2002, Andrew , and

% Journal of Finance 2005, Patton

% written by: % Jemnbo Cai

% jemnbo@gmail.com

% The copyright belongs to me. The codes exchanged only for study.

% For your own application, load your data into the matrix \% \

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% Controls % function turtle() clear all; close all; clc;

global EMA; global Repeat global Margin; global Size; global Account; global Str1 global Str2 global CorrLev global PosLim global Freq

Freq= 240; % 市场交易长度(分钟):大连、郑州=225 ,上海=215, 证券=240 STRATEGY=2; % 选择的交易策略,1 策略1;2 策略2; 3 强弱套利; d EMA=20; % 计算指数平均的周期数 d Repeat=1; % 多久时间重新算一次ATR D

Margin=[0.05 0.05 0.07 1]; % 所交易品种的保证金率 1×i , i 资产数量,股票为1 Size= [5 5 8 1]; % 所交易品种的合约规模 1×i, 股票为1 Account=[100000000]; % 初始账户资金 D Str1_in=20; % 策略一进场周期参数 d Str2_in=55; % 策略二进场周期参数 d Str1_out=10; % 策略一出场周期参数 d Str2_out=20; % 策略二出场周期参数 d

P_RSV= 30*Freq; % 相对强弱指标

CorrAdj=30*Freq; % 市场相关性调查时间窗口长度,考虑到市场相关性的不对称性,买入考察下跌相关性,卖出考虑上涨相关性 CorrLev=[0.3 0.7]; % 相关性水平识别,高于它为高度相关性市场,低于它为低度相关市场。 1×2

PosLim=[4 6 8 10 12]; % 分别为单市场、高度相关、一般相关、低度相关、单向交易持仓限制 1×5

HoldingPosition=[]; % 持仓,针对每一个品种,描述出其(开仓价格,持仓量,开仓方向,预设止损值,,开仓时间) 4×(5×i) LastPL=[]; % 平仓记录,【盈利状况 多头水平 空头水平 开仓时间 平仓时间】 K*(5×i),k交易次数

Balance=[]; % 账户可用资金 账户交易资产现值 m*(2*i),m时间长度 % Load your own data into matrix \

%% 数据初始化及参数设计 load data; %{

海龟们用于确定能够参与交易的期货品种的主要标准就是构成市场基础的流动性。 每一个品种,我们要求具有以下几个指标:开、高 、低、收、量 %}

[m n]=size(data);

if round(n/5)~=n/5 || (m/Freq)<=max([Str1 Str2 20]) || length(Margin)~=length(Size) || length(Margin)~=n/5

error('你输入的数据格式不满足我们的要求,请重新核对数据质量') end

Q=n/5;

Days=fix(m/Freq); out=fopen('turtle','at');

fprintf(out,'**************************************************\\n'); fprintf(out,'数据观察量: %u\\n',m);

fprintf(out,'一天观察次数: %u\\n',Freq); fprintf(out,'研究的品种数量: %u\\n',Q);

fprintf(out,'所交易品种的保证金率: 所交易品种的合约规模: \\n'); for i=1: Q

fprintf(out,' %u %u \\n',Margin(i),Size(i)); end

fprintf(out,'选择的交易策略(1短线;2长线;3 强弱套利): %u\\n',STRATEGY); fprintf(out,'计算指数平均的周期数 %u\\n',EMA); fprintf(out,'多久时间重新算一次: %u\\n',Repeat);

fprintf(out,'初始账户资金: %u\\n',Account);

fprintf(out,'策略一进场周期参数: 策略一出场周期参数: \\n'); fprintf(out,' %u %u \\n',Str1_in ,Str1_out );

fprintf(out,'策略二进场周期参数: 策略二出场周期参数: \\n'); fprintf(out,' %u %u \\n',Str2_in ,Str2_out ); fprintf(out,'相关性周期参数: %u\\n',CorrAdj); fprintf(out,'相对强弱周期参数: %u\\n',P_RSV); fprintf(out,'\\n'); fclose(out); %{

N就是TR(True Range,实际范围)的20日指数移动平均,现在更普遍地称之为ATR。 N表示单个交易日某个特定市场所造成的价格波动的平均范围。 N同样用构成合约基础的点(points)进行度量。 每日实际范围的计算:

TR(实际范围)=max(H-L,H-PDC,PDC-L) 式中:

H-当日最高价 L-当日最低价

PDC-前个交易日的收盘价 用下面的公式计算N: N=(19×PDN+TR)/20 式中:

PDN-前个交易日的N值 TR-当日的实际范围

因为这个公式要用到前个交易日的N值,所以,你必须从实际范围的20日简单平均开始计算初始值。 %}

% 需要多久计算一次N值和单位大小?一般为一个星期一次,我这里用每天。

NMatrix=zeros(Days,Q); for i=1:Q

O=data(1:Freq:Days*Freq,i*5-4);H=data(1:Freq:Days*Freq,i*5-3);L=data(1:Freq:Days*Freq,i*5-2);C=data(1:Freq:Days*Freq,i*5-1);

V=data(1:Freq:Days*Freq,i*5);PDC=[0;C(1:end-1,:)];

% 画出蜡烛图走势 cndl(O,H,L,C);

title('Figure 蜡烛图 '); ylabel('价格水平'); xlabel('观察样本'); grid on;

saveas(gcf,strcat('Candle_',num2str(i),'.eps'),'psc2');

for j=1:Repeat:Days if j==1

TR=max([H(j)-L(j)]); NMatrix(i,j)=TR; elseif j1

TR=max([H(j)-L(j) ,H(j)-PDC(j),PDC(j)-L(j)]); NMatrix(i,j)=((j-1)*NMatrix(i,j-1)+TR)/j; else

TR=max([H(j)-L(j) ,H(j)-PDC(j),PDC(j)-L(j)]); NMatrix(i,j)=((EMA-1)*NMatrix(i,j-1)+TR)/EMA; end end end

DailyData=data(1:Freq:Days*Freq,:); %{

价值量波动性=N×每点价值量

按照我们所称的单位(Units)建立头寸。单位重新计算,使1N代表帐户净值的1%。

因为海龟把单位用作头寸规模的量度基础,还因为那些单位已经过波动性风险调整,所以,单位既是头寸风险的量度标准,又是头寸整个投资组合的量度标准。 单位=帐户的1%/(N×每点价值量) %}

VN=zeros(Days,Q); %波动单位价值量,及其单位

% 说明,此段被省略是因为在后面给出了更为精确的风险资金算法 % for i=1:Q % for j=1:Days

% % 调整交易规模,海龟不使用以起始净值为基础的、连续结算的标准帐户进行交易。我们假设账户每季度调整一次。盈利入金,亏损出金。注意,此处 % % 不精确,没有考虑P&L对资金的影响。

% ValuePerPoint=N(i,j)*Size(i)/Margin(i); % 一手波动全部损失所值价值

% VN(i,j)=fix((0.01*Account)/ValuePerPoint); % 用账户的1%来覆盖风险波动值,交易手数向下取整 % end % end

HoldingPosition=zeros(4,5*Q); % 持仓,针对每一个品种,描述出其(开仓价格,持仓量,开仓方向,预设止损值,开仓时间) 4×(5×i) LastPL=[0, 0, 0, 0, 1]; % 平仓记录,【盈利状况 多头水平 空头水平 开仓时间 平仓时间】 K*(5×i),k交易次数

Balance=repmat([Account ,0],m,1); % 账户可用资金 账户交易资产现值 m*(2*i),m时间长度

%% 交易策略正式开始测试: % 首先运算出辅助指标——RSV RSV=50*ones(m,Q); for i=1:Q

O=data(:,i*5-4);H=data(:,i*5-3);L=data(:,i*5-2);C=data(:,i*5-1); RSV(:,i)=rsv(H,L,C,P_RSV); end

PLI=[ DailyData(1,1:5:end);zeros(2,Q)];% 上一次开仓价位、方向、以及盈利与否示性指标,确认短期开仓信号要用到。 if STRATEGY==1

for j=max([Str1_in,Str2_in,P_RSV/Freq])*Freq+1:Days*Freq Today=fix(j/Freq)+1; % 现在所处的交易日

% 系统一----以20日突破为基础的偏短线系统


海龟交易法则与matlab程序代码.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018-2023年中国幼儿护理行业市场深度调研分析与投资机会研究报

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: