%% 参数优化图 %% 选择策略 strategysn = 3; strategyname_cell = { 'breakH' 'breakL' 'MAcross1' 'MAcross2' 'CL' 'crossB' '...' '...' '...' }; strategyname = strategyname_cell{ strategysn }; %% 选择时间段 begintime = 20100104; % YYYYMMDD or YYYYMMDDHHMM endtime = 20210531; % YYYYMMDD or YYYYMMDDHHMM %% 读取数据;确定开始时间与结束时间对应坐标 % 选择交易品种 sn = 1; % 选择品种序列号 Codescell = { '000001'; '000016'; '000300'; '000905'; '399005'; '399006'; 'RB'; 'HC'; 'J'; 'JM'; 'I'; 'ZC'; 'RU'; 'SP'; 'FG'; 'CU'; 'NI'; 'AL'; 'ZN'; 'FU'; 'BU'; 'SC'; 'AU'; 'AG'; 'AP'; 'SR'; 'CF'; 'JD'; 'P'; 'M'; 'RM'; 'Y'; 'OI'; 'MA'; 'PP'; 'L'; 'V'; 'TA'; 'EG' }; % 品种代码表 pname = Codescell{sn,:} % 根据序列号查表得到品种代码 % 读取数据文件 filename = [ 'Data\Daily\' pname '.csv' ]; TOHLCV = csvread( filename , 1 ); % 核对时间轴,找到给定开始时间与结束时间对应的坐标 beginidx = find( TOHLCV(:,1) == begintime ); endidx = find( TOHLCV(:,1) == endtime ); %% 回测策略 % 显示品种 disp( [ '交易品种: ' pname ] ); % 根据开始与结束时间的对应坐标截取矩阵 TOHLCV = TOHLCV( beginidx : endidx , : ); innan = find( ~isnan(TOHLCV(:,5)) ,1 ); TOHLCV = TOHLCV( innan : end , : ); begintime = TOHLCV(1,1); % 更新begintime % 模拟交易 inicash = 10^7; SI = TOHLCV(:,5) / TOHLCV(1,5); N1 = 10:10:60; % 进场信号探测窗口周期 N2 = 0.5:0.05:1.2; % 出场信号探测窗口周期 b_a = 1; % 信号探测使用高低点 (取值1)或收盘价 (取值2) AR = nan( numel(N1) , numel(N2) ); % 年化回报率矩阵 Sharpe = nan( numel(N1) , numel(N2) ); % 夏普比矩阵 Calmar = nan( numel(N1) , numel(N2) ); % 卡玛比矩阵 for i = 1 : numel(N1) for j = 1 : numel(N2) paramcell = { [N1(i) N2(j) b_a] [N1(i) N2(j) b_a] }; [ Capital , H ] = feval( [ 'Strategy_' strategyname ] , TOHLCV , paramcell , inicash ); Eqty = Capital / inicash; % 净值曲线 equitypfm = performmetrics( Eqty , 1 , SI' ); AR(i,j) = equitypfm(1); Sharpe(i,j) = equitypfm(1) / equitypfm(5); Calmar(i,j) = equitypfm(1) / equitypfm(2); end end [ X , Y ] = meshgrid( N1 , N2 ) ; Z = AR; % Z = (AR+Sharpe+Calmar) / 3; surf(X',Y',Z) xlabel('N1') ylabel('N2')解释代码
时间: 2023-12-29 21:03:56 浏览: 71
Macross.rar_macross
这段代码是一个基于MATLAB的回测策略,可以用于对不同交易品种和交易策略进行参数优化。具体来说,该代码通过读取CSV文件中的历史交易数据(OHLCV数据),并根据给定的开始时间和结束时间筛选出相应的时间段数据。然后,根据选择的交易品种和交易策略,使用不同的参数组合进行回测,并计算出每个参数组合对应的年化回报率、夏普比和卡玛比。最后,使用Meshgrid函数将这些结果可视化为一个三维图形,其中横轴和纵轴分别代表不同的参数组合,而Z轴则代表相应的回报率。该代码的主要用途是帮助交易者找到最优的参数组合,从而提高交易策略的效果。
阅读全文