楼主: weitingkoala
36474 89

[源码分享] 【源码】基于MATLAB的策略回测模板   [推广有奖]

学科带头人

13%

还不是VIP/贵宾

-

TA的文库  其他...

应用量化研究

威望
2
论坛币
7921 个
通用积分
51.4514
学术水平
321 点
热心指数
290 点
信用等级
298 点
经验
8986 点
帖子
424
精华
7
在线时间
1323 小时
注册时间
2010-5-7
最后登录
2024-3-4

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
这是我之前的贴子《用Matlab模仿TB写了个回测模板,大家提提意见》(https://bbs.pinggu.org/thread-2933243-1-1.html)的源代码。代码中有一些不恰当的地方,由于自己比较懒,也没有去改。误导了大家,请大家见谅。
如果对这些函代码有疑问,可以和我交流
编写人:LianXiangbin
单位:东财,研究生
QQ:785674410
邮箱:785674410@qq.com


如果附件打开之后有乱码,请下载2楼的压缩文件,谢谢!附件:

本帖隐藏的内容


boll_system.txt (33.89 KB)

代码如下:

本帖隐藏的内容

  1. %% 简介:系统基于布林通道原理,是一个趋势追踪系统。
  2. %  入场条件:
  3. %    ROC大于0且价格突破布林带上轨就开多仓;
  4. %    ROC小于0且价格跌破布林带下轨就开空仓;
  5. %  关键参数:
  6. %         买卖滑点参数Slip
  7. %         布林带的周期数BollLength;
  8. %    布林带标准差的倍数Offset;
  9. %    ROC的周期数ROCLength;
  10. %    跟踪止损算法的周期数ExitLength;


  11. %% --提取数据--
  12. user=input('请输入数据库用户名:','s');
  13. password=input('请输入数据库密码:','s');
  14. commodity=input('请输入商品(如RB888):','s');
  15. Freq=input('请输入周期(如M5):','s');
  16. conna=database('Futures_matlab',user,password);
  17. cursor=exec(conna,strcat('select * from ',32,commodity,'_',Freq));%32是指空格的ASCLL码
  18. cursor=fetch(cursor);
  19. data=cursor.Data;
  20. Date=datenum(data(:,1));                %日期时间
  21. Open=cell2mat(data(:,2));               %开盘价
  22. High=cell2mat(data(:,3));               %最高价
  23. Low=cell2mat(data(:,4));                %最低价
  24. Close=cell2mat(data(:,5));              %收盘价
  25. Volume=cell2mat(data(:,6));             %成交量
  26. OpenInterest=cell2mat(data(:,7));       %持仓量

  27. %% --定义参数(常量)--

  28. %策略参数
  29. Slip=2;                                      %滑点
  30. BollLength=50;                               %布林线长度
  31. Offset=1.25;                                 %布林线标准差倍数
  32. ROCLength=30;                                %ROC的周期数

  33. %品种参数
  34. MinMove=1;                                    %商品的最小变动量
  35. PriceScale=1;                                 %商品的计数单位
  36. TradingUnits=10;                              %交易单位
  37. Lots=1;                                       %交易手数
  38. MarginRatio=0.07;                             %保证金率
  39. TradingCost=0.0003;                           %交易费用设为成交金额的万分之三
  40. RiskLess=0.035;                               %无风险收益率(计算夏普比率时需要)

  41. %% --定义变量--

  42. %策略变量
  43. UpperLine=zeros(length(data),1);               %上轨
  44. LowerLine=zeros(length(data),1);               %下轨
  45. MidLine=zeros(length(data),1);                 %中间线
  46. Std=zeros(length(data),1);                     %标准差序列
  47. RocValue=zeros(length(data),1);                %ROC值


  48. %交易记录变量
  49. MyEntryPrice=zeros(length(data),1);            %买卖价格
  50. MarketPosition=0;                              %仓位状态,-1表示持有空头,0表示无持仓,1表示持有多头
  51. pos=zeros(length(data),1);                     %记录仓位情况,-1表示持有空头,0表示无持仓,1表示持有多头
  52. Type=zeros(length(data),1);                    %买卖类型,1标示多头,-1标示空头
  53. OpenPosPrice=zeros(length(data),1);            %记录建仓价格
  54. ClosePosPrice=zeros(length(data),1);           %记录平仓价格
  55. OpenPosNum=0;                                  %建仓价格序号
  56. ClosePosNum=0;                                 %平仓价格序号
  57. OpenDate=zeros(length(data),1);            %建仓时间
  58. CloseDate=zeros(length(data),1);           %平仓时间
  59. NetMargin=zeros(length(data),1);               %净利
  60. CumNetMargin=zeros(length(data),1);            %累计净利
  61. RateOfReturn=zeros(length(data),1);            %收益率
  62. CumRateOfReturn=zeros(length(data),1);         %累计收益率
  63. CostSeries=zeros(length(data),1);              %记录交易成本
  64. BackRatio=zeros(length(data),1);               %记录回测比例

  65. %记录资产变化变量
  66. LongMargin=zeros(length(data),1);              %多头保证金
  67. ShortMargin=zeros(length(data),1);             %空头保证金
  68. Cash=repmat(1e6,length(data),1);               %可用资金,初始资金为10W
  69. DynamicEquity=repmat(1e6,length(data),1);      %动态权益,初始资金为10W
  70. StaticEquity=repmat(1e6,length(data),1);       %静态权益,初始资金为10W

  71. %% --计算布林带和ROC--
  72. [UpperLine MidLine LowerLine]=BOLL(Close,BollLength,Offset,0);
  73. RocValue=ROC(Close,ROCLength);

  74. %% --策略仿真--

  75. for i=BollLength:length(data)
  76.    
  77.     if MarketPosition==0
  78.         LongMargin(i)=0;                            %多头保证金
  79.         ShortMargin(i)=0;                           %空头保证金
  80.         StaticEquity(i)=StaticEquity(i-1);          %静态权益
  81.         DynamicEquity(i)=StaticEquity(i);           %动态权益
  82.         Cash(i)=DynamicEquity(i);                   %可用资金
  83.     end
  84.     if MarketPosition==1
  85.         LongMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio;
  86.         StaticEquity(i)=StaticEquity(i-1);
  87.         DynamicEquity(i)=StaticEquity(i)+(Close(i)-OpenPosPrice(OpenPosNum))*TradingUnits*Lots;
  88.         Cash(i)=DynamicEquity(i)-LongMargin(i);
  89.     end
  90.     if MarketPosition==-1
  91.         ShortMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio;
  92.         StaticEquity(i)=StaticEquity(i-1);
  93.         DynamicEquity(i)=StaticEquity(i)+(OpenPosPrice(OpenPosNum)-Close(i))*TradingUnits*Lots;
  94.         Cash(i)=DynamicEquity(i)-ShortMargin(i);
  95.     end
  96.    
  97.    
  98.     %开仓模块
  99.    
  100.     %开多头
  101.     if MarketPosition~=1 && RocValue(i-1)>0 && High(i)>=UpperLine(i-1)   %用i-1,避免未来函数
  102.         %平空开多
  103.         if MarketPosition==-1   
  104.             MarketPosition=1;
  105.             ShortMargin(i)=0;   %平空后空头保证金为0了
  106.             MyEntryPrice(i)=UpperLine(i-1);
  107.             if Open(i)>MyEntryPrice(i)    %考虑是否跳空
  108.                 MyEntryPrice(i)=Open(i);
  109.             end
  110.             MyEntryPrice(i)=MyEntryPrice(i)+Slip*MinMove*PriceScale;%建仓价格(也是平空仓的价格)
  111.             ClosePosNum=ClosePosNum+1;
  112.             ClosePosPrice(ClosePosNum)=MyEntryPrice(i);%记录平仓价格
  113.             CloseDate(ClosePosNum)=Date(i);%记录平仓时间
  114.             OpenPosNum=OpenPosNum+1;
  115.             OpenPosPrice(OpenPosNum)=MyEntryPrice(i);%记录开仓价格
  116.             OpenDate(OpenPosNum)=Date(i);%记录开仓时间
  117.             Type(OpenPosNum)=1;   %方向为多头
  118.             StaticEquity(i)=StaticEquity(i-1)+(OpenPosPrice(OpenPosNum-1)-ClosePosPrice(ClosePosNum))...
  119.                 *TradingUnits*Lots-OpenPosPrice(OpenPosNum-1)*TradingUnits*Lots*TradingCost...
  120.                 -ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平空仓时的静态权益
  121.             DynamicEquity(i)=StaticEquity(i)+(Close(i)-OpenPosPrice(OpenPosNum))*TradingUnits*Lots;
  122.         end
  123.         %空仓开多
  124.         if MarketPosition==0   
  125.             MarketPosition=1;
  126.             MyEntryPrice(i)=UpperLine(i-1);
  127.             if Open(i)>MyEntryPrice(i)    %考虑是否跳空
  128.                 MyEntryPrice(i)=Open(i);
  129.             end
  130.             MyEntryPrice(i)=MyEntryPrice(i)+Slip*MinMove*PriceScale;%建仓价格
  131.             OpenPosNum=OpenPosNum+1;
  132.             OpenPosPrice(OpenPosNum)=MyEntryPrice(i);%记录开仓价格
  133.             OpenDate(OpenPosNum)=Date(i);%记录开仓时间
  134.             Type(OpenPosNum)=1;   %方向为多头
  135.             StaticEquity(i)=StaticEquity(i-1);
  136.             DynamicEquity(i)=StaticEquity(i)+(Close(i)-OpenPosPrice(OpenPosNum))*TradingUnits*Lots;
  137.         end
  138.         LongMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio;               %多头保证金
  139.         Cash(i)=DynamicEquity(i)-LongMargin(i);
  140.     end
  141.    
  142.     %开空头
  143.     %平多开空
  144.     if MarketPosition~=-1 && RocValue(i-1)<0 && Low(i)<=LowerLine(i-1)
  145.         if MarketPosition==1   
  146.             MarketPosition=-1;
  147.             LongMargin(i)=0;     %平多后多头保证金为0了
  148.             MyEntryPrice(i)=LowerLine(i-1);
  149.             if Open(i)<MyEntryPrice(i)
  150.                 MyEntryPrice(i)=Open(i);
  151.             end
  152.             MyEntryPrice(i)=MyEntryPrice(i)-Slip*MinMove*PriceScale;%建仓价格(也是平多仓的价格)
  153.             ClosePosNum=ClosePosNum+1;
  154.             ClosePosPrice(ClosePosNum)=MyEntryPrice(i);%记录平仓价格
  155.             CloseDate(ClosePosNum)=Date(i);%记录平仓时间
  156.             OpenPosNum=OpenPosNum+1;            
  157.             OpenPosPrice(OpenPosNum)=MyEntryPrice(i);%记录开仓价格
  158.             OpenDate(OpenPosNum)=Date(i);%记录开仓时间
  159.             Type(OpenPosNum)=-1;   %方向为空头
  160.             StaticEquity(i)=StaticEquity(i-1)+(ClosePosPrice(ClosePosNum)-OpenPosPrice(OpenPosNum-1))...
  161.                 *TradingUnits*Lots-OpenPosPrice(OpenPosNum-1)*TradingUnits*Lots*TradingCost...
  162.                 -ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平多仓时的静态权益,算法参考TB
  163.             DynamicEquity(i)=StaticEquity(i)+(OpenPosPrice(OpenPosNum)-Close(i))*TradingUnits*Lots;
  164.         end
  165.         %空仓开空
  166.         if MarketPosition==0   
  167.             MarketPosition=-1;
  168.             MyEntryPrice(i)=LowerLine(i-1);
  169.             if Open(i)<MyEntryPrice(i)
  170.                 MyEntryPrice(i)=Open(i);
  171.             end
  172.             MyEntryPrice(i)=MyEntryPrice(i)-Slip*MinMove*PriceScale;
  173.             OpenPosNum=OpenPosNum+1;
  174.             OpenPosPrice(OpenPosNum)=MyEntryPrice(i);
  175.             OpenDate(OpenPosNum)=Date(i);%记录开仓时间
  176.             Type(OpenPosNum)=-1;   %方向为空头
  177.             StaticEquity(i)=StaticEquity(i-1);
  178.             DynamicEquity(i)=StaticEquity(i)+(OpenPosPrice(OpenPosNum)-Close(i))*TradingUnits*Lots;
  179.         end
  180.         ShortMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio;
  181.         Cash(i)=DynamicEquity(i)-ShortMargin(i);
  182.     end
  183.    
  184.     %如果最后一个Bar有持仓,则以收盘价平掉
  185.     if i==length(data)
  186.         %平多
  187.         if MarketPosition==1
  188.             MarketPosition=0;
  189.             LongMargin(i)=0;
  190.             ClosePosNum=ClosePosNum+1;           
  191.             ClosePosPrice(ClosePosNum)=Close(i);%记录平仓价格
  192.             CloseDate(ClosePosNum)=Date(i);%记录平仓时间
  193.             StaticEquity(i)=StaticEquity(i-1)+(ClosePosPrice(ClosePosNum)-OpenPosPrice(OpenPosNum))...
  194.                 *TradingUnits*Lots-OpenPosPrice(OpenPosNum)*TradingUnits*Lots*TradingCost...
  195.                 -ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平多仓时的静态权益,算法参考TB
  196.             DynamicEquity(i)=StaticEquity(i);%空仓时动态权益和静态权益相等
  197.             Cash(i)=DynamicEquity(i); %空仓时可用资金等于动态权益
  198.         end
  199.         %平空
  200.         if MarketPosition==-1
  201.             MarketPosition=0;
  202.             ShortMargin(i)=0;
  203.             ClosePosNum=ClosePosNum+1;
  204.             ClosePosPrice(ClosePosNum)=Close(i);
  205.             CloseDate(ClosePosNum)=Date(i);
  206.             StaticEquity(i)=StaticEquity(i-1)+(OpenPosPrice(OpenPosNum)-ClosePosPrice(ClosePosNum))...
  207.                 *TradingUnits*Lots-OpenPosPrice(OpenPosNum)*TradingUnits*Lots*TradingCost...
  208.                 -ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平空仓时的静态权益,算法参考TB
  209.             DynamicEquity(i)=StaticEquity(i);%空仓时动态权益和静态权益相等
  210.             Cash(i)=DynamicEquity(i); %空仓时可用资金等于动态权益
  211.         end
  212.     end
  213.     pos(i)=MarketPosition;
  214. end

  215. %% -绩效计算--

  216. RecLength=ClosePosNum;%记录交易长度

  217. %净利润和收益率
  218. for i=1:RecLength

  219.     %交易成本(建仓+平仓)
  220.     CostSeries(i)=OpenPosPrice(i)*TradingUnits*Lots*TradingCost+ClosePosPrice(i)*TradingUnits*Lots*TradingCost;
  221.    
  222.     %净利润
  223.     %多头建仓时
  224.     if Type(i)==1
  225.         NetMargin(i)=(ClosePosPrice(i)-OpenPosPrice(i))*TradingUnits*Lots-CostSeries(i);
  226.     end
  227.     %空头建仓时
  228.     if Type(i)==-1
  229.         NetMargin(i)=(OpenPosPrice(i)-ClosePosPrice(i))*TradingUnits*Lots-CostSeries(i);
  230.     end
  231.     %收益率
  232.     RateOfReturn(i)=NetMargin(i)/(OpenPosPrice(i)*TradingUnits*Lots*MarginRatio);
  233. end

  234. %累计净利
  235. CumNetMargin=cumsum(NetMargin);

  236. %累计收益率
  237. CumRateOfReturn=cumsum(RateOfReturn);

  238. %回撤比例
  239. for i=1:length(data)
  240.     c=max(DynamicEquity(1:i));
  241.     if c==DynamicEquity(i)
  242.         BackRatio(i)=0;
  243.     else
  244.         BackRatio(i)=(DynamicEquity(i)-c)/c;
  245.     end
  246. end

  247. %日收益率
  248. Daily=Date(hour(Date)==9  & minute(Date)==0 & second(Date)==0);
  249. DailyEquity=DynamicEquity(hour(Date)==9  & minute(Date)==0 & second(Date)==0);
  250. DailyRet=tick2ret(DailyEquity);

  251. %周收益率
  252. WeeklyNum=weeknum(Daily);    %weeknum返回是一年的第几周
  253. Weekly=[Daily((WeeklyNum(1:end-1)-WeeklyNum(2:end))~=0);Daily(end)];
  254. WeeklyEquity=[DailyEquity((WeeklyNum(1:end-1)-WeeklyNum(2:end))~=0);DailyEquity(end)];
  255. WeeklyRet=tick2ret(WeeklyEquity);

  256. %月收益率
  257. MonthNum=month(Daily);
  258. Monthly=[Daily((MonthNum(1:end-1)-MonthNum(2:end))~=0);Daily(end)];
  259. MonthlyEquity=[DailyEquity((MonthNum(1:end-1)-MonthNum(2:end))~=0);DailyEquity(end)];
  260. MonthlyRet=tick2ret(MonthlyEquity);

  261. %年收益率
  262. YearNum=year(Daily);
  263. Yearly=[Daily((YearNum(1:end-1)-YearNum(2:end))~=0);Daily(end)];
  264. YearlyEquity=[DailyEquity((YearNum(1:end-1)-YearNum(2:end))~=0);DailyEquity(end)];
  265. YearlyRet=tick2ret(YearlyEquity);

  266. %% 自动创建测试报告(输出到excel)
  267. %% 输出交易汇总
  268. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'统计指标'},'交易汇总','A1');
  269. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'全部交易'},'交易汇总','B1');
  270. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'多头'},'交易汇总','C1');
  271. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'空头'},'交易汇总','D1');

  272. %净利润
  273. ProfitTotal=sum(NetMargin);
  274. ProfitLong=sum(NetMargin(Type==1));
  275. ProfitShort=sum(NetMargin(Type==-1));
  276. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'净利润'},'交易汇总','A2');
  277. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',ProfitTotal,'交易汇总','B2');
  278. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',ProfitLong,'交易汇总','C2');
  279. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',ProfitShort,'交易汇总','D2');

  280. %总盈利
  281. WinTotal=sum(NetMargin(NetMargin>0));
  282. ans=NetMargin(Type==1);
  283. WinLong=sum(ans(ans>0));
  284. ans=NetMargin(Type==-1);
  285. WinShort=sum(ans(ans>0));
  286. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'总盈利'},'交易汇总','A3');
  287. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinTotal,'交易汇总','B3');
  288. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinLong,'交易汇总','C3');
  289. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinShort,'交易汇总','D3');

  290. %总亏损
  291. LoseTotal=sum(NetMargin(NetMargin<0));
  292. ans=NetMargin(Type==1);
  293. LoseLong=sum(ans(ans<0));
  294. ans=NetMargin(Type==-1);
  295. LoseShort=sum(ans(ans<0));
  296. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'总亏损'},'交易汇总','A4');
  297. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LoseTotal,'交易汇总','B4');
  298. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LoseLong,'交易汇总','C4');
  299. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LoseShort,'交易汇总','D4');

  300. %总盈利/总亏损
  301. WinTotalDLoseTotal=abs(WinTotal/LoseTotal);
  302. WinLongDLoseLong=abs(WinLong/LoseLong);
  303. WinShortDLoseShort=abs(WinShort/LoseShort);
  304. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'总盈利/总亏损'},'交易汇总','A5');
  305. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinTotalDLoseTotal,'交易汇总','B5');
  306. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinLongDLoseLong,'交易汇总','C5');
  307. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinShortDLoseShort,'交易汇总','D5');

  308. %交易手数
  309. LotsTotal=length(Type(Type~=0))*Lots;
  310. LotsLong=length(Type(Type==1))*Lots;
  311. LotsShort=length(Type(Type==-1))*Lots;
  312. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'交易手数'},'交易汇总','A7');
  313. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsTotal,'交易汇总','B7');
  314. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsLong,'交易汇总','C7');
  315. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsShort,'交易汇总','D7');

  316. %盈利手数
  317. LotsWinTotal=length(NetMargin(NetMargin>0))*Lots;
  318. ans=NetMargin(Type==1);
  319. LotsWinLong=length(ans(ans>0))*Lots;
  320. ans=NetMargin(Type==-1);
  321. LotsWinShort=length(ans(ans>0))*Lots;
  322. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'盈利手数'},'交易汇总','A8');
  323. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsWinTotal,'交易汇总','B8');
  324. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsWinLong,'交易汇总','C8');
  325. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsWinShort,'交易汇总','D8');

  326. %亏损手数
  327. LotsLoseTotal=length(NetMargin(NetMargin<0))*Lots;
  328. ans=NetMargin(Type==1);
  329. LotsLoseLong=length(ans(ans<0))*Lots;
  330. ans=NetMargin(Type==-1);
  331. LotsLoseShort=length(ans(ans<0))*Lots;
  332. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'亏损手数'},'交易汇总','A9');
  333. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsLoseTotal,'交易汇总','B9');
  334. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsLoseLong,'交易汇总','C9');
  335. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsLoseShort,'交易汇总','D9');

  336. %持平手数
  337. ans=NetMargin(Type==1);
  338. LotsDrawLong=length(ans(ans==0))*Lots;
  339. ans=NetMargin(Type==-1);
  340. LotsDrawShort=length(ans(ans==0))*Lots;
  341. LotsDrawTotal=LotsDrawLong+LotsDrawShort;
  342. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'持平手数'},'交易汇总','A10');
  343. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsDrawTotal,'交易汇总','B10');
  344. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsDrawLong,'交易汇总','C10');
  345. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsDrawShort,'交易汇总','D10');

  346. %盈利比率
  347. LotsWinTotalDLotsTotal=LotsWinTotal/LotsTotal;
  348. LotsWinLongDLotsLong=LotsWinLong/LotsLong;
  349. LotsWinShortDLotsShort=LotsWinShort/LotsShort;
  350. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'盈利比率'},'交易汇总','A11');
  351. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsWinTotalDLotsTotal,'交易汇总','B11');
  352. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsWinLongDLotsLong,'交易汇总','C11');
  353. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsWinShortDLotsShort,'交易汇总','D11');

  354. %平均利润
  355. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'平均利润(净利润/交易手数)'},'交易汇总','A13');
  356. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',ProfitTotal/LotsTotal,'交易汇总','B13');
  357. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',ProfitLong/LotsLong,'交易汇总','C13');
  358. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',ProfitShort/LotsShort,'交易汇总','D13');

  359. %平均盈利
  360. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'平均盈利(总盈利金额/盈利交易手数)'},'交易汇总','A14');
  361. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinTotal/LotsWinTotal,'交易汇总','B14');
  362. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinLong/LotsWinLong,'交易汇总','C14');
  363. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinShort/LotsWinShort,'交易汇总','D14');

  364. %平均亏损
  365. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'平均亏损(总亏损金额/亏损交易手数)'},'交易汇总','A15');
  366. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LoseTotal/LotsLoseTotal,'交易汇总','B15');
  367. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LoseLong/LotsLoseLong,'交易汇总','C15');
  368. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LoseShort/LotsLoseShort,'交易汇总','D15');

  369. %平均盈利/平均亏损
  370. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'平均盈利/平均亏损'},'交易汇总','A16');
  371. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',abs((WinTotal/LotsWinTotal)/(LoseTotal/LotsLoseTotal)),'交易汇总','B16');
  372. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',abs((WinLong/LotsWinLong)/(LoseLong/LotsLoseLong)),'交易汇总','C16');
  373. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',abs((WinShort/LotsWinShort)/(LoseShort/LotsLoseShort)),'交易汇总','D16');

  374. %最大盈利
  375. MaxWinTotal=max(NetMargin(NetMargin>0));
  376. ans=NetMargin(Type==1);
  377. MaxWinLong=max(ans(ans>0));
  378. ans=NetMargin(Type==-1);
  379. MaxWinShort=max(ans(ans>0));
  380. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'最大盈利'},'交易汇总','A18');
  381. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxWinTotal,'交易汇总','B18');
  382. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxWinLong,'交易汇总','C18');
  383. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxWinShort,'交易汇总','D18');

  384. %最大亏损
  385. MaxLoseTotal=min(NetMargin(NetMargin<0));
  386. ans=NetMargin(Type==1);
  387. MaxLoseLong=min(ans(ans<0));
  388. ans=NetMargin(Type==-1);
  389. MaxLoseShort=min(ans(ans<0));
  390. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'最大亏损'},'交易汇总','A19');
  391. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxLoseTotal,'交易汇总','B19');
  392. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxLoseLong,'交易汇总','C19');
  393. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxLoseShort,'交易汇总','D19');

  394. %最大盈利/总盈利
  395. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'最大盈利/总盈利'},'交易汇总','A20');
  396. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxWinTotal/WinTotal,'交易汇总','B20');
  397. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxWinLong/WinLong,'交易汇总','C20');
  398. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxWinShort/WinShort,'交易汇总','D20');

  399. %最大亏损/总亏损
  400. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'最大亏损/总亏损'},'交易汇总','A21');
  401. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxLoseTotal/LoseTotal,'交易汇总','B21');
  402. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxLoseLong/LoseLong,'交易汇总','C21');
  403. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxLoseShort/LoseShort,'交易汇总','D21');

  404. %净利润/最大亏损
  405. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'净利润/最大亏损'},'交易汇总','A22');
  406. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',ProfitTotal/MaxLoseTotal,'交易汇总','B22');
  407. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',ProfitLong/MaxLoseLong,'交易汇总','C22');
  408. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',ProfitShort/MaxLoseShort,'交易汇总','D22');

  409. %最大使用资金
  410. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'最大使用资金'},'交易汇总','A24');
  411. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',max(max(LongMargin),max(ShortMargin)),'交易汇总','B24');
  412. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',max(LongMargin),'交易汇总','C24');
  413. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',max(ShortMargin),'交易汇总','D24');

  414. %交易成本合计
  415. CostTotal=sum(CostSeries);
  416. ans=CostSeries(Type==1);
  417. CostLong=sum(ans);
  418. ans=CostSeries(Type==-1);
  419. CostShort=sum(ans);
  420. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'交易成本合计'},'交易汇总','A25');
  421. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',CostTotal,'交易汇总','B25');
  422. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',CostLong,'交易汇总','C25');
  423. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',CostShort,'交易汇总','D25');

  424. %测试时间范围
  425. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'测试时间范围'},'交易汇总','F2');
  426. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',cellstr(strcat(datestr(Date(1),'yyyy-mm-dd HH:MM:SS'),'-',datestr(Date(end),'yyyy-mm-dd HH:MM:SS'))),'交易汇总','G2');

  427. %总交易时间
  428. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'测试天数'},'交易汇总','F3');
  429. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',round(Date(end)-Date(1)),'交易汇总','G3');

  430. %持仓时间比例
  431. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'持仓时间比例'},'交易汇总','F4');
  432. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',length(pos(pos~=0))/length(data),'交易汇总','G4');

  433. %持仓时间
  434. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'持仓时间(天)'},'交易汇总','F5');
  435. HoldingDays=round(round(Date(end)-Date(1))*(length(pos(pos~=0))/length(data)));%持仓时间
  436. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',HoldingDays,'交易汇总','G5');

  437. %收益率
  438. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'收益率(%)'},'交易汇总','F7');
  439. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',(DynamicEquity(end)-DynamicEquity(1))/DynamicEquity(1)*100,'交易汇总','G7');

  440. %有效收益率
  441. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'有效收益率(%)'},'交易汇总','F8');
  442. TrueRatOfRet=(DynamicEquity(end)-DynamicEquity(1))/max(max(LongMargin),max(ShortMargin));
  443. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',TrueRatOfRet*100,'交易汇总','G8');

  444. %年度收益率(按365天算)
  445. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'年化收益率(按365天算,%)'},'交易汇总','F9');
  446. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',(1+TrueRatOfRet)^(1/(HoldingDays/365))*100,'交易汇总','G9');

  447. %年度收益率(按240天算)
  448. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'年度收益率(按240天算,%)'},'交易汇总','F10');
  449. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',(1+TrueRatOfRet)^(1/(HoldingDays/240))*100,'交易汇总','G10');

  450. %% 年度收益率(按日算)
  451. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'年度收益率(按日算,%)'},'交易汇总','F11');
  452. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',mean(DailyRet)*365*100,'交易汇总','G11');

  453. %年度收益率(按周算)
  454. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'年度收益率(按周算,%)'},'交易汇总','F12');
  455. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',mean(WeeklyRet)*52*100,'交易汇总','G12');

  456. %年度收益率(按月算)
  457. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'年度收益率(按月算,%)'},'交易汇总','F13');
  458. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',mean(MonthlyRet)*12*100,'交易汇总','G13');

  459. %夏普比率(按日算)
  460. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'夏普比率(按日算,%)'},'交易汇总','F14');
  461. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',(mean(DailyRet)*365-RiskLess)/(std(DailyRet)*sqrt(365)),'交易汇总','G14');

  462. %夏普比率(按周算)
  463. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'夏普比率(按周算,%)'},'交易汇总','F15');
  464. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',(mean(WeeklyRet)*52-RiskLess)/(std(WeeklyRet)*sqrt(52)),'交易汇总','G15');

  465. %夏普比率(按月算)
  466. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'夏普比率(按月算,%)'},'交易汇总','F16');
  467. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',(mean(MonthlyRet)*12-RiskLess)/(std(MonthlyRet)*sqrt(12)),'交易汇总','G16');

  468. %最大回撤比例
  469. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'最大回撤比例(%)'},'交易汇总','F17');
  470. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',abs(min(BackRatio))*100,'交易汇总','G17');

  471. %% 输出交易记录
  472. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'#'},'交易记录','A1');
  473. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',(1:RecLength)','交易记录','A2');
  474. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'类型'},'交易记录','B1');
  475. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',Type(1:RecLength),'交易记录','B2');
  476. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'商品'},'交易记录','C1');
  477. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',cellstr(repmat(commodity,RecLength,1)),'交易记录','C2');
  478. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'周期'},'交易记录','D1');
  479. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',cellstr(repmat(Freq,RecLength,1)),'交易记录','D2');
  480. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'建仓时间'},'交易记录','E1');
  481. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',cellstr(datestr(OpenDate(1:RecLength),'yyyy-mm-dd HH:MM:SS')),'交易记录','E2');
  482. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'建仓价格'},'交易记录','F1');
  483. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',OpenPosPrice(1:RecLength),'交易记录','F2');
  484. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'平仓时间'},'交易记录','G1');
  485. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',cellstr(datestr(CloseDate(1:RecLength),'yyyy-mm-dd HH:MM:SS')),'交易记录','G2');
  486. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'平仓价格'},'交易记录','H1');
  487. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',ClosePosPrice(1:RecLength),'交易记录','H2');
  488. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'数量'},'交易记录','I1');
  489. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',repmat(Lots,RecLength,1),'交易记录','I2');
  490. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'交易成本'},'交易记录','J1');
  491. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',CostSeries(1:RecLength),'交易记录','J2');
  492. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'净利'},'交易记录','K1');
  493. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',NetMargin(1:RecLength),'交易记录','K2');
  494. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'累计净利'},'交易记录','L1');
  495. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',CumNetMargin(1:RecLength),'交易记录','L2');
  496. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'收益率'},'交易记录','M1');
  497. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',RateOfReturn(1:RecLength),'交易记录','M2');
  498. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'累计收益率'},'交易记录','N1');
  499. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',CumRateOfReturn(1:RecLength),'交易记录','N2');

  500. %% 输出资产变化
  501. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'资产概要'},'资产变化','A1');
  502. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'起初资产'},'资产变化','A2');
  503. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',StaticEquity(1),'资产变化','A3');
  504. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'期末资产'},'资产变化','B2');
  505. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',StaticEquity(end),'资产变化','B3');
  506. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'交易盈亏'},'资产变化','C2');
  507. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',sum(NetMargin),'资产变化','C3');
  508. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'最大资产'},'资产变化','D2');
  509. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',max(DynamicEquity),'资产变化','D3'); %依据TB
  510. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'最小资产'},'资产变化','E2');
  511. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',min(DynamicEquity),'资产变化','E3');
  512. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'交易成本合计'},'资产变化','F2');
  513. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',sum(CostSeries),'资产变化','F3');
  514. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'资产变化明细'},'资产变化','A5');
  515. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'Bar#'},'资产变化','A6');
  516. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',(1:length(data))','资产变化','A7');
  517. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'时间'},'资产变化','B6');
  518. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',cellstr(datestr(Date,'yyyy-mm-dd HH:MM:SS')),'资产变化','B7');
  519. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'多头保证金'},'资产变化','C6');
  520. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LongMargin,'资产变化','C7');
  521. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'空头保证金'},'资产变化','D6');
  522. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',ShortMargin,'资产变化','D7');
  523. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'可用资金'},'资产变化','E6');
  524. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',Cash,'资产变化','E7');
  525. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'动态权益'},'资产变化','F6');
  526. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',DynamicEquity,'资产变化','F7');
  527. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'静态权益'},'资产变化','G6');
  528. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',StaticEquity,'资产变化','G7');

  529. %% --图表分析--
  530. %画出布林带(部分)
  531. figure(1);
  532. candle(High(end-150:end),Low(end-150:end),Open(end-150:end),Close(end-150:end),'r');
  533. hold on;
  534. plot([MidLine(end-150:end)],'k');
  535. plot([UpperLine(end-150:end)],'g');
  536. plot([LowerLine(end-150:end)],'g');
  537. title('布林带(仅部分)');
  538. saveas(gcf,'E:\数量化金融\程序化交易\1布林带(仅部分).png');
  539. close all;

  540. %交易盈亏曲线及累计成本
  541. figure(2);
  542. subplot(2,1,1);
  543. area(1:RecLength,CumNetMargin(1:RecLength),'FaceColor','g');
  544. axis([1 RecLength min(CumNetMargin(1:RecLength)) max(CumNetMargin(1:RecLength))]);
  545. xlabel('交易次数');
  546. ylabel('交易盈亏(元)');
  547. title('交易盈亏曲线');

  548. subplot(2,1,2);
  549. plot(CumNetMargin(1:RecLength),'r','LineWidth',2);
  550. hold on;
  551. plot(cumsum(CostSeries(1:RecLength)),'b','LineWidth',2);
  552. axis([1 RecLength min(CumNetMargin(1:RecLength)) max(CumNetMargin(1:RecLength))]);
  553. xlabel('交易次数');
  554. ylabel('交易盈亏及成本(元)');
  555. legend('交易盈亏','累计成本','Location','NorthWest');
  556. hold off;
  557. saveas(gcf,'E:\数量化金融\程序化交易\2交易盈亏曲线.png');
  558. close all;

  559. %交易盈亏分布图
  560. figure(3)
  561. subplot(2,1,1);
  562. ans=NetMargin(1:RecLength);%正收益和负收益用不同的颜色表示
  563. ans(ans<0)=0;
  564. plot(ans,'r.');
  565. hold on;
  566. ans=NetMargin(1:RecLength);
  567. ans(ans>0)=0;
  568. plot(ans,'b.');
  569. xlabel('盈亏(元)');
  570. ylabel('交易次数');
  571. title('交易盈亏分布图');

  572. subplot(2,1,2);
  573. hist(NetMargin(1:RecLength),50);
  574. h = findobj(gca,'Type','patch');
  575. set(h,'FaceColor','r','EdgeColor','w')
  576. xlabel('频率');
  577. ylabel('盈亏分组');
  578. saveas(gcf,'E:\数量化金融\程序化交易\3交易盈亏分布图.png');
  579. close all;

  580. %权益曲线
  581. figure(4)
  582. plot(Date,DynamicEquity,'r','LineWidth',2);
  583. hold on;
  584. area(Date,DynamicEquity,'FaceColor','g');
  585. datetick('x',29);
  586. axis([Date(1) Date(end) min(DynamicEquity) max(DynamicEquity)]);
  587. xlabel('时间');
  588. ylabel('动态权益(元)');
  589. title('权益曲线图');
  590. hold off;
  591. saveas(gcf,'E:\数量化金融\程序化交易\4权益曲线图.png');
  592. close all;

  593. %仓位及回测比例
  594. figure(5);
  595. subplot(2,1,1);
  596. plot(Date,pos,'g');
  597. datetick('x',29);
  598. axis([Date(1) Date(end) min(pos) max(pos)]);
  599. xlabel('时间');
  600. ylabel('仓位');
  601. title('仓位状态(1-多头 0-不持仓 -1-空头)');

  602. subplot(2,1,2);
  603. plot(Date,BackRatio,'b');
  604. datetick('x',29);
  605. axis([Date(1) Date(end) min(BackRatio) max(BackRatio)]);
  606. xlabel('时间');
  607. ylabel('回撤比例');
  608. title(strcat('回撤比例(初始资金为:',num2str(DynamicEquity(1)),',开仓比例:',num2str(max(max(LongMargin),max(ShortMargin))/DynamicEquity(1)*100),'%',...
  609.     ',保证金比例:',num2str(MarginRatio*100),'%)'));
  610. saveas(gcf,'E:\数量化金融\程序化交易\5仓位及回测比例.png');
  611. close all;

  612. %多空对比
  613. figure(6)
  614. subplot(2,2,1);
  615. pie3([LotsWinLong LotsLoseLong],[1 0],{strcat('多头盈利手数:',num2str(LotsWinLong),'手,','占比:',num2str(LotsWinLong/(LotsWinLong+LotsLoseLong)*100),'%')...
  616.     ,strcat('多头亏损手数:',num2str(LotsLoseLong),'手,','占比:',num2str(LotsLoseLong/(LotsWinLong+LotsLoseLong)*100),'%')});

  617. subplot(2,2,2);
  618. pie3([WinLong abs(LoseLong)],[1 0],{strcat('多头总盈利:',num2str(WinLong),'元,','占比:',num2str(WinLong/(WinLong+abs(LoseLong))*100),'%')...
  619.     ,strcat('多头总亏损:',num2str(abs(LoseLong)),'元,','占比:',num2str(abs(LoseLong)/(WinLong+abs(LoseLong))*100),'%')});

  620. subplot(2,2,3);
  621. pie3([LotsWinShort LotsLoseShort],[1 0],{strcat('空头盈利手数:',num2str(LotsWinShort),'手,','占比:',num2str(LotsWinShort/(LotsWinShort+LotsLoseShort)*100),'%')...
  622. ,strcat('空头亏损手数:',num2str(LotsLoseShort),'手,','占比:',num2str(LotsLoseShort/(LotsWinShort+LotsLoseShort)*100),'%')});

  623. subplot(2,2,4);
  624. pie3([WinShort abs(LoseShort)],[1 0],{strcat('空头总盈利:',num2str(WinShort),'元,','占比:',num2str(WinShort/(WinShort+abs(LoseShort))*100),'%')...
  625.     ,strcat('空头总亏损:',num2str(abs(LoseShort)),'元,','占比:',num2str(abs(LoseShort)/(WinShort+abs(LoseShort))*100),'%')});
  626. saveas(gcf,'E:\数量化金融\程序化交易\6多空对比饼图.png');
  627. close all;

  628. %% 收益多周期统计
  629. figure(7);
  630. subplot(2,2,1);
  631. bar(Daily(2:end),DailyRet,'r','EdgeColor','r');
  632. datetick('x',29);
  633. axis([min(Daily(2:end)) max(Daily(2:end)) min(DailyRet) max(DailyRet)]);
  634. xlabel('时间');
  635. ylabel('日收益率');

  636. subplot(2,2,2);
  637. bar(Weekly(2:end),WeeklyRet,'r','EdgeColor','r');
  638. datetick('x',29);
  639. axis([min(Weekly(2:end)) max(Weekly(2:end)) min(WeeklyRet) max(WeeklyRet)]);
  640. xlabel('时间');
  641. ylabel('周收益率');

  642. subplot(2,2,3);
  643. bar(Monthly(2:end),MonthlyRet,'r','EdgeColor','r');
  644. datetick('x',28);
  645. axis([min(Monthly(2:end)) max(Monthly(2:end)) min(MonthlyRet) max(MonthlyRet)]);
  646. xlabel('时间');
  647. ylabel('月收益率');

  648. subplot(2,2,4);
  649. bar(Yearly(2:end),YearlyRet,'r','EdgeColor','r');
  650. datetick('x',10);
  651. axis([min(Yearly(2:end)) max(Yearly(2:end)) min(YearlyRet) max(YearlyRet)]);
  652. xlabel('时间');
  653. ylabel('年收益率');
  654. saveas(gcf,'E:\数量化金融\程序化交易\7收益多周期统计.png');
  655. close all;
复制代码



李洋老师的《量化投资:以MATLAB为工具》出版了,那才是学习MATLAB量化投资的干货,大家可以重点关注。。。。。。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:MATLAB atlab matla 策略回测 Lab 源代码 李洋

回帖推荐

遥远的生命 发表于19楼  查看完整内容

..................

离歌レ笑 发表于4楼  查看完整内容

鼓励原创资源!鼓励发帖共同探讨、交流!

weitingkoala 发表于3楼  查看完整内容

原文件有乱码,重新上传。
已有 9 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
文达公 + 1 + 1 + 1 精彩帖子
sfhsky + 60 + 3 + 3 精彩帖子
静水深流 + 20 精彩帖子
zl89 + 40 精彩帖子
zhdefei + 1 + 1 精彩帖子
fantuanxiaot + 1 + 1 + 1 + 1 精彩帖子
榄外人L + 1 + 1 + 1 热心帮助其他会员
狂热的爱好者 + 60 + 3 + 3 + 3 精彩帖子
离歌レ笑 + 60 + 5 + 5 + 5 精彩帖子

总评分: 经验 + 180  论坛币 + 61  学术水平 + 15  热心指数 + 15  信用等级 + 11   查看全部评分

本帖被以下文库推荐

沙发
洞庭古风 发表于 2014-7-21 21:49:50 |只看作者 |坛友微信交流群
做的真好,加油
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

使用道具

藤椅
weitingkoala 发表于 2014-7-21 22:04:20 |只看作者 |坛友微信交流群

原文件有乱码,重新上传。


BOLL_SYSTEM.rar (5.92 KB) 本附件包括:

  • BOLL_SYSTEM.m


已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
fantuanxiaot + 10 + 9 + 3 + 3 + 3 精彩帖子

总评分: 经验 + 10  论坛币 + 9  学术水平 + 3  热心指数 + 3  信用等级 + 3   查看全部评分

使用道具

板凳
离歌レ笑 在职认证  发表于 2014-7-21 22:06:19 |只看作者 |坛友微信交流群
鼓励原创资源!鼓励发帖共同探讨、交流!
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
fantuanxiaot + 20 + 10 + 1 + 1 + 1 观点有启发

总评分: 经验 + 20  论坛币 + 10  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

报纸
weitingkoala 发表于 2014-7-21 22:07:32 |只看作者 |坛友微信交流群
离歌レ笑 发表于 2014-7-21 22:06
鼓励原创资源!鼓励发帖共同探讨、交流!
原帖子附件代码有乱码,重新上传到了2楼,版主大人可以修改下吗
已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
fantuanxiaot + 10 + 5 + 1 + 1 + 1 精彩帖子

总评分: 经验 + 10  论坛币 + 5  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

地板
Clarence_Li 发表于 2014-7-21 22:10:02 来自手机 |只看作者 |坛友微信交流群
一直想学Matlab来着。LZ有好的入门教程推荐吗?
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

使用道具

7
weitingkoala 发表于 2014-7-21 22:11:52 |只看作者 |坛友微信交流群
Clarence_Li 发表于 2014-7-21 22:10
一直想学Matlab来着。LZ有好的入门教程推荐吗?
找几本基础教程,多看两遍,多操作下,入门很快
已有 1 人评分经验 论坛币 收起 理由
fantuanxiaot + 15 + 20 精彩帖子

总评分: 经验 + 15  论坛币 + 20   查看全部评分

使用道具

8
狂热的爱好者 学生认证  发表于 2014-7-21 22:25:18 |只看作者 |坛友微信交流群
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

使用道具

9
liuqi413 发表于 2014-7-21 22:38:12 来自手机 |只看作者 |坛友微信交流群
weitingkoala 发表于 2014-7-21 21:46
这是我之前的贴子《用Matlab模仿TB写了个回测模板,大家提提意见》(https://bbs.pinggu.org/thread-2933243 ...
很好
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

使用道具

10
xhjds 发表于 2014-7-21 22:44:48 |只看作者 |坛友微信交流群
谢谢分享!现在做量化的很多,但似乎在高校里没有开设相关的课,国内相关的书似乎也比较少。论坛里的给位朋友能不能推荐几本用matlab做量化分析的书??
已有 1 人评分论坛币 收起 理由
fantuanxiaot + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 03:58