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

2018-11-29 16:27

% 系统2----以50日突破为基础的偏短线系统

newlip=[0, 0, 0, inf,0]; % 平仓记录,【盈利状况 多头水平 空头水平 开仓时间 平仓时间】 MarketValue=0; % 市值水平。

for i=1:Q

O=data(j,i*5-4);H=data(j,i*5-3);L=data(j,i*5-2);C=data(j,i*5-1); QuitL=min(DailyData(Today-Str2_out:Today-1,i*5-2)); QuitH=max(DailyData(Today-Str2_out:Today-1,i*5-3)); % HoldingPosition=zeros(4,5*Q); % 持仓,针对每一个品种,描述出其(开仓价格,持仓量,开仓方向,预设止损值,开仓时间) 4×(5×i)

if any(HoldingPosition(:,i*5-4)) % 表示有档位的持仓非空 ii=find(HoldingPosition(:,i*5-3)~=0); for k=1:ii

if HoldingPosition(k,i*5-2)==1 % 多头

if L<=HoldingPosition(k,i*5-1) % 止损触发 % LastPL=[0, 0, 0, 0, 1]; % 平仓记录,【盈利状况 多头水平 空头水平 开仓时间 平仓时间】 K*(5×i),k交易次数

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

newlip(1,1)=newlip(1,1)+(HoldingPosition(k,i*5-1)-HoldingPosition(k,i*5-4))*HoldingPosition(k,i*5-3); % 盈亏

newlip(1,2)=newlip(1,2)-HoldingPosition(k,i*5-3); % 多头减少量 newlip(1,3)=newlip(1,3)+0;

newlip(1,4)=min([newlip(1,4),HoldingPosition(k,i*5)]); newlip(1,5)=max([newlip(1,5),j]);

HoldingPosition(k,:)=zeros(1,5); % 还原仓位 PLI(1,i)=HoldingPosition(k,i*5-4);% 开仓价位 PLI(2,i)=1; % 方向

PLI(3,i)=-1; % 亏损与否 elseif L<=QuitL % 退出触发

newlip(1,1)=newlip(1,1)+(HoldingPosition(k,i*5-1)-QuitL)*HoldingPosition(k,i*5-3); % 盈亏 newlip(1,2)=newlip(1,2)-HoldingPosition(k,i*5-3); % 多头减少量 newlip(1,3)=newlip(1,3)+0;

newlip(1,4)=min([newlip(1,4),HoldingPosition(k,i*5)]); newlip(1,5)=max([newlip(1,5),j]);

HoldingPosition(k,:)=zeros(1,5); % 还原仓位

PLI(1,i)=HoldingPosition(k,i*5-4);% 开仓价位 PLI(2,i)=1; % 方向

if (HoldingPosition(k,i*5-1)-QuitL)*HoldingPosition(k,i*5-3)<0 PLI(3,i)=-1; % 亏损

else

PLI(3,i)=1; % 盈利 end else end

elseif HoldingPosition(k,i*5-2)==-1 %空头 if H>=HoldingPosition(k,i*5-1) % 止损触发 % LastPL=[0, 0, 0, 0, 1]; % 平仓记录,【盈利状况 多头水平 空头水平 开仓时间 平仓时间】 K*(5×i),k交易次数

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

newlip(1,1)=newlip(1,1)

-(HoldingPosition(k,i*5-1)-HoldingPosition(k,i*5-4))*HoldingPosition(k,i*5-3); % 盈亏 newlip(1,2)=newlip(1,2)+0;

newlip(1,3)=newlip(1,3)-HoldingPosition(k,i*5-3);% 空头减少量 newlip(1,4)=min([newlip(1,4),HoldingPosition(k,i*5)]); newlip(1,5)=max([newlip(1,5),j]);

HoldingPosition(k,:)=zeros(1,5); % 还原仓位 PLI(1,i)=HoldingPosition(k,i*5-4);% 开仓价位 PLI(2,i)=-1; % 方向 PLI(3,i)=-1; % 亏损与否 elseif H>=QuitH % 退出触发

newlip(1,1)=newlip(1,1) -(HoldingPosition(k,i*5-1)-QuitH)*HoldingPosition(k,i*5-3); % 盈亏 newlip(1,2)=newlip(1,2)+0;

newlip(1,3)=newlip(1,3)-HoldingPosition(k,i*5-3);% 空头减少量 newlip(1,4)=min([newlip(1,4),HoldingPosition(k,i*5)]); newlip(1,5)=max([newlip(1,5),j]);

HoldingPosition(k,:)=zeros(1,5); % 还原仓位

PLI(1,i)=HoldingPosition(k,i*5-4);% 开仓价位 PLI(2,i)=-1; % 方向

if -(HoldingPosition(k,i*5-1)-QuitH)*HoldingPosition(k,i*5-3)<0 PLI(3,i)=-1; % 亏损 else

PLI(3,i)=1; % 盈利 end else end else end

end end end

% 更新平仓历史记录 if newlip(1,1)~=0

LastPL=[LastPL;newlip]; end

for i=1:Q

O=data(j,i*5-4);H=data(j,i*5-3);L=data(j,i*5-2);C=data(j,i*5-1); MarketValue=MarketValue+sum(HoldingPosition(:,i*5-3)*C); end

% 更新账户损益信息

Balance(j,:)=[Balance(j-1,1)+newlip(1,1), MarketValue];

RSV_j=RSV(j,:);

[s sr]= sort(RSV_j,'descend'); % 获得从大到小排序。 [s2 sr2]= sort(RSV_j); % 获得从小到大排序。

% 率先对仓位和风险水平做一个核算。

% 风险水平,根据相关性水平进行那个核算。 % 首先要把价格序列转换成收益率。 MCorr=[0;0]; % 下相关和 上相关 for i=1:Q for k=i+1

Ci=data(j-CorrAdj:j,i*5-1); Ck=data(j-CorrAdj:j,k*5-1); ri=price2ret(Ci); rk=price2ret(Ck);

[corrxy] = exceedence_corr(ri,rk,0,0); % 均值左右的相关性<0 ;>0 MCorr=MCorr+corrxy; end end

MCorr=MCorr/(i*(i-1)/2);

% 做多风险控制,观察下跌相关性风险 if MCorr(1,1)<= CorrLev(1,1) CB=PosLim(1,4);

elseif MCorr(1,1)>= CorrLev(1,2) CB=PosLim(1,2); else

CB=PosLim(1,3); end

% 做空风险控制,观察上涨相关性风险 if MCorr(2,1)<= CorrLev(1,1) CS=PosLim(1,4);

elseif MCorr(2,1)>= CorrLev(1,2) CS=PosLim(1,2); else

CS=PosLim(1,3); end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 再统计现在剩余的盘口数 BQ=0; % 买单位数 buy quantity SQ=0; % 卖单位数 for i=1:Q for k=1:4

if HoldingPosition(k,i*5-3)~=0 && HoldingPosition(k,i*5-2)==1 BQ=BQ+1; end

if HoldingPosition(k,i*5-3)~=0 && HoldingPosition(k,i*5-2)==-1 SQ=SQ+1; end end end

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 根据风险控制概念,现在还可以做多和做空的单位数分别为:

PB=min([CB+SQ-BQ PosLim(1,5)-BQ]) ; % permit buy,相关性风险下可以允许少部分对冲,但总单向持仓不能找过一个限度。

PS=min([CS+BQ-SQ PosLim(1,5)-SQ]) ; % permit sell

for ll=1:Q

if PB>0 % 有剩余头寸

i=sr(ll); % 首先从RSV最大的开始

O=data(j,i*5-4);H=data(j,i*5-3);L=data(j,i*5-2);

EnterL=min(DailyData(Today-Str2_in:Today-1,i*5-2)); EnterH=max(DailyData(Today-Str2_in:Today-1,i*5-3)); N= NMatrix(Today-1,i);

ValuePerPoint=N*Size(i)/Margin(i); % 一手波动全部损失所值价值 VN= fix(0.01*sum(Balance(j-1,:))/ValuePerPoint); % 每个标准风险单位 PriceVN_B=VN*H*Margin(i)*Size(i); % 做多每组所需资金 if H>=EnterH

if HoldingPosition(1,i*5-3)==0 % 虚位以待!

if Balance(j-1,1)>PriceVN_B

% % 持仓,针对每一个品种,描述出其(开仓价格,持仓量,开仓方向,预设止损值,,开仓时间)

% 4×(5×i)

HoldingPosition(1,i*5-4)=(EnterH); HoldingPosition(1,i*5-3)=(VN); HoldingPosition(1,i*5-2)=(1);

HoldingPosition(1,i*5-1)=(EnterH-2*N); %% 注:预设2倍止损! HoldingPosition(1,i*5)=(j);

HoldingPosition(2:4,i*5-4:i*5)=zeros;

Balance(j,1)=Balance(j-1,1)-PriceVN_B; % 资金账户划转 Balance(j,2)=Balance(j-1,2)+PriceVN_B;

BQ=BQ+1; % 可买卖单位调整

PB=min([CB+SQ-BQ PosLim(1,5)-BQ]) ; PS=min([CS+BQ-SQ PosLim(1,5)-SQ]) ; end %{

为了保证全部头寸的风险最小,如果另外增加单位,前面单位的止损就提高1/2N。 这一般意味着全部头寸的止损将被设置在踞最近增加的单位的2N处。

然而,在后面单位因市场波动太快造成“打滑(skid)”或者因开盘跳空而以较大的间隔设置的情况下,止损就有所不同。 %} elseif HoldingPosition(1,i*5-3)~=0 && HoldingPosition(2,i*5-3)==0 && H>=HoldingPosition(1,i*5-4)+0.5*N if Balance(j-1,1)>PriceVN_B

% % 持仓,针对每一个品种,描述出其(开仓价格,持仓量,开仓方向,预设止损值,,开仓时间)

% 4×(5×i)

HoldingPosition(2,i*5-4)=(HoldingPosition(1,i*5-4)+0.5*N); HoldingPosition(2,i*5-3)=(VN); HoldingPosition(2,i*5-2)=(1);

HoldingPosition(2,i*5-1)=(HoldingPosition(2,i*5-4)-2*N); %% 注:预设2倍止损! HoldingPosition(2,i*5)=(j);

HoldingPosition(1,i*5-1)=(HoldingPosition(1,i*5-4)-2*N+0.5*N); %% 止损水平提高 HoldingPosition(3:4,i*5-4:i*5)=zeros;

Balance(j,1)=Balance(j-1,1)-PriceVN_B; % 资金账户划转 Balance(j,2)=Balance(j-1,2)+PriceVN_B;


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

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

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

马上注册会员

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