当前位置:文档之家› 海龟交易法则matlab代码

海龟交易法则matlab代码

今天开放我的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:102:20-3:00),证券市场(9:30-11:30 1:00-3:00)就被割裂开来了。

% 因为无法控制非对称时间窗口内的风险,策略和程序暂时不向此扩展和修改。

不过,如果用天数据,则不存在任何问题了。

% 讨论:% 这里我没有写出强弱讨论程序,因为我觉得我的思路还不完全清晰。

我的初步想法是,根据相关性水平,如果上涨相关性水平高情形下,% 如果上涨击穿压力线,则买入最强的SVR,卖出最弱的;理论根据是journal of Finance 2002, Andrew , and % Journal of Finance 2005, Patton% The copyright belongs to me. The codes exchanged only for study.% For your own application, load your data into the matrix "data", and change the% "controls" listed below%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Controls %function turtle()clear all;close all;clc;global EMA;global Repeatglobal Margin;global Size;global Account;global Str1global Str2global CorrLevglobal PosLimglobal FreqFreq= 240;% 市场交易长度(分钟):大连、郑州=225 ,上海=215,证券=240STRATEGY=2;% 选择的交易策略,1 策略1;2 策略2;3 强弱套利;dEMA=20;% 计算指数平均的周期数dRepeat=1;% 多久时间重新算一次ATR DMargin=[0.05 0.05 0.07 1];% 所交易品种的保证金率1×i , i 资产数量,股票为1Size= [5 5 8 1];% 所交易品种的合约规模1×i, 股票为1Account=[100000000];% 初始账户资金DStr1_in=20;% 策略一进场周期参数dStr2_in=55;% 策略二进场周期参数dStr1_out=10;% 策略一出场周期参数dStr2_out=20;% 策略二出场周期参数dP_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 "dat" @%% 数据初始化及参数设计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('你输入的数据格式不满足我们的要求,请重新核对数据质量')endQ=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: Qfprintf(out,'%u%u\n',Margin(i),Size(i));endfprintf(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:QO=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:Daysif j==1TR=max([H(j)-L(j)]);NMatrix(i,j)=TR;elseif j<EMA && j>1TR=max([H(j)-L(j) ,H(j)-PDC(j),PDC(j)-L(j)]);NMatrix(i,j)=((j-1)*NMatrix(i,j-1)+TR)/j;elseTR=max([H(j)-L(j) ,H(j)-PDC(j),PDC(j)-L(j)]);NMatrix(i,j)=((EMA-1)*NMatrix(i,j-1)+TR)/EMA;endendendDailyData=data(1:Freq:Days*Freq,:);%{价值量波动性=N×每点价值量按照我们所称的单位(Units)建立头寸。

相关主题