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;
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 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-Str1_in:Today-1,i*5-2)); EnterH=max(DailyData(Today-Str1_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 PLI(2,i)==1 || PLI(3,i)==-1 || PLI(2,i)==-1 && EnterH -PLI(1,i)>=2*N || L<=min(DailyData(Today-Str2_in:Today-1,i*5-2));
% 上次交易为做多 或上次交易亏损 或 上次交易也是做空,不过开仓位置与这一次最高点没有超过2N
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 end %%
elseif STRATEGY==2
for j=max([Str1_in,Str2_in,P_RSV/Freq])*Freq+1:Days*Freq Today=fix(j/Freq)+1; % 现在所处的交易日