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

2018-11-29 16:27

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

PB=min([CB+SQ-BQ PosLim(1,5)-BQ]) ; PS=min([CS+BQ-SQ PosLim(1,5)-SQ]) ; end elseif HoldingPosition(2,i*5-3)~=0 && HoldingPosition(3,i*5-3)==0 && H>=HoldingPosition(2,i*5-4)+0.5*N if Balance(j-1,1)>PriceVN_B

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

% 4×(5×i)

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

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

HoldingPosition(1,i*5-1)=(HoldingPosition(1,i*5-4)-2*N+N); %% 止损水平提高 HoldingPosition(2,i*5-1)=(HoldingPosition(2,i*5-4)-2*N+0.5*N); %% 止损水平提高 HoldingPosition(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 elseif HoldingPosition(3,i*5-3)~=0 && HoldingPosition(4,i*5-3)==0 && H>=HoldingPosition(3,i*5-4)+0.5*N if Balance(j-1,1)>PriceVN_B

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

% 4×(5×i)

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

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

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

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 else end end else end

if PS>0

i=sr2(ll); % 首先从RSV最小的开始

O=data(j,i*5-4);H=data(j,i*5-3);L=data(j,i*5-2);C=data(j,i*5-1); 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_S=VN*L*Margin(i)*Size(i); % 做多每组所需资金 if L<=EnterL

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

if Balance(j-1,1)>PriceVN_S

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

% 4×(5×i)

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

HoldingPosition(1,i*5-1)=(EnterL+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_S; % 资金账户划转 Balance(j,2)=Balance(j-1,2)+PriceVN_S;

SQ=SQ+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 && L<=HoldingPosition(1,i*5-4)-0.5*N if Balance(j-1,1)>PriceVN_S

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

% 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_S; % 资金账户划转 Balance(j,2)=Balance(j-1,2)+PriceVN_S;

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

PB=min([CB+SQ-BQ PosLim(1,5)-BQ]) ; PS=min([CS+BQ-SQ PosLim(1,5)-SQ]) ; end elseif HoldingPosition(2,i*5-3)~=0 && HoldingPosition(3,i*5-3)==0 && L<=HoldingPosition(2,i*5-4)-0.5*N if Balance(j-1,1)>PriceVN_S

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

% 4×(5×i)

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

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

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

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

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

PB=min([CB+SQ-BQ PosLim(1,5)-BQ]) ; PS=min([CS+BQ-SQ PosLim(1,5)-SQ]) ; end elseif HoldingPosition(3,i*5-3)~=0 && HoldingPosition(4,i*5-3)==0 && L<=HoldingPosition(3,i*5-4)-0.5*N if Balance(j-1,1)>PriceVN_S

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

% 4×(5×i)

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

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

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

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

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

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

out=fopen('turtle','at');

fprintf(out,'********************最终交易结果***********************\\n'); fprintf(out,'最终仓位持有情况 \\n');

for i=1:Q

fprintf(out,'交易资产: %u\\n',i);

fprintf(out,'开仓价格 持仓量 开仓方向 止损价位 开仓时间\\n'); for k=1:4

fprintf(out,'%u %u %u %u %u\\n',HoldingPosition(k,i*5-4),...

HoldingPosition(k,i*5-3),HoldingPosition(k,i*5-2),HoldingPosition(k,i*5-1),HoldingPosition(k,i*5-0)); end

fprintf(out,'\\n'); end

fprintf(out,'期间共计交易次数 %u\\n', size(LastPL,1)-1); fprintf(out,'期间共计总计盈亏 %u\\n', sum(LastPL(:,1))); fprintf(out,'最后所持有的现金 %u\\n', Balance(end,1)); fprintf(out,'最后所持有的市值 %u\\n', Balance(end,2)); fclose(out);

plot(LastPL(:,1))

title('Figure 交易盈亏'); ylabel('每次交易盈亏水平'); xlabel('交易次数'); grid on;

saveas(gcf,strcat('P&L_',num2str(i),'.eps'),'psc2');

plot(Balance)

title('Figure 账户平衡表');

ylabel('每次交易导致的账面水平变动'); xlabel('每期观察'); grid on;

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

save STRATEGY1 LastPL Balance HoldingPosition end

%% 辅助函数

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

function cndl(O,H,L,C)

w=.4; %width of body, change to draw body thicker or thinner % Find up and down days d=C-O; l=length(d); hold on


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

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

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

马上注册会员

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