ALPHA_AI遗传模式多品种交易

先上图再上代码:

ALPHA_AI遗传模式多品种交易

ALPHA_AI遗传模式多品种交易

ALPHA_AI遗传模式多品种交易

ALPHA_AI遗传模式多品种交易

ALPHA_AI遗传模式多品种交易

ALPHA_AI遗传模式多品种交易

ALPHA_AI遗传模式多品种交易

ALPHA_AI遗传模式多品种交易

ALPHA_AI遗传模式多品种交易

ALPHA_AI遗传模式多品种交易

ALPHA_AI遗传模式多品种交易

ALPHA_AI遗传模式多品种交易

主文件代码:

clc;

clear all;

% [data_all,time_all]=gethqdata(‘tick_if.csv’); %载入数据

dd = readtable(‘F:\遗传策略 -模式11\遗传策略 -模式\data\1min沪铜指数.csv’);

alldata = table2array(dd(:,5));%全部行情

alltime = table2cell(dd(:,1));%全部时间

%%%%%%检查筛选数据

dd_s =readtable(‘F:\遗传策略 -模式11\遗传策略 -模式\data\10second沪铜指数0.csv’);

alldata_s = table2array(dd_s(:,5));%全部行情

alltime_s = table2cell(dd_s(:,1));%全部时间

clear(‘dd_s’);

clear(‘dd’);

%%%%%%%%%%随机产生新的数据

% data_all=New_data(data_all);%随机产生新的数据(翻倍)

% time_all=num2cell(New_time(cell2mat(time_all)));%产生相应维度的时间

%% 策略生成

%1.初始化50个策略

breed_num =50;

input_num=100;%输入数目 数目越大 计算圆满,效果越好,但过长易造成计算缓慢和交易手数过低

output_num=10;%行情分类数目,数字大可能会过度拟合

select_num=8;%选择的策略数目

num1 =36;%繁殖的代数

num2 =20;%需要的策略数目

cost =5;%%交易成本

cost_s=5;%筛选数据的交易成本

len =20;%均线周期

rate_i=0.416;%样本初始数据大小比例

rate1=0.418;%适应产生数据的样本比例,(暂时不用)

goalnum=0.000002;%存储的策略平均分选择

i_num3=1;%选择的评价体系 初始化值

buy_ratio=15;%多头占盈利的比例的倒数

sell_ratio=15;%空头占盈利的比例的倒数

gpnum=2;%迭代次数 注意gpnum<length(Fsg)

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

sgin=6;%进场指令数

sgin1=6;

sgin2=6;

sgout=6;%出场指令数

sgout1=6;

sgsum=(sgin+sgout+sgout1+sgin1+sgin2)*2;%需要的指令集数

sgkong=6;%空仓期指令数

sum_sg=ceil(log2(sgsum+sgkong));%交易目标群2^sum_sg

sg=zeros(1,sgsum);

sgg=randperm(2^(sum_sg))-1;%随机产生指令集

for i_sg=1:sgsum

sg(i_sg)=sgg(i_sg); %交易的指令集

end

% sg=sort(sg);

sg(1,end+1)=sgin;

sg(1,end+1)=sgout;

sgin=sg(end-1);

sgin1=sgin;

sgin2=sgin;

sgout=sg(end);

sgout1=sgout;

sg1=num2cell(sg(1,1:sgin));%开多

sg2=num2cell(sg(1,sgin+1:sgin+sgin1));%再次开多

sg3=num2cell(sg(1,sgin+sgin1+1:sgin+sgin1+sgin2));%再再开多

sg4=num2cell(sg(1,sgin+sgin1+sgin2+1:sgin+sgin1+sgin2+sgout));%出

sg5=num2cell(sg(1,sgin+sgin1+sgin2+sgout+1:sgin+sgin1+sgin2+sgout+sgout1));%出出

sg6=num2cell(sg(1,sgin+sgin1+sgin2+sgout+sgout1+1:sgin+sgin1+sgin2+sgout+sgout1+sgin2));%进

sg7=num2cell(sg(1,sgin+sgin1+sgin2+sgout+sgout1+sgin2+1:sgin+sgin1+sgin2+sgout+sgout1+sgin2+sgin1));%进进

sg8=num2cell(sg(1,sgin+sgin1+sgin2+sgout+sgout1+sgin2+sgin+1:sgin+sgin1+sgin2+sgout+sgout1+sgin2+sgin1+sgin));%进进

save(‘sg’,’sg’);

% sg=[0,5,2,7];%设置固定指令

% i_num3=d_i;%选择的评价体系

% Fsg=[1,2,3,10,16,18,22,23]; %gpnum<length(Fsg)

Fsg=[1,1,1,1,1,5,6];

if gpnum>length(Fsg)

gpnum=length(Fsg);

end

% % if length(s_randm)<i_chi_num

s_randm = repmat(new_strategy(‘s’,input_num,output_num,sum_sg),breed_num,1);%随机生成策略

% parfor GA_i=1:GA_num

for i =1:breed_num

s_randm(i) = init_strategy(new_strategy(‘s’,input_num,output_num,sum_sg),0);

% new_strategy 随机生成新策略

% ‘s’ 策略名字 随便赋值

% init_strategy 初始化策略,将策略中的模拟交易数据归零并且分配内存(除了策略本身),加快运算速度

%s_randm 初始策略

%num1 繁殖代数 (占用时间)

%num2 需要的策略数目 (占用内存)

%num3 选择的策略评价体系个数

%time_all data_all 需要的数据 data_all 收盘价格

%cost 每笔交易成本 冲击成本+手续费

end

for d_i=1:gpnum

findrate = fix(length(alldata)*rate_i);%测试的比例长度

data_all=alldata(1:findrate,:);%学习的范围

time_all=alltime(1:findrate,:);%学习的范围,时间

i_num3=Fsg(d_i);

%遗传算法繁殖策略,耗时间


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%第一模式

%%%%%%遗传生成策略

% parfor

% [s_generate6{(i_num3)},myseed] = generate_the_strategy1(s_randm,num1,num2,time_all,data_all,cost,len,i_num3,input_num,output_num,goalnum); %i评价选择,testtime,testdata

% sell_strategy{(i_num3)} =
sell_generate_the_strategy1(s_randm,num1,num2,time_all,data_all,cost,len,i_num3,input_num,output_num,goalnum); %i评价选择,testtime,testdata

% buy_strategy{(i_num3)} =
buy_generate_the_strategy1(s_randm,num1,num2,time_all,data_all,cost,len,i_num3,input_num,output_num,goalnum); %i评价选择,testtime,testdata

% end

num_strategy=num2;

num_generate=num1;

%%%%%%%%

% idata_all=New_data(data_all);%随机产生新的数据(翻倍)

% itime_all=num2cell(New_time(cell2mat(time_all)));%产生相应维度的时间

% findrate1 = fix(length(idata_all)*rate1);%测试的比例长度

% data_all1=itime_all(1:findrate1,:);%学习的范围

% time_all1=itime_all(1:findrate1,:);%学习的范围,时间

% s_data=zeros(length(data_all1),1);%进行交易的

% s_time=time_all1;%进行交易的

%%%%%%

s=s_randm;

i_i_num3=i_num3;

parent_rate = 0.75;%默认50%的淘汰率

num_all_strategy = floor(num_strategy*parent_rate^-1);%默认50%的淘汰率

num_origin = length(s); %初始策略数目

born_num = num_all_strategy – num_origin;

if born_num<=0

origin_strategy = s(1:num_all_strategy);

else

s1 = s(:); %确定是列向量

s2 = repmat(s(1),born_num,1);

for i_born =1:born_num

s2(i_born) = new_strategy(‘s’,input_num,output_num,sum_sg);

end

origin_strategy = [s1;s2];

end

num_init = length(alltime);

origin_strategy = init_strategy(origin_strategy,num_init);

%初始化名字

strategy_name = 1;

parent_log = cell(num_strategy,1);

for i_name =1:num_all_strategy

origin_strategy(i_name).name = num2str(strategy_name);

strategy_name=strategy_name+1;

end

s_temp=origin_strategy;%初始化策略空间

%% 开始繁殖

% myi=1;

myi_i=1;

for fanzhi_num = 1:num_generate %

%% 策略会测 评分 作为繁殖的依据

goal = zeros(num_all_strategy,1);%记录每个策略得分

% s_temp=zeros(num_all_strategy,1);

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

%%%%%%%%%%随机产生新的数据

% idata_all=New_data(data_all);%随机产生新的数据(翻倍)

% % itime_all=num2cell(New_time(cell2mat(time_all)));%产生相应维度的时间

% findrate1 = fix(length(idata_all)*rate1);%测试的比例长度

% data_all1=idata_all(1:findrate1,:);%学习的范围

% time_all1=itime_all(1:findrate1,:);%学习的范围,时间

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

rate_s=0.0001*fanzhi_num;

findrate = fix(length(alldata)*(rate_i+rate_s));%测试的比例长度

data_all=alldata(1:findrate,:);%学习的范围

time_all=alltime(1:findrate,:);%学习的范围,时间

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

% s_data=data_all1;%进行交易的

% s_time=time_all1;%进行交易的

s_data=data_all;%进行交易的

s_time=time_all;%进行交易的

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

parfor i_stragey = 1:num_all_strategy

if ~any(strcmp(origin_strategy(i_stragey).name,parent_log)) %父代不参与模拟交易 节约时间

tic

disp([num2str(fanzhi_num),’次繁殖.第’,num2str(i_stragey),’策略,策略名称:’,origin_strategy(i_stragey).name,’策略回测中。。。’]);

s_temp(i_stragey)=sim_trade12(origin_strategy(i_stragey),s_time,s_data,sg1,sg2,sg3,sg4,sg5,sg6,sg7,sg8,sum_sg);%并行计算的时候去掉s_temp(i_strategy)中的i_strategy

origin_strategy(i_stragey)=evaluate_strategy(s_temp(i_stragey),cost,i_i_num3); %股指0.4个点 评价函数学习的范围

toc;

end

goal(i_stragey) = origin_strategy(i_stragey).score;%*origin_strategy0(i_stragey).score;+origin_strategy1(i_stragey).score

%输出显示

% plot(cumsum(origin_strategy(i_stragey).profit)); %画图使用

%

% pause(0.15);%画图使用停顿0.1 可以显示

% hold on; %画图使用

end

% hold off;%画图使用

% pause(2);%画图使用

[~,sort_index]=sort(goal,’descend’);

parent = origin_strategy(sort_index(1:num_strategy));

%%记录名字,在名单的就不用进行交易了

for i_name =1:num_strategy

parent_log{i_name}=parent(i_name).name;

if parent(i_name).score==inf

parent(i_name).score=0;%检查得分情况

end

end

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

mgoal=0;

for i_seed = 1:num_all_strategy

mgoal = mgoal +origin_strategy(i_seed ).score;

end

mgoal = mgoal/num_all_strategy;

%%%%%%%显示评价得分值

disp([‘平均值:’,num2str(mgoal)])

pause(0.15);%画图使用停顿0.1 可以显示

mgoal(i_seed ) = mgoal;

if mgoal(i_seed )>goalnum %%……%选择过程得分高于一定程度的策略&seed(1).rec_order.score seed(1).rec_order.score>50

for e_i_seed = 1:num_all_strategy

if s_temp(e_i_seed).score>0

[buy_profit,sell_profit]=myselect_evaluate_strategy(s_temp(e_i_seed),cost,i_i_num3);

if (buy_profit/(buy_profit+sell_profit))>1/buy_ratio&&(sell_profit/(buy_profit+sell_profit))>1/sell_ratio&&buy_profit>0&&sell_profit>0

myseed{1,myi_i}=s_temp(e_i_seed);

myi_i=myi_i+1;

end

end

end

end

%% 进行下一代的繁殖

multi_rate=0.9;

mut_rate=0.15;

if fanzhi_num<num_generate

goal = goal/sum(goal); %归一化

child_num = num_all_strategy-num_strategy;

child = repmat(new_strategy(‘s’,input_num,output_num,sum_sg),child_num,1);

for i_stragey =1:child_num

f_strategy = origin_strategy(select_strategy(goal));

m_strategy = origin_strategy(select_strategy(goal));

child(i_stragey) = init_strategy(multiply_strategy(num2str(strategy_name),f_strategy,m_strategy,multi_rate,mut_rate,sum_sg),num_init);

strategy_name=strategy_name+1;

end

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

if myi_i==1

myseed{1,1}=f_strategy(1);

end

s_mysdi_i_i=0;

s_num=length(myseed{1,1});

%%%输入途中记录的策略

for s_mysdi=1:length(myseed)

for s_mysdi_i=1:s_num

s_dongseed(s_mysdi_i_i+s_mysdi_i)=myseed{1,s_mysdi}(s_mysdi_i);

end

s_mysdi_i_i=s_num+s_mysdi_i_i;

end

%输入最后的进化的策略的结果

for s_p_i=1:length(f_strategy)

s_dongseed(s_p_i+s_mysdi_i_i)=f_strategy(s_p_i);

end

%%%从中筛选策略

s_ii=1;

for i=1:length(s_dongseed)

if s_dongseed(i).score>goalnum%选择得分的策略

[buy_profit,sell_profit]=myselect_evaluate_strategy(s_dongseed(i),cost);

if (sum(buy_profit)/sum(buy_profit+sell_profit))>1/buy_ratio&&(sum(sell_profit)/sum(buy_profit+sell_profit))>1/sell_ratio&&sum(buy_profit)>0&&sum(sell_profit)>0

s_huanseed(s_ii)=s_dongseed(i);

s_ii=s_ii+1;

end

end

end

if s_ii>1

if length(s_huanseed)>=length(parent)%插入选择的策略

for i_ch_num=1:floor(length(child)/2)

child(i_ch_num)= s_huanseed(length( s_huanseed)-i_ch_num+1);

end

end

end

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

origin_strategy=[parent;child];

if floor(breed_num/4)>1

for i_p =1:floor(length(parent)/3)

parent(end-i_p+1) = init_strategy(new_strategy(‘s’,input_num,output_num,sum_sg),0);

end

end

else

strategy = parent;

end

end

if myi_i==1

myseed{1,1}=strategy(1);

end

mysdi_i_i=0;

num=length(myseed{1,1});

%%%输入途中记录的策略

for mysdi=1:length(myseed)

for mysdi_i=1:num

dongseed(mysdi_i_i+mysdi_i)=myseed{1,mysdi}(mysdi_i);

end

mysdi_i_i=num+mysdi_i_i;

end

%输入最后的进化的策略的结果

for p_i=1:length(strategy)

dongseed(i+mysdi_i_i)=strategy(p_i);

i=i+1;

end

%%%从中筛选策略

ii=1;

for i=1:length(dongseed)

if dongseed(i).score>goalnum%选择得分的策略

[buy_profit,sell_profit]=myselect_evaluate_strategy(dongseed(i),cost);

if (sum(buy_profit)/sum(buy_profit+sell_profit))>1/buy_ratio&&(sum(sell_profit)/sum(buy_profit+sell_profit))>1/sell_ratio&&sum(buy_profit)>0&&sum(sell_profit)>0

huanseed(ii)=dongseed(i);

ii=ii+1;

end

end

end

if ii==1

ii_sh=1;

disp(‘没有选择出适合的策略’);

for ii_ss=1:length(strategy)

if strategy(ii_ss).score>0

huanseed(ii_sh)=strategy(ii_ss);

ii_sh=ii_sh+1;

end

end

end

if select_num>=length(huanseed)

select_num=length(huanseed);

end

parfor i_stragey=1:length(huanseed)

myoutsamplestrategy(i_stragey) = strategyForRealTrade( huanseed(i_stragey),i_stragey,1000);%数据清原

% %

% % % % % % % % % % % % % % % % % % % % % % 样本外的数据

new_strategy1(i_stragey)=sim_trade12(myoutsamplestrategy(i_stragey),alltime,alldata,sg1,sg2,sg3,sg4,sg5,sg6,sg7,sg8,sum_sg);%%%%%%%这个有问题

% % % % % % % % % % % % % 检验样本外数据的交易

samnewstrategy(i_stragey)=evaluate_strategy(new_strategy1(i_stragey),cost_s,i_i_num3);

end

newss=samnewstrategy’;

[new_strategy,index] =
select_lowest_corr_strategy( newss,select_num);% 从策略中选择出num个相关性最小的策略来;

%现实相关度和资金趋势

distribute_strategy(new_strategy); %按照盈亏比和胜率看各个策略分布情况(剔除过度优化);

mean_profit = combine_strategy(new_strategy);

print(‘-djpeg’,[‘F:\遗传策略 -模式11\遗传策略 -模式\figure\’,num2str(d_i),num2str(d_i),datestr(date,30),’.jpeg’]);

close;

print(‘-djpeg’,[‘F:\遗传策略 -模式11\遗传策略 -模式\figure\’,num2str(d_i),num2str(d_i+1),datestr(date,30),’.jpeg’]);

close;

print(‘-djpeg’,[‘F:\遗传策略 -模式11\遗传策略 -模式\figure\’,num2str(d_i),num2str(d_i+2),datestr(date,30),’.jpeg’]);

close;

pause(0.15);

% % % % % % % % % % % % % % % % % % % % % % 样本外的数据

parfor i_stragey=1:length(new_strategy)

new_strategy(i_stragey) = strategyForRealTrade( new_strategy(i_stragey),i_stragey,1000);%数据清原

new_strategy(i_stragey)=sim_trade12(new_strategy(i_stragey),alltime_s,alldata_s,sg1,sg2,sg3,sg4,sg5,sg6,sg7,sg8,sum_sg);%%%%%%%这个有问题

new_strategy(i_stragey)=evaluate_strategy(new_strategy(i_stragey),cost_s,i_i_num3);

end

distribute_strategy(new_strategy); %按照盈亏比和胜率看各个策略分布情况(剔除过度优化)

mean_profit1 = combine_strategy(new_strategy);

print(‘-djpeg’,[‘F:\遗传策略 -模式11\遗传策略 -模式\figure\’,num2str(d_i),num2str(d_i+3),datestr(date,30),’.jpeg’]);

close;

print(‘-djpeg’,[‘F:\遗传策略 -模式11\遗传策略 -模式\figure\’,num2str(d_i),num2str(d_i+4),datestr(date,30),’.jpeg’]);

close;

print(‘-djpeg’,[‘F:\遗传策略 -模式11\遗传策略 -模式\figure\’,num2str(d_i),num2str(d_i+5),datestr(date,30),’.jpeg’]);

close;

pause(0.15);

%%%%输出策略

for ii_s=1:select_num

% fileoutsim_trade1([‘strategy’,num2str(d_i),num2str(ii_s),’.txt’],new_strategy(ii_s),len,sg,sgin,sgout);

fileoutsim_trade12([‘F:\遗传策略 -模式11\遗传策略 -模式\strategy\’,’strategy12′,num2str(d_i),num2str(ii_s),datestr(date,30),’.txt’],new_strategy(ii_s),len,sg1,sg2,sg3,sg4,sg5,sg6,sg7,sg8);

%输出策略的表现

% // showstrategy(new_strategy(ii_s),cost);

% print(‘-djpeg’,[‘F:\遗传策略 -模式11\遗传策略 -模式\figure\’,num2str(d_i),num2str(d_i+1+ii_s),’.jpeg’]);

end

pause(0.15);

i_s_i=1;

s_randm=strategy;

for i_s=length(s_randm)+1:length(huanseed)

s_randm(i_s)=huanseed(i_s_i);

i_s_i= i_s_i+1;

end

clear(‘dongseed’);

save([‘new_strategy’,num2str(d_i)],’new_strategy’);

clear(‘huanseed’);

clear(‘new_strategy’);

clear(‘samnewstrategy’);

clear(‘new_strategy1’);

clear(‘myoutsamplestrategy’);

clear(‘s’);

close all;

clear(‘data_all’);

clear(‘time_all’);

end

% pause;

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

% % % %组合策略的平均收益情况

% new_strategy=parent;

% mean_profit = combine_strategy(new_strategy);

% % 评价单个策略

% % 输入参数:单个策略,交易成本;

% % % % % % % % % for i_stragey=1:length(new_strategy)

% % % % % % % % % myoutsamplestrategy(i_stragey) = strategyForRealTrade( new_strategy(i_stragey),i_stragey,1000);%数据清原

% % % % % % % % % % %

% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % 样本外的数据

% % % % % % % % % new_strategy0(i_stragey)=sim_trade12(myoutsamplestrategy(i_stragey),alltime,alldata,sg,sum_sg);%%%%%%%

% % % % % % % % % new_strategy1(i_stragey)=sim_trade12(myoutsamplestrategy(i_stragey),alltime_s,alldata_s,sg,sum_sg);%%%%%%%

% % % % % % % % % % % % % % % % % % % % % % 检验样本外数据的交易

% % % % % % % % % new_strategy0(i_stragey)=evaluate_strategy(new_strategy0(i_stragey),cost_s,i_i_num3);

% % % % % % % % % new_strategy1(i_stragey)=evaluate_strategy(new_strategy1(i_stragey),cost_s,i_i_num3);

% % % % % % % % % end

% % % % % % % % % newss0=new_strategy0′;

% % % % % % % % % mean_profit10 = combine_strategy(newss0);

% % % % % % % % % mean_profit20 = mycombine_strategy(newss0);

% % % % % % % % %

% % % % % % % % % newss=new_strategy1′;

% % % % % % % % % mean_profit1 = combine_strategy(newss);

% % % % % % % % % mean_profit2 = mycombine_strategy(newss);

% % % % % % % % % clear([‘mean_profit1′,’mean_profit2′,’newss’,’mean_profit10′,’mean_profit20′,’new_strategy1′,’new_strategy0′,’myoutsamplestrategy’])

% mean_profit = combine_strategy(new_strategy);

% % %%准备实盘交易

% % % for ir=1:length(strategy)

% % % real_strategy(ir) = strategyForRealTrade(strategy(ir),’tradeForPP’);

% % % mastrategy(ir)=sim_trade1(real_strategy(ir),alltime,alldata,len);

% % % evaluate_strategy(mastrategy(ir),cost);

% % % end

%

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/68626
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 9 日
下一篇 2024 年 7 月 9 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注