搜索
人大经济论坛 附件下载

附件下载

所在主题:
文件名:  BOLL_SYSTEM.rar
资料下载链接地址: https://bbs.pinggu.org/a-1594098.html
本附件包括:
  • BOLL_SYSTEM.m
附件大小:
这是我之前的贴子《用Matlab模仿TB写了个回测模板,大家提提意见》(https://bbs.pinggu.org/thread-2933243-1-1.html)的源代码。代码中有一些不恰当的地方,由于自己比较懒,也没有去改。误导了大家,请大家见谅。
如果对这些函代码有疑问,可以和我交流
编写人:LianXiangbin
单位:东财,研究生
QQ:785674410
邮箱:785674410@qq.com


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

[/hide]代码如下:
[hide]
  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. if MarketPosition==0
  77. LongMargin(i)=0; %多头保证金
  78. ShortMargin(i)=0; %空头保证金
  79. StaticEquity(i)=StaticEquity(i-1); %静态权益
  80. DynamicEquity(i)=StaticEquity(i); %动态权益
  81. Cash(i)=DynamicEquity(i); %可用资金
  82. end
  83. if MarketPosition==1
  84. LongMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio;
  85. StaticEquity(i)=StaticEquity(i-1);
  86. DynamicEquity(i)=StaticEquity(i)+(Close(i)-OpenPosPrice(OpenPosNum))*TradingUnits*Lots;
  87. Cash(i)=DynamicEquity(i)-LongMargin(i);
  88. end
  89. if MarketPosition==-1
  90. ShortMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio;
  91. StaticEquity(i)=StaticEquity(i-1);
  92. DynamicEquity(i)=StaticEquity(i)+(OpenPosPrice(OpenPosNum)-Close(i))*TradingUnits*Lots;
  93. Cash(i)=DynamicEquity(i)-ShortMargin(i);
  94. end


  95. %开仓模块

  96. %开多头
  97. if MarketPosition~=1 && RocValue(i-1)>0 && High(i)>=UpperLine(i-1) %用i-1,避免未来函数
  98. %平空开多
  99. if MarketPosition==-1
  100. MarketPosition=1;
  101. ShortMargin(i)=0; %平空后空头保证金为0了
  102. MyEntryPrice(i)=UpperLine(i-1);
  103. if Open(i)>MyEntryPrice(i) %考虑是否跳空
  104. MyEntryPrice(i)=Open(i);
  105. end
  106. MyEntryPrice(i)=MyEntryPrice(i)+Slip*MinMove*PriceScale;%建仓价格(也是平空仓的价格)
  107. ClosePosNum=ClosePosNum+1;
  108. ClosePosPrice(ClosePosNum)=MyEntryPrice(i);%记录平仓价格
  109. CloseDate(ClosePosNum)=Date(i);%记录平仓时间
  110. OpenPosNum=OpenPosNum+1;
  111. OpenPosPrice(OpenPosNum)=MyEntryPrice(i);%记录开仓价格
  112. OpenDate(OpenPosNum)=Date(i);%记录开仓时间
  113. Type(OpenPosNum)=1; %方向为多头
  114. StaticEquity(i)=StaticEquity(i-1)+(OpenPosPrice(OpenPosNum-1)-ClosePosPrice(ClosePosNum))...
  115. *TradingUnits*Lots-OpenPosPrice(OpenPosNum-1)*TradingUnits*Lots*TradingCost...
  116. -ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平空仓时的静态权益
  117. DynamicEquity(i)=StaticEquity(i)+(Close(i)-OpenPosPrice(OpenPosNum))*TradingUnits*Lots;
  118. end
  119. %空仓开多
  120. if MarketPosition==0
  121. MarketPosition=1;
  122. MyEntryPrice(i)=UpperLine(i-1);
  123. if Open(i)>MyEntryPrice(i) %考虑是否跳空
  124. MyEntryPrice(i)=Open(i);
  125. end
  126. MyEntryPrice(i)=MyEntryPrice(i)+Slip*MinMove*PriceScale;%建仓价格
  127. OpenPosNum=OpenPosNum+1;
  128. OpenPosPrice(OpenPosNum)=MyEntryPrice(i);%记录开仓价格
  129. OpenDate(OpenPosNum)=Date(i);%记录开仓时间
  130. Type(OpenPosNum)=1; %方向为多头
  131. StaticEquity(i)=StaticEquity(i-1);
  132. DynamicEquity(i)=StaticEquity(i)+(Close(i)-OpenPosPrice(OpenPosNum))*TradingUnits*Lots;
  133. end
  134. LongMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio; %多头保证金
  135. Cash(i)=DynamicEquity(i)-LongMargin(i);
  136. end

  137. %开空头
  138. %平多开空
  139. if MarketPosition~=-1 && RocValue(i-1)<0 && Low(i)<=LowerLine(i-1)
  140. if MarketPosition==1
  141. MarketPosition=-1;
  142. LongMargin(i)=0; %平多后多头保证金为0了
  143. MyEntryPrice(i)=LowerLine(i-1);
  144. if Open(i)<MyEntryPrice(i)
  145. MyEntryPrice(i)=Open(i);
  146. end
  147. MyEntryPrice(i)=MyEntryPrice(i)-Slip*MinMove*PriceScale;%建仓价格(也是平多仓的价格)
  148. ClosePosNum=ClosePosNum+1;
  149. ClosePosPrice(ClosePosNum)=MyEntryPrice(i);%记录平仓价格
  150. CloseDate(ClosePosNum)=Date(i);%记录平仓时间
  151. OpenPosNum=OpenPosNum+1;
  152. OpenPosPrice(OpenPosNum)=MyEntryPrice(i);%记录开仓价格
  153. OpenDate(OpenPosNum)=Date(i);%记录开仓时间
  154. Type(OpenPosNum)=-1; %方向为空头
  155. StaticEquity(i)=StaticEquity(i-1)+(ClosePosPrice(ClosePosNum)-OpenPosPrice(OpenPosNum-1))...
  156. *TradingUnits*Lots-OpenPosPrice(OpenPosNum-1)*TradingUnits*Lots*TradingCost...
  157. -ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平多仓时的静态权益,算法参考TB
  158. DynamicEquity(i)=StaticEquity(i)+(OpenPosPrice(OpenPosNum)-Close(i))*TradingUnits*Lots;
  159. end
  160. %空仓开空
  161. if MarketPosition==0
  162. MarketPosition=-1;
  163. MyEntryPrice(i)=LowerLine(i-1);
  164. if Open(i)<MyEntryPrice(i)
  165. MyEntryPrice(i)=Open(i);
  166. end
  167. MyEntryPrice(i)=MyEntryPrice(i)-Slip*MinMove*PriceScale;
  168. OpenPosNum=OpenPosNum+1;
  169. OpenPosPrice(OpenPosNum)=MyEntryPrice(i);
  170. OpenDate(OpenPosNum)=Date(i);%记录开仓时间
  171. Type(OpenPosNum)=-1; %方向为空头
  172. StaticEquity(i)=StaticEquity(i-1);
  173. DynamicEquity(i)=StaticEquity(i)+(OpenPosPrice(OpenPosNum)-Close(i))*TradingUnits*Lots;
  174. end
  175. ShortMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio;
  176. Cash(i)=DynamicEquity(i)-ShortMargin(i);
  177. end

  178. %如果最后一个Bar有持仓,则以收盘价平掉
  179. if i==length(data)
  180. %平多
  181. if MarketPosition==1
  182. MarketPosition=0;
  183. LongMargin(i)=0;
  184. ClosePosNum=ClosePosNum+1;
  185. ClosePosPrice(ClosePosNum)=Close(i);%记录平仓价格
  186. CloseDate(ClosePosNum)=Date(i);%记录平仓时间
  187. StaticEquity(i)=StaticEquity(i-1)+(ClosePosPrice(ClosePosNum)-OpenPosPrice(OpenPosNum))...
  188. *TradingUnits*Lots-OpenPosPrice(OpenPosNum)*TradingUnits*Lots*TradingCost...
  189. -ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平多仓时的静态权益,算法参考TB
  190. DynamicEquity(i)=StaticEquity(i);%空仓时动态权益和静态权益相等
  191. Cash(i)=DynamicEquity(i); %空仓时可用资金等于动态权益
  192. end
  193. %平空
  194. if MarketPosition==-1
  195. MarketPosition=0;
  196. ShortMargin(i)=0;
  197. ClosePosNum=ClosePosNum+1;
  198. ClosePosPrice(ClosePosNum)=Close(i);
  199. CloseDate(ClosePosNum)=Date(i);
  200. StaticEquity(i)=StaticEquity(i-1)+(OpenPosPrice(OpenPosNum)-ClosePosPrice(ClosePosNum))...
  201. *TradingUnits*Lots-OpenPosPrice(OpenPosNum)*TradingUnits*Lots*TradingCost...
  202. -ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平空仓时的静态权益,算法参考TB
  203. DynamicEquity(i)=StaticEquity(i);%空仓时动态权益和静态权益相等
  204. Cash(i)=DynamicEquity(i); %空仓时可用资金等于动态权益
  205. end
  206. end
  207. pos(i)=MarketPosition;
  208. end

  209. %% -绩效计算--

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

  211. %净利润和收益率
  212. for i=1:RecLength

  213. %交易成本(建仓+平仓)
  214. CostSeries(i)=OpenPosPrice(i)*TradingUnits*Lots*TradingCost+ClosePosPrice(i)*TradingUnits*Lots*TradingCost;

  215. %净利润
  216. %多头建仓时
  217. if Type(i)==1
  218. NetMargin(i)=(ClosePosPrice(i)-OpenPosPrice(i))*TradingUnits*Lots-CostSeries(i);
  219. end
  220. %空头建仓时
  221. if Type(i)==-1
  222. NetMargin(i)=(OpenPosPrice(i)-ClosePosPrice(i))*TradingUnits*Lots-CostSeries(i);
  223. end
  224. %收益率
  225. RateOfReturn(i)=NetMargin(i)/(OpenPosPrice(i)*TradingUnits*Lots*MarginRatio);
  226. end

  227. %累计净利
  228. CumNetMargin=cumsum(NetMargin);

  229. %累计收益率
  230. CumRateOfReturn=cumsum(RateOfReturn);

  231. %回撤比例
  232. for i=1:length(data)
  233. c=max(DynamicEquity(1:i));
  234. if c==DynamicEquity(i)
  235. BackRatio(i)=0;
  236. else
  237. BackRatio(i)=(DynamicEquity(i)-c)/c;
  238. end
  239. end

  240. %日收益率
  241. Daily=Date(hour(Date)==9& minute(Date)==0 & second(Date)==0);
  242. DailyEquity=DynamicEquity(hour(Date)==9& minute(Date)==0 & second(Date)==0);
  243. DailyRet=tick2ret(DailyEquity);

  244. %周收益率
  245. WeeklyNum=weeknum(Daily); %weeknum返回是一年的第几周
  246. Weekly=[Daily((WeeklyNum(1:end-1)-WeeklyNum(2:end))~=0);Daily(end)];
  247. WeeklyEquity=[DailyEquity((WeeklyNum(1:end-1)-WeeklyNum(2:end))~=0);DailyEquity(end)];
  248. WeeklyRet=tick2ret(WeeklyEquity);

  249. %月收益率
  250. MonthNum=month(Daily);
  251. Monthly=[Daily((MonthNum(1:end-1)-MonthNum(2:end))~=0);Daily(end)];
  252. MonthlyEquity=[DailyEquity((MonthNum(1:end-1)-MonthNum(2:end))~=0);DailyEquity(end)];
  253. MonthlyRet=tick2ret(MonthlyEquity);

  254. %年收益率
  255. YearNum=year(Daily);
  256. Yearly=[Daily((YearNum(1:end-1)-YearNum(2:end))~=0);Daily(end)];
  257. YearlyEquity=[DailyEquity((YearNum(1:end-1)-YearNum(2:end))~=0);DailyEquity(end)];
  258. YearlyRet=tick2ret(YearlyEquity);

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

  265. %净利润
  266. ProfitTotal=sum(NetMargin);
  267. ProfitLong=sum(NetMargin(Type==1));
  268. ProfitShort=sum(NetMargin(Type==-1));
  269. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'净利润'},'交易汇总','A2');
  270. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',ProfitTotal,'交易汇总','B2');
  271. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',ProfitLong,'交易汇总','C2');
  272. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',ProfitShort,'交易汇总','D2');

  273. %总盈利
  274. WinTotal=sum(NetMargin(NetMargin>0));
  275. ans=NetMargin(Type==1);
  276. WinLong=sum(ans(ans>0));
  277. ans=NetMargin(Type==-1);
  278. WinShort=sum(ans(ans>0));
  279. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'总盈利'},'交易汇总','A3');
  280. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinTotal,'交易汇总','B3');
  281. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinLong,'交易汇总','C3');
  282. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinShort,'交易汇总','D3');

  283. %总亏损
  284. LoseTotal=sum(NetMargin(NetMargin<0));
  285. ans=NetMargin(Type==1);
  286. LoseLong=sum(ans(ans<0));
  287. ans=NetMargin(Type==-1);
  288. LoseShort=sum(ans(ans<0));
  289. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'总亏损'},'交易汇总','A4');
  290. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LoseTotal,'交易汇总','B4');
  291. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LoseLong,'交易汇总','C4');
  292. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LoseShort,'交易汇总','D4');

  293. %总盈利/总亏损
  294. WinTotalDLoseTotal=abs(WinTotal/LoseTotal);
  295. WinLongDLoseLong=abs(WinLong/LoseLong);
  296. WinShortDLoseShort=abs(WinShort/LoseShort);
  297. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'总盈利/总亏损'},'交易汇总','A5');
  298. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinTotalDLoseTotal,'交易汇总','B5');
  299. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinLongDLoseLong,'交易汇总','C5');
  300. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',WinShortDLoseShort,'交易汇总','D5');

  301. %交易手数
  302. LotsTotal=length(Type(Type~=0))*Lots;
  303. LotsLong=length(Type(Type==1))*Lots;
  304. LotsShort=length(Type(Type==-1))*Lots;
  305. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'交易手数'},'交易汇总','A7');
  306. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsTotal,'交易汇总','B7');
  307. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsLong,'交易汇总','C7');
  308. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsShort,'交易汇总','D7');

  309. %盈利手数
  310. LotsWinTotal=length(NetMargin(NetMargin>0))*Lots;
  311. ans=NetMargin(Type==1);
  312. LotsWinLong=length(ans(ans>0))*Lots;
  313. ans=NetMargin(Type==-1);
  314. LotsWinShort=length(ans(ans>0))*Lots;
  315. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'盈利手数'},'交易汇总','A8');
  316. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsWinTotal,'交易汇总','B8');
  317. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsWinLong,'交易汇总','C8');
  318. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsWinShort,'交易汇总','D8');

  319. %亏损手数
  320. LotsLoseTotal=length(NetMargin(NetMargin<0))*Lots;
  321. ans=NetMargin(Type==1);
  322. LotsLoseLong=length(ans(ans<0))*Lots;
  323. ans=NetMargin(Type==-1);
  324. LotsLoseShort=length(ans(ans<0))*Lots;
  325. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'亏损手数'},'交易汇总','A9');
  326. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsLoseTotal,'交易汇总','B9');
  327. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsLoseLong,'交易汇总','C9');
  328. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsLoseShort,'交易汇总','D9');

  329. %持平手数
  330. ans=NetMargin(Type==1);
  331. LotsDrawLong=length(ans(ans==0))*Lots;
  332. ans=NetMargin(Type==-1);
  333. LotsDrawShort=length(ans(ans==0))*Lots;
  334. LotsDrawTotal=LotsDrawLong+LotsDrawShort;
  335. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'持平手数'},'交易汇总','A10');
  336. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsDrawTotal,'交易汇总','B10');
  337. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsDrawLong,'交易汇总','C10');
  338. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsDrawShort,'交易汇总','D10');

  339. %盈利比率
  340. LotsWinTotalDLotsTotal=LotsWinTotal/LotsTotal;
  341. LotsWinLongDLotsLong=LotsWinLong/LotsLong;
  342. LotsWinShortDLotsShort=LotsWinShort/LotsShort;
  343. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'盈利比率'},'交易汇总','A11');
  344. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsWinTotalDLotsTotal,'交易汇总','B11');
  345. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsWinLongDLotsLong,'交易汇总','C11');
  346. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',LotsWinShortDLotsShort,'交易汇总','D11');

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

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

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

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

  367. %最大盈利
  368. MaxWinTotal=max(NetMargin(NetMargin>0));
  369. ans=NetMargin(Type==1);
  370. MaxWinLong=max(ans(ans>0));
  371. ans=NetMargin(Type==-1);
  372. MaxWinShort=max(ans(ans>0));
  373. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'最大盈利'},'交易汇总','A18');
  374. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxWinTotal,'交易汇总','B18');
  375. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxWinLong,'交易汇总','C18');
  376. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxWinShort,'交易汇总','D18');

  377. %最大亏损
  378. MaxLoseTotal=min(NetMargin(NetMargin<0));
  379. ans=NetMargin(Type==1);
  380. MaxLoseLong=min(ans(ans<0));
  381. ans=NetMargin(Type==-1);
  382. MaxLoseShort=min(ans(ans<0));
  383. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'最大亏损'},'交易汇总','A19');
  384. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxLoseTotal,'交易汇总','B19');
  385. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxLoseLong,'交易汇总','C19');
  386. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',MaxLoseShort,'交易汇总','D19');

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

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

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

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

  407. %交易成本合计
  408. CostTotal=sum(CostSeries);
  409. ans=CostSeries(Type==1);
  410. CostLong=sum(ans);
  411. ans=CostSeries(Type==-1);
  412. CostShort=sum(ans);
  413. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',{'交易成本合计'},'交易汇总','A25');
  414. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',CostTotal,'交易汇总','B25');
  415. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',CostLong,'交易汇总','C25');
  416. xlswrite('E:\数量化金融\程序化交易\测试报告.xls',CostShort,'交易汇总','D25');

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  533. %交易盈亏曲线及累计成本
  534. figure(2);
  535. subplot(2,1,1);
  536. area(1:RecLength,CumNetMargin(1:RecLength),'FaceColor','g');
  537. axis([1 RecLength min(CumNetMargin(1:RecLength)) max(CumNetMargin(1:RecLength))]);
  538. xlabel('交易次数');
  539. ylabel('交易盈亏(元)');
  540. title('交易盈亏曲线');

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

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

  565. subplot(2,1,2);
  566. hist(NetMargin(1:RecLength),50);
  567. h = findobj(gca,'Type','patch');
  568. set(h,'FaceColor','r','EdgeColor','w')
  569. xlabel('频率');
  570. ylabel('盈亏分组');
  571. saveas(gcf,'E:\数量化金融\程序化交易\3交易盈亏分布图.png');
  572. close all;

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

  586. %仓位及回测比例
  587. figure(5);
  588. subplot(2,1,1);
  589. plot(Date,pos,'g');
  590. datetick('x',29);
  591. axis([Date(1) Date(end) min(pos) max(pos)]);
  592. xlabel('时间');
  593. ylabel('仓位');
  594. title('仓位状态(1-多头 0-不持仓 -1-空头)');

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

  605. %多空对比
  606. figure(6)
  607. subplot(2,2,1);
  608. pie3([LotsWinLong LotsLoseLong],[1 0],{strcat('多头盈利手数:',num2str(LotsWinLong),'手,','占比:',num2str(LotsWinLong/(LotsWinLong+LotsLoseLong)*100),'%')...
  609. ,strcat('多头亏损手数:',num2str(LotsLoseLong),'手,','占比:',num2str(LotsLoseLong/(LotsWinLong+LotsLoseLong)*100),'%')});

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

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

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

  621. %% 收益多周期统计
  622. figure(7);
  623. subplot(2,2,1);
  624. bar(Daily(2:end),DailyRet,'r','EdgeColor','r');
  625. datetick('x',29);
  626. axis([min(Daily(2:end)) max(Daily(2:end)) min(DailyRet) max(DailyRet)]);
  627. xlabel('时间');
  628. ylabel('日收益率');

  629. subplot(2,2,2);
  630. bar(Weekly(2:end),WeeklyRet,'r','EdgeColor','r');
  631. datetick('x',29);
  632. axis([min(Weekly(2:end)) max(Weekly(2:end)) min(WeeklyRet) max(WeeklyRet)]);
  633. xlabel('时间');
  634. ylabel('周收益率');

  635. subplot(2,2,3);
  636. bar(Monthly(2:end),MonthlyRet,'r','EdgeColor','r');
  637. datetick('x',28);
  638. axis([min(Monthly(2:end)) max(Monthly(2:end)) min(MonthlyRet) max(MonthlyRet)]);
  639. xlabel('时间');
  640. ylabel('月收益率');

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


[/hide]

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



    熟悉论坛请点击新手指南
下载说明
1、论坛支持迅雷和网际快车等p2p多线程软件下载,请在上面选择下载通道单击右健下载即可。
2、论坛会定期自动批量更新下载地址,所以请不要浪费时间盗链论坛资源,盗链地址会很快失效。
3、本站为非盈利性质的学术交流网站,鼓励和保护原创作品,拒绝未经版权人许可的上传行为。本站如接到版权人发出的合格侵权通知,将积极的采取必要措施;同时,本站也将在技术手段和能力范围内,履行版权保护的注意义务。
(如有侵权,欢迎举报)
二维码

扫码加我 拉你入群

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

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

GMT+8, 2025-12-27 08:05