matlab area alpha,【每日一策】Matlab量化交易策略之 WorldQuant 101 alpha#12
function Alpha12(len,len1,len2,num)% alpha#12% num 选股数量targetList = traderGetTargetList();HandleList = traderGetHandleList();global s;global daynum;n = length(targetList);[BarNumber,~,~,~,~,~,~,~,~] =
function Alpha12(len,len1,len2,num)
% alpha#12
% num 选股数量
targetList = traderGetTargetList();
HandleList = traderGetHandleList();
global s;
global daynum;
n = length(targetList);
[BarNumber,~,~,~,~,~,~,~,~] = traderGetCurrentBar(targetList(1).Market,targetList(1).Code);
if(BarNumber==1)
daynum = 1;
end
[~,~,~,~,Dclose,~,~,~] = traderGetKData(targetList(n).Market,targetList(n).Code,'day',1, 1-BarNumber, 0,true,'FWard');
newday = 0;
if daynum
daynum = daynum+1;
newday = 1;
end
if daynum
return
end
if newday==1 && mod(daynum,len1)==0 % 调仓日的第一根bar
% 读取数据
for j = 1:n-1
[~,open,high,low,close,volume,~,~] = traderGetKData(targetList(j).Market,targetList(j).Code,'day',1, 0-len, 0,true,'FWard');
if length(close)
s(j).alpha = -1000;
end
if length(close)==len+1
temp = volume(end-1)-volume(end-2);
if temp>=0
s(j).alpha = close(end-2)-close(end-1);
end
if temp<0
s(j).alpha = close(end-1)-close(end-2);
end
end
if volume(end)==0
s(j).alpha = -1000;
end
[s(j).position,~,~] = traderGetAccountPosition(HandleList(1),targetList(j).Market,targetList(j).Code); % 仓位
end
[~,MarketCap,~,~,~] = traderGetAccountInfo(HandleList);
[~,~,Multiple,~,~,~,~,~,~] = traderGetFutureInfo(targetList(n).Market,targetList(n).Code);
Stock_flow = ((MarketCap)*0.4)/num; % 每只股票分配的资金
% 选股
X = zeros(n-1,1);
for i = 1:n-1
X(i) = -s(i).alpha;
end
[~,I] = sort(X);
SelectedID = I(1:num); % 选出alpha最大的一组股票
% 初始开仓
if daynum==11
for j = 1:n-1
if ismember(j,SelectedID)==1
[~,~,~,~,Dclose,Dvolume,~,~] = traderGetKData(targetList(j).Market,targetList(j).Code,'day',1, 0-1, 0,true,'FWard');
if Dvolume(end)~=0
shareNum = 100*floor((Stock_flow/Dclose(end))/100);
OrderID=traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,shareNum,0,'market','close');
if OrderID~=0
s(j).openprice = Dclose(end);
s(j).entryday = daynum;
else
% daynum
% disp(['error:Code=',targetList(j).Code]);
end
end
end
end
% 期货对冲开仓
[~,~,~,~,Dclose,~,~,~] = traderGetKData(targetList(n).Market,targetList(n).Code,'day',1, 0-1, 0,true,'FWard');
shareNum = floor((Stock_flow*num)/Multiple/Dclose(end));
traderPositionTo(HandleList(2),targetList(n).Market,targetList(n).Code,-shareNum,0,'market','close');
end
%大调仓
if mod(daynum,len2)==0
% 股票调仓,先出后入
success = 0; % 成功卖出的笔数
for j = 1:n-1
if s(j).position>0
if ismember(j,SelectedID)==0
OrderID=traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
if OrderID~=0
s(j).openprice = 0;
s(j).entryday = 0;
success = success+1;
end
end
if ismember(j,SelectedID)==1
[~,~,~,~,Dclose,Dvolume,~,~] = traderGetKData(targetList(j).Market,targetList(j).Code,'day',1, 0-1, 0,true,'FWard');
if Dvolume(end)~=0
shareNum = 100*floor((Stock_flow/Dclose(end))/100);
OrderID=traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,shareNum,0,'market','close');
if OrderID~=0
s(j).openprice = Dclose(end);
s(j).entryday = daynum;
else
% daynum
% disp(['error:Code=',targetList(j).Code]);
end
end
end
end
end
for j = 1:n-1
if s(j).position==0 && success>0
if ismember(j,SelectedID)==1
[~,~,~,~,Dclose,Dvolume,~,~] = traderGetKData(targetList(j).Market,targetList(j).Code,'day',1, 0-1, 0,true,'FWard');
if Dvolume(end)~=0
shareNum = 100*floor((Stock_flow/Dclose(end))/100);
OrderID=traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,shareNum,0,'market','close');
if OrderID~=0
s(j).openprice = Dclose(end);
success = success-1;
s(j).entryday = daynum;
else
% daynum
% disp(['error:Code=',targetList(j).Code]);
end
end
end
end
end
% 期货对冲调仓
[~,~,~,~,Dclose,~,~,~] = traderGetKData(targetList(n).Market,targetList(n).Code,'day',1, 0-1, 0,true,'FWard');
shareNum = floor((Stock_flow*num)/Multiple/Dclose(end));
traderPositionTo(HandleList(2),targetList(n).Market,targetList(n).Code,-shareNum,0,'market','close');
end
end
更多推荐


所有评论(0)