第一篇:基于MATLAB的策略回测
%% 简介:系统基于布林通道原理,是一个趋势追踪系统。% 入场条件:
%
ROC大于0且价格突破布林带上轨就开多仓; %
ROC小于0且价格跌破布林带下轨就开空仓; % 关键参数:
%
买卖滑点参数Slip %
布林带的周期数BollLength; %
布林带标准差的倍数Offset;%
ROC的周期数ROCLength;
%
跟踪止损算法的周期数ExitLength;
%%--提取数据--user=input('请输入数据库用户名:','s');password=input('请输入数据库密码:','s');commodity=input('请输入商品(如RB888):','s');Freq=input('请输入周期(如M5):','s');conna=database('Futures_matlab',user,password);cursor=exec(conna,strcat('select * from ',32,commodity,'_',Freq));%32是指空格的ASCLL码 cursor=fetch(cursor);data=cursor.Data;Date=datenum(data(:,1));
%日期时间 Open=cell2mat(data(:,2));
%开盘价 High=cell2mat(data(:,3));
%最高价 Low=cell2mat(data(:,4));
%最低价 Close=cell2mat(data(:,5));
%收盘价 Volume=cell2mat(data(:,6));
%成交量 OpenInterest=cell2mat(data(:,7));
%持仓量
%%--定义参数(常量)--
%策略参数
Slip=2;
%滑点
BollLength=50;
%布林线长度
Offset=1.25;
%布林线标准差倍数 ROCLength=30;
%ROC的周期数
%品种参数
MinMove=1;
%商品的最小变动量 PriceScale=1;
%商品的计数单位 TradingUnits=10;
%交易单位 Lots=1;
%交易手数 MarginRatio=0.07;
%保证金率
TradingCost=0.0003;
%交易费用设为成交金额的万分之三 RiskLess=0.035;
%无风险收益率(计算夏普比率时需要)
%%--定义变量--
%策略变量
UpperLine=zeros(length(data),1);
%上轨 LowerLine=zeros(length(data),1);
%下轨 MidLine=zeros(length(data),1);
%中间线
Std=zeros(length(data),1);
%标准差序列 RocValue=zeros(length(data),1);
%ROC值
%交易记录变量
MyEntryPrice=zeros(length(data),1);
%买卖价格
MarketPosition=0;
%仓位状态,-1表示持有空头,0表示无持仓,1表示持有多头
pos=zeros(length(data),1);
%记录仓位情况,-1表示持有空头,0表示无持仓,1表示持有多头
Type=zeros(length(data),1);
%买卖类型,1标示多头,-1标示空头 OpenPosPrice=zeros(length(data),1);
%记录建仓价格 ClosePosPrice=zeros(length(data),1);
%记录平仓价格
OpenPosNum=0;
%建仓价格序号 ClosePosNum=0;
%平仓价格序号 OpenDate=zeros(length(data),1);
%建仓时间 CloseDate=zeros(length(data),1);
%平仓时间 NetMargin=zeros(length(data),1);
%净利
CumNetMargin=zeros(length(data),1);
%累计净利 RateOfReturn=zeros(length(data),1);
%收益率
CumRateOfReturn=zeros(length(data),1);
%累计收益率 CostSeries=zeros(length(data),1);
%记录交易成本 BackRatio=zeros(length(data),1);
%记录回测比例
%记录资产变化变量
LongMargin=zeros(length(data),1);
%多头保证金 ShortMargin=zeros(length(data),1);
%空头保证金
Cash=repmat(1e6,length(data),1);
%可用资金,初始资金为10W DynamicEquity=repmat(1e6,length(data),1);
%动态权益,初始资金为10W StaticEquity=repmat(1e6,length(data),1);
%静态权益,初始资金为10W
%%--计算布林带和ROC--[UpperLine MidLine LowerLine]=BOLL(Close,BollLength,Offset,0);RocValue=ROC(Close,ROCLength);
%%--策略仿真--
for i=BollLength:length(data)
if MarketPosition==0
LongMargin(i)=0;
%多头保证金
ShortMargin(i)=0;
%空头保证金
StaticEquity(i)=StaticEquity(i-1);
%静态权益
DynamicEquity(i)=StaticEquity(i);
%动态权益
Cash(i)=DynamicEquity(i);
%可用资金
end
if MarketPosition==1
LongMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio;
StaticEquity(i)=StaticEquity(i-1);
DynamicEquity(i)=StaticEquity(i)+(Close(i)-OpenPosPrice(OpenPosNum))*TradingUnits*Lots;
Cash(i)=DynamicEquity(i)-LongMargin(i);
end
if MarketPosition==-1
ShortMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio;
StaticEquity(i)=StaticEquity(i-1);
DynamicEquity(i)=StaticEquity(i)+(OpenPosPrice(OpenPosNum)-Close(i))*TradingUnits*Lots;
Cash(i)=DynamicEquity(i)-ShortMargin(i);
end
%开仓模块
%开多头
if MarketPosition~=1 && RocValue(i-1)>0 && High(i)>=UpperLine(i-1)
%用i-1,避免未来函数
%平空开多
if MarketPosition==-1
MarketPosition=1;
ShortMargin(i)=0;
%平空后空头保证金为0了
MyEntryPrice(i)=UpperLine(i-1);
if Open(i)>MyEntryPrice(i)
%考虑是否跳空
MyEntryPrice(i)=Open(i);
end
MyEntryPrice(i)=MyEntryPrice(i)+Slip*MinMove*PriceScale;%建仓价格(也是平空仓的价格)
ClosePosNum=ClosePosNum+1;
ClosePosPrice(ClosePosNum)=MyEntryPrice(i);%记录平仓价格
CloseDate(ClosePosNum)=Date(i);%记录平仓时间
OpenPosNum=OpenPosNum+1;
OpenPosPrice(OpenPosNum)=MyEntryPrice(i);%记录开仓价格
OpenDate(OpenPosNum)=Date(i);%记录开仓时间
Type(OpenPosNum)=1;
%方向为多头
StaticEquity(i)=StaticEquity(i-1)+(OpenPosPrice(OpenPosNum-1)-ClosePosPrice(ClosePosNum))...*TradingUnits*Lots-OpenPosPrice(OpenPosNum-1)*TradingUnits*Lots*TradingCost...-ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平空仓时的静态权益
DynamicEquity(i)=StaticEquity(i)+(Close(i)-OpenPosPrice(OpenPosNum))*TradingUnits*Lots;
end
%空仓开多
if MarketPosition==0
MarketPosition=1;
MyEntryPrice(i)=UpperLine(i-1);
if Open(i)>MyEntryPrice(i)
%考虑是否跳空
MyEntryPrice(i)=Open(i);
end
MyEntryPrice(i)=MyEntryPrice(i)+Slip*MinMove*PriceScale;%建仓价格
OpenPosNum=OpenPosNum+1;
OpenPosPrice(OpenPosNum)=MyEntryPrice(i);%记录开仓价格
OpenDate(OpenPosNum)=Date(i);%记录开仓时间
Type(OpenPosNum)=1;
%方向为多头
StaticEquity(i)=StaticEquity(i-1);
DynamicEquity(i)=StaticEquity(i)+(Close(i)-OpenPosPrice(OpenPosNum))*TradingUnits*Lots;
end
LongMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio;
%多头保证金
Cash(i)=DynamicEquity(i)-LongMargin(i);
end
%开空头
%平多开空
if MarketPosition~=-1 && RocValue(i-1)<0 && Low(i)<=LowerLine(i-1)
if MarketPosition==1
MarketPosition=-1;
LongMargin(i)=0;
%平多后多头保证金为0了
MyEntryPrice(i)=LowerLine(i-1);
if Open(i) MyEntryPrice(i)=Open(i); end MyEntryPrice(i)=MyEntryPrice(i)-Slip*MinMove*PriceScale;%建仓价格(也是平多仓的价格) ClosePosNum=ClosePosNum+1; ClosePosPrice(ClosePosNum)=MyEntryPrice(i);%记录平仓价格 CloseDate(ClosePosNum)=Date(i);%记录平仓时间 OpenPosNum=OpenPosNum+1; OpenPosPrice(OpenPosNum)=MyEntryPrice(i);%记录开仓价格 OpenDate(OpenPosNum)=Date(i);%记录开仓时间 Type(OpenPosNum)=-1; %方向为空头 StaticEquity(i)=StaticEquity(i-1)+(ClosePosPrice(ClosePosNum)-OpenPosPrice(OpenPosNum-1))...*TradingUnits*Lots-OpenPosPrice(OpenPosNum-1)*TradingUnits*Lots*TradingCost...-ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平多仓时的静态权益,算法参考TB DynamicEquity(i)=StaticEquity(i)+(OpenPosPrice(OpenPosNum)-Close(i))*TradingUnits*Lots; end %空仓开空 if MarketPosition==0 MarketPosition=-1; MyEntryPrice(i)=LowerLine(i-1); if Open(i) MyEntryPrice(i)=Open(i); end MyEntryPrice(i)=MyEntryPrice(i)-Slip*MinMove*PriceScale; OpenPosNum=OpenPosNum+1; OpenPosPrice(OpenPosNum)=MyEntryPrice(i); OpenDate(OpenPosNum)=Date(i);%记录开仓时间 Type(OpenPosNum)=-1; %方向为空头 StaticEquity(i)=StaticEquity(i-1); DynamicEquity(i)=StaticEquity(i)+(OpenPosPrice(OpenPosNum)-Close(i))*TradingUnits*Lots; end ShortMargin(i)=Close(i)*Lots*TradingUnits*MarginRatio; Cash(i)=DynamicEquity(i)-ShortMargin(i); end %如果最后一个Bar有持仓,则以收盘价平掉 if i==length(data) %平多 if MarketPosition==1 MarketPosition=0; LongMargin(i)=0; ClosePosNum=ClosePosNum+1; ClosePosPrice(ClosePosNum)=Close(i);%记录平仓价格 CloseDate(ClosePosNum)=Date(i);%记录平仓时间 StaticEquity(i)=StaticEquity(i-1)+(ClosePosPrice(ClosePosNum)-OpenPosPrice(OpenPosNum))...*TradingUnits*Lots-OpenPosPrice(OpenPosNum)*TradingUnits*Lots*TradingCost...-ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平多仓时的静态权益,算法参考TB DynamicEquity(i)=StaticEquity(i);%空仓时动态权益和静态权益相等 Cash(i)=DynamicEquity(i);%空仓时可用资金等于动态权益 end %平空 if MarketPosition==-1 MarketPosition=0; ShortMargin(i)=0; ClosePosNum=ClosePosNum+1; ClosePosPrice(ClosePosNum)=Close(i); CloseDate(ClosePosNum)=Date(i); StaticEquity(i)=StaticEquity(i-1)+(OpenPosPrice(OpenPosNum)-ClosePosPrice(ClosePosNum))...*TradingUnits*Lots-OpenPosPrice(OpenPosNum)*TradingUnits*Lots*TradingCost...-ClosePosPrice(ClosePosNum)*TradingUnits*Lots*TradingCost;%平空仓时的静态权益,算法参考TB DynamicEquity(i)=StaticEquity(i);%空仓时动态权益和静态权益相等 Cash(i)=DynamicEquity(i);%空仓时可用资金等于动态权益 end end pos(i)=MarketPosition;end %%-绩效计算-- RecLength=ClosePosNum;%记录交易长度 %净利润和收益率 for i=1:RecLength %交易成本(建仓+平仓) CostSeries(i)=OpenPosPrice(i)*TradingUnits*Lots*TradingCost+ClosePosPrice(i)*TradingUnits*Lots*TradingCost; %净利润 %多头建仓时 if Type(i)==1 NetMargin(i)=(ClosePosPrice(i)-OpenPosPrice(i))*TradingUnits*Lots-CostSeries(i); end %空头建仓时 if Type(i)==-1 NetMargin(i)=(OpenPosPrice(i)-ClosePosPrice(i))*TradingUnits*Lots-CostSeries(i); end %收益率 RateOfReturn(i)=NetMargin(i)/(OpenPosPrice(i)*TradingUnits*Lots*MarginRatio);end %累计净利 CumNetMargin=cumsum(NetMargin); %累计收益率 CumRateOfReturn=cumsum(RateOfReturn); %回撤比例 for i=1:length(data) c=max(DynamicEquity(1:i)); if c==DynamicEquity(i) BackRatio(i)=0; else BackRatio(i)=(DynamicEquity(i)-c)/c; end end %日收益率 Daily=Date(hour(Date)==9 & minute(Date)==0 & second(Date)==0);DailyEquity=DynamicEquity(hour(Date)==9 & minute(Date)==0 & second(Date)==0);DailyRet=tick2ret(DailyEquity); %周收益率 WeeklyNum=weeknum(Daily); %weeknum返回是一年的第几周 Weekly=[Daily((WeeklyNum(1:end-1)-WeeklyNum(2:end))~=0);Daily(end)];WeeklyEquity=[DailyEquity((WeeklyNum(1:end-1)-WeeklyNum(2:end))~=0);DailyEquity(end)];WeeklyRet=tick2ret(WeeklyEquity); %月收益率 MonthNum=month(Daily);Monthly=[Daily((MonthNum(1:end-1)-MonthNum(2:end))~=0);Daily(end)];MonthlyEquity=[DailyEquity((MonthNum(1:end-1)-MonthNum(2:end))~=0);DailyEquity(end)];MonthlyRet=tick2ret(MonthlyEquity); %年收益率 YearNum=year(Daily);Yearly=[Daily((YearNum(1:end-1)-YearNum(2:end))~=0);Daily(end)];YearlyEquity=[DailyEquity((YearNum(1:end-1)-YearNum(2:end))~=0);DailyEquity(end)];YearlyRet=tick2ret(YearlyEquity); %% 自动创建测试报告(输出到excel)%% 输出交易汇总 xlswrite('E:数量化金融程序化交易测试报告.xls',{'统计指标'},'交易汇总','A1');xlswrite('E:数量化金融程序化交易测试报告.xls',{'全部交易'},'交易汇总','B1');xlswrite('E:数量化金融程序化交易测试报告.xls',{'多头'},'交易汇总','C1');xlswrite('E:数量化金融程序化交易测试报告.xls',{'空头'},'交易汇总','D1'); %净利润 ProfitTotal=sum(NetMargin);ProfitLong=sum(NetMargin(Type==1));ProfitShort=sum(NetMargin(Type==-1));xlswrite('E:数量化金融程序化交易测试报告.xls',{'净利润'},'交易汇总','A2');xlswrite('E:数量化金融程序化交易测试报告.xls',ProfitTotal,'交易汇总','B2');xlswrite('E:数量化金融程序化交易测试报告.xls',ProfitLong,'交易汇总','C2');xlswrite('E:数量化金融程序化交易测试报告.xls',ProfitShort,'交易汇总','D2'); %总盈利 WinTotal=sum(NetMargin(NetMargin>0));ans=NetMargin(Type==1);WinLong=sum(ans(ans>0));ans=NetMargin(Type==-1);WinShort=sum(ans(ans>0));xlswrite('E:数量化金融程序化交易测试报告.xls',{'总盈利'},'交易汇总','A3');xlswrite('E:数量化金融程序化交易测试报告.xls',WinTotal,'交易汇总','B3');xlswrite('E:数量化金融程序化交易测试报告.xls',WinLong,'交易汇总','C3');xlswrite('E:数量化金融程序化交易测试报告.xls',WinShort,'交易汇总','D3'); %总亏损 LoseTotal=sum(NetMargin(NetMargin<0));ans=NetMargin(Type==1);LoseLong=sum(ans(ans<0));ans=NetMargin(Type==-1);LoseShort=sum(ans(ans<0));xlswrite('E:数量化金融程序化交易测试报告.xls',{'总亏损'},'交易汇总','A4');xlswrite('E:数量化金融程序化交易测试报告.xls',LoseTotal,'交易汇总','B4');xlswrite('E:数量化金融程序化交易测试报告.xls',LoseLong,'交易汇总','C4');xlswrite('E:数量化金融程序化交易测试报告.xls',LoseShort,'交易汇总','D4'); %总盈利/总亏损 WinTotalDLoseTotal=abs(WinTotal/LoseTotal);WinLongDLoseLong=abs(WinLong/LoseLong);WinShortDLoseShort=abs(WinShort/LoseShort);xlswrite('E:数量化金融程序化交易测试报告.xls',{'总盈利/总亏损'},'交易汇总','A5');xlswrite('E:数量化金融程序化交易测试报告.xls',WinTotalDLoseTotal,'交易汇总','B5');xlswrite('E:数量化金融程序化交易测试报告.xls',WinLongDLoseLong,'交易汇总','C5');xlswrite('E:数量化金融程序化交易测试报告.xls',WinShortDLoseShort,'交易汇总','D5'); %交易手数 LotsTotal=length(Type(Type~=0))*Lots;LotsLong=length(Type(Type==1))*Lots;LotsShort=length(Type(Type==-1))*Lots;xlswrite('E:数量化金融程序化交易测试报告.xls',{'交易手数'},'交易汇总','A7');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsTotal,'交易汇总','B7');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsLong,'交易汇总','C7');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsShort,'交易汇总','D7'); %盈利手数 LotsWinTotal=length(NetMargin(NetMargin>0))*Lots;ans=NetMargin(Type==1);LotsWinLong=length(ans(ans>0))*Lots;ans=NetMargin(Type==-1);LotsWinShort=length(ans(ans>0))*Lots;xlswrite('E:数量化金融程序化交易测试报告.xls',{'盈利手数'},'交易汇总','A8');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsWinTotal,'交易汇总','B8');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsWinLong,'交易汇总','C8');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsWinShort,'交易汇总','D8'); %亏损手数 LotsLoseTotal=length(NetMargin(NetMargin<0))*Lots;ans=NetMargin(Type==1);LotsLoseLong=length(ans(ans<0))*Lots;ans=NetMargin(Type==-1);LotsLoseShort=length(ans(ans<0))*Lots;xlswrite('E:数量化金融程序化交易测试报告.xls',{'亏损手数'},'交易汇总','A9');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsLoseTotal,'交易汇总','B9');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsLoseLong,'交易汇总','C9');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsLoseShort,'交易汇总','D9'); %持平手数 ans=NetMargin(Type==1);LotsDrawLong=length(ans(ans==0))*Lots;ans=NetMargin(Type==-1);LotsDrawShort=length(ans(ans==0))*Lots;LotsDrawTotal=LotsDrawLong+LotsDrawShort;xlswrite('E:数量化金融程序化交易测试报告.xls',{'持平手数'},'交易汇总','A10');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsDrawTotal,'交易汇总','B10');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsDrawLong,'交易汇总','C10');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsDrawShort,'交易汇总','D10'); %盈利比率 LotsWinTotalDLotsTotal=LotsWinTotal/LotsTotal;LotsWinLongDLotsLong=LotsWinLong/LotsLong;LotsWinShortDLotsShort=LotsWinShort/LotsShort;xlswrite('E:数量化金融程序化交易测试报告.xls',{'盈利比率'},'交易汇总','A11');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsWinTotalDLotsTotal,'交易汇总','B11');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsWinLongDLotsLong,'交易汇总','C11');xlswrite('E:数量化金融程序化交易测试报告.xls',LotsWinShortDLotsShort,'交易汇总','D11'); %平均利润 xlswrite('E:数量化金融程序化交易测试报告.xls',{'平均利润(净利润/交易手数)'},'交易汇总','A13');xlswrite('E:数量化金融程序化交易测试报告.xls',ProfitTotal/LotsTotal,'交易汇总','B13');xlswrite('E:数量化金融程序化交易测试报告.xls',ProfitLong/LotsLong,'交易汇总','C13');xlswrite('E:数量化金融程序化交易测试报告.xls',ProfitShort/LotsShort,'交易汇总','D13'); %平均盈利 xlswrite('E:数量化金融程序化交易测试报告.xls',{'平均盈利(总盈利金额/盈利交易手数)'},'交易汇总','A14');xlswrite('E:数量化金融程序化交易测试报告.xls',WinTotal/LotsWinTotal,'交易汇总','B14');xlswrite('E:数量化金融程序化交易测试报告.xls',WinLong/LotsWinLong,'交易汇总','C14');xlswrite('E:数量化金融程序化交易测试报告.xls',WinShort/LotsWinShort,'交易汇总','D14'); %平均亏损 xlswrite('E:数量化金融程序化交易测试报告.xls',{'平均亏损(总亏损金额/亏损交易手数)'},'交易汇总','A15');xlswrite('E:数量化金融程序化交易测试报告.xls',LoseTotal/LotsLoseTotal,'交易汇总','B15');xlswrite('E:数量化金融程序化交易测试报告.xls',LoseLong/LotsLoseLong,'交易汇总','C15');xlswrite('E:数量化金融程序化交易测试报告.xls',LoseShort/LotsLoseShort,'交易汇总','D15'); %平均盈利/平均亏损 xlswrite('E:数量化金融程序化交易测试报告.xls',{'平均盈利/平均亏损'},'交易汇总','A16');xlswrite('E:数量化金融程序化交易测试报告.xls',abs((WinTotal/LotsWinTotal)/(LoseTotal/LotsLoseTotal)),'交易汇总','B16');xlswrite('E:数量化金融程序化交易测试报告.xls',abs((WinLong/LotsWinLong)/(LoseLong/LotsLoseLong)),'交易汇总','C16');xlswrite('E:数量化金融程序化交易测告.xls',abs((WinShort/LotsWinShort)/(LoseShort/LotsLoseShort)),'交易汇总','D16'); %最大盈利 MaxWinTotal=max(NetMargin(NetMargin>0));ans=NetMargin(Type==1);MaxWinLong=max(ans(ans>0));ans=NetMargin(Type==-1);MaxWinShort=max(ans(ans>0)); 试报xlswrite('E:数量化金融程序化交易测试报告.xls',{'最大盈利'},'交易汇总','A18');xlswrite('E:数量化金融程序化交易测试报告.xls',MaxWinTotal,'交易汇总','B18');xlswrite('E:数量化金融程序化交易测试报告.xls',MaxWinLong,'交易汇总','C18');xlswrite('E:数量化金融程序化交易测试报告.xls',MaxWinShort,'交易汇总','D18'); %最大亏损 MaxLoseTotal=min(NetMargin(NetMargin<0));ans=NetMargin(Type==1);MaxLoseLong=min(ans(ans<0));ans=NetMargin(Type==-1);MaxLoseShort=min(ans(ans<0));xlswrite('E:数量化金融程序化交易测试报告.xls',{'最大亏损'},'交易汇总','A19');xlswrite('E:数量化金融程序化交易测试报告.xls',MaxLoseTotal,'交易汇总','B19');xlswrite('E:数量化金融程序化交易测试报告.xls',MaxLoseLong,'交易汇总','C19');xlswrite('E:数量化金融程序化交易测试报告.xls',MaxLoseShort,'交易汇总','D19'); %最大盈利/总盈利 xlswrite('E:数量化金融程序化交易测试报告.xls',{'最大盈利/总盈利'},'交易汇总','A20');xlswrite('E:数量化金融程序化交易测试报告.xls',MaxWinTotal/WinTotal,'交易汇总','B20');xlswrite('E:数量化金融程序化交易测试报告.xls',MaxWinLong/WinLong,'交易汇总','C20');xlswrite('E:数量化金融程序化交易测试报告.xls',MaxWinShort/WinShort,'交易汇总','D20'); %最大亏损/总亏损 xlswrite('E:数量化金融程序化交易测试报告.xls',{'最大亏损/总亏损'},'交易汇总','A21');xlswrite('E:数量化金融程序化交易测试报告.xls',MaxLoseTotal/LoseTotal,'交易汇总','B21');xlswrite('E:数量化金融程序化交易测试报告.xls',MaxLoseLong/LoseLong,'交易汇总','C21');xlswrite('E:数量化金融程序化交易测试报告.xls',MaxLoseShort/LoseShort,'交易汇总','D21'); %净利润/最大亏损 xlswrite('E:数量化金融程序化交易测试报告.xls',{'净利润/最大亏损'},'交易汇总','A22');xlswrite('E:数量化金融程序化交易测试报告.xls',ProfitTotal/MaxLoseTotal,'交易汇总','B22');xlswrite('E:数量化金融程序化交易测试报告.xls',ProfitLong/MaxLoseLong,'交易汇总','C22');xlswrite('E:数量化金融程序化交易测试报告.xls',ProfitShort/MaxLoseShort,'交易汇总','D22'); %最大使用资金 xlswrite('E:数量化金融程序化交易测试报告.xls',{'最大使用资金'},'交易汇总','A24');xlswrite('E:数量化金融程序化交易测试报告.xls',max(max(LongMargin),max(ShortMargin)),'交易汇总','B24');xlswrite('E:数量化金融程序化交易测试报告.xls',max(LongMargin),'交易汇总','C24');xlswrite('E:数量化金融程序化交易测试报告.xls',max(ShortMargin),'交易汇总','D24'); %交易成本合计 CostTotal=sum(CostSeries);ans=CostSeries(Type==1);CostLong=sum(ans);ans=CostSeries(Type==-1);CostShort=sum(ans);xlswrite('E:数量化金融程序化交易测试报告.xls',{'交易成本合计'},'交易汇总','A25');xlswrite('E:数量化金融程序化交易测试报告.xls',CostTotal,'交易汇总','B25');xlswrite('E:数量化金融程序化交易测试报告.xls',CostLong,'交易汇总','C25');xlswrite('E:数量化金融程序化交易测试报告.xls',CostShort,'交易汇总','D25'); %测试时间范围 xlswrite('E:数量化金融程序化交易测试报告.xls',{'测试时间范围'},'交易汇总','F2');xlswrite('E:数量化金融程序化交易测试报告.xls',cellstr(strcat(datestr(Date(1),'yyyy-mm-dd HH:MM:SS'),'-',datestr(Date(end),'yyyy-mm-dd HH:MM:SS'))),'交易汇总','G2'); %总交易时间 xlswrite('E:数量化金融程序化交易测试报告.xls',{'测试天数'},'交易汇总','F3');xlswrite('E:数量化金融程序化交易测试报告.xls',round(Date(end)-Date(1)),'交易汇总','G3'); %持仓时间比例 xlswrite('E:数量化金融程序化交易测试报告.xls',{'持仓时间比例'},'交易汇总','F4');xlswrite('E:数量化金融程序化交易测试报告.xls',length(pos(pos~=0))/length(data),'交易汇总','G4'); %持仓时间 xlswrite('E:数量化金融程序化交易测试报告.xls',{'持仓时间(天)'},'交易汇总','F5');HoldingDays=round(round(Date(end)-Date(1))*(length(pos(pos~=0))/length(data)));%持仓时间 xlswrite('E:数量化金融程序化交易测试报告.xls',HoldingDays,'交易汇总','G5'); %收益率 xlswrite('E:数量化金融程序化交易测试报告.xls',{'收益率(%)'},'交易汇总','F7');xlswrite('E:数量化金融程序化交易测试报告.xls',(DynamicEquity(end)-DynamicEquity(1))/DynamicEquity(1)*100,'交易汇总','G7'); %有效收益率 xlswrite('E:数量化金融程序化交易测试报告.xls',{'有效收益率(%)'},'交易汇总','F8');TrueRatOfRet=(DynamicEquity(end)-DynamicEquity(1))/max(max(LongMargin),max(ShortMargin));xlswrite('E:数量化金融程序化交易测试报告.xls',TrueRatOfRet*100,'交易汇总','G8'); %年度收益率(按365天算)xlswrite('E:数量化金融程序化交易测试报告.xls',{'年化收益率(按365天算,%)'},'交易汇总','F9');xlswrite('E:数量化金融程序化交易测试报告.xls',(1+TrueRatOfRet)^(1/(HoldingDays/365))*100,'交易汇总','G9'); %年度收益率(按240天算)xlswrite('E:数量化金融程序化交易测试报告.xls',{'年度收益率(按240天算,%)'},'交易汇总','F10');xlswrite('E:数量化金融程序化交易告.xls',(1+TrueRatOfRet)^(1/(HoldingDays/240))*100,'交易汇总','G10'); 测 试 报%% 年度收益率(按日算)xlswrite('E:数量化金融程序化交易测试报告.xls',{'年度收益率(按日算,%)'},'交易汇总','F11');xlswrite('E:数量化金融程序化交易测试报告.xls',mean(DailyRet)*365*100,'交易汇总','G11'); %年度收益率(按周算)xlswrite('E:数量化金融程序化交易测试报告.xls',{'年度收益率(按周算,%)'},'交易汇总','F12');xlswrite('E:数量化金融程序化交易测试报告.xls',mean(WeeklyRet)*52*100,'交易汇总','G12'); %年度收益率(按月算)xlswrite('E:数量化金融程序化交易测试报告.xls',{'年度收益率(按月算,%)'},'交易汇总','F13');xlswrite('E:数量化金融程序化交易测试报告.xls',mean(MonthlyRet)*12*100,'交易汇总','G13'); %夏普比率(按日算)xlswrite('E:数量化金融程序化交易测试报告.xls',{'夏普比率(按日算,%)'},'交易汇总','F14');xlswrite('E:数量化金融程序化交易测试报告.xls',(mean(DailyRet)*365-RiskLess)/(std(DailyRet)*sqrt(365)),'交易汇总','G14'); %夏普比率(按周算)xlswrite('E:数量化金融程序化交易测试报告.xls',{'夏普比率(按周算,%)'},'交易汇总','F15');xlswrite('E:数量化金融程序化交易测试报告.xls',(mean(WeeklyRet)*52-RiskLess)/(std(WeeklyRet)*sqrt(52)),'交易汇总','G15'); %夏普比率(按月算)xlswrite('E:数量化金融程序化交易测试报告.xls',{'夏普比率(按月算,%)'},'交易汇总','F16');xlswrite('E:数量化金融程序化交易测试报告.xls',(mean(MonthlyRet)*12-RiskLess)/(std(MonthlyRet)*sqrt(12)),'交易汇总','G16'); %最大回撤比例 xlswrite('E:数量化金融程序化交易测试报告.xls',{'最大回撤比例(%)'},'交易汇总','F17');xlswrite('E:数量化金融程序化交易测试报告.xls',abs(min(BackRatio))*100,'交易汇总','G17'); %% 输出交易记录 xlswrite('E:数量化金融程序化交易测试报告.xls',{'#'},'交易记录','A1');xlswrite('E:数量化金融程序化交易测试报告.xls',(1:RecLength)','交易记录','A2');xlswrite('E:数量化金融程序化交易测试报告.xls',{'类型'},'交易记录','B1');xlswrite('E:数量化金融程序化交易测试报告.xls',Type(1:RecLength),'交易记录','B2');xlswrite('E:数量化金融程序化交易测试报告.xls',{'商品'},'交易记录','C1');xlswrite('E:数量化金融程序化交易测试报告.xls',cellstr(repmat(commodity,RecLength,1)),'交易记录','C2');xlswrite('E:数量化金融程序化交易测试报告.xls',{'周期'},'交易记录','D1');xlswrite('E:数量化金融程序化交易测试报告.xls',cellstr(repmat(Freq,RecLength,1)),'交易记录','D2');xlswrite('E:数量化金融程序化交易测试报告.xls',{'建仓时间'},'交易记录','E1');xlswrite('E:数量化金融程序化交易测试报告.xls',cellstr(datestr(OpenDate(1:RecLength),'yyyy-mm-dd HH:MM:SS')),'交易记录','E2');xlswrite('E:数量化金融程序化交易测试报告.xls',{'建仓价格'},'交易记录','F1');xlswrite('E:数量化金融程序化交易测试报告.xls',OpenPosPrice(1:RecLength),'交易记录','F2');xlswrite('E:数量化金融程序化交易测试报告.xls',{'平仓时间'},'交易记录','G1');xlswrite('E:数量化金融程序化交易测试报告.xls',cellstr(datestr(CloseDate(1:RecLength),'yyyy-mm-dd HH:MM:SS')),'交易记录','G2');xlswrite('E:数量化金融程序化交易测试报告.xls',{'平仓价格'},'交易记录','H1');xlswrite('E:数量化金融程序化交易测试报告.xls',ClosePosPrice(1:RecLength),'交易记录','H2');xlswrite('E:数量化金融程序化交易测试报告.xls',{'数量'},'交易记录','I1');xlswrite('E:数量化金融程序化交易测试报告.xls',repmat(Lots,RecLength,1),'交易记录','I2');xlswrite('E:数量化金融程序化交易测试报告.xls',{'交易成本'},'交易记录','J1');xlswrite('E:数量化金融程序化交易测试报告.xls',CostSeries(1:RecLength),'交易记录','J2');xlswrite('E:数量化金融程序化交易测试报告.xls',{'净利'},'交易记录','K1');xlswrite('E:数量化金融程序化交易测试报告.xls',NetMargin(1:RecLength),'交易记录','K2');xlswrite('E:数量化金融程序化交易测试报告.xls',{'累计净利'},'交易记录','L1');xlswrite('E:数量化金融程序化交易测试报告.xls',CumNetMargin(1:RecLength),'交易记录','L2');xlswrite('E:数量化金融程序化交易测试报告.xls',{'收益率'},'交易记录','M1');xlswrite('E:数量化金融程序化交易测试报告.xls',RateOfReturn(1:RecLength),'交易记录','M2');xlswrite('E:数量化金融程序化交易测试报告.xls',{'累计收益率'},'交易记录','N1');xlswrite('E:数量化金融程序化交易测试报告.xls',CumRateOfReturn(1:RecLength),'交易记录','N2');%% 输出资产变化 xlswrite('E:数量化金融程序化交易测试报告.xls',{'资产概要'},'资产变化','A1');xlswrite('E:数量化金融程序化交易测试报告.xls',{'起初资产'},'资产变化','A2');xlswrite('E:数量化金融程序化交易测试报告.xls',StaticEquity(1),'资产变化','A3');xlswrite('E:数量化金融程序化交易测试报告.xls',{'期末资产'},'资产变化','B2');xlswrite('E:数量化金融程序化交易测试报告.xls',StaticEquity(end),'资产变化','B3');xlswrite('E:数量化金融程序化交易测试报告.xls',{'交易盈亏'},'资产变化','C2');xlswrite('E:数量化金融程序化交易测试报告.xls',sum(NetMargin),'资产变化','C3');xlswrite('E:数量化金融程序化交易测试报告.xls',{'最大资产'},'资产变化','D2');xlswrite('E:数量化金融程序化交易测试报告.xls',max(DynamicEquity),'资产变化','D3');%依据TB xlswrite('E:数量化金融程序化交易测试报告.xls',{'最小资产'},'资产变化','E2');xlswrite('E:数量化金融程序化交易测试报告.xls',min(DynamicEquity),'资产变化','E3');xlswrite('E:数量化金融程序化交易测试报告.xls',{'交易成本合计'},'资产变化','F2');xlswrite('E:数量化金融程序化交易测试报告.xls',sum(CostSeries),'资产变化','F3');xlswrite('E:数量化金融程序化交易测试报告.xls',{'资产变化明细'},'资产变化','A5');xlswrite('E:数量化金融程序化交易测试报告.xls',{'Bar#'},'资产变化','A6');xlswrite('E:数量化金融程序化交易测试报告.xls',(1:length(data))','资产变化','A7');xlswrite('E:数量化金融程序化交易测试报告.xls',{'时间'},'资产变化','B6');xlswrite('E:数量化金融程序化交易测试报告.xls',cellstr(datestr(Date,'yyyy-mm-dd HH:MM:SS')),'资产变化','B7');xlswrite('E:数量化金融程序化交易测试报告.xls',{'多头保证金'},'资产变化','C6');xlswrite('E:数量化金融程序化交易测试报告.xls',LongMargin,'资产变化','C7');xlswrite('E:数量化金融程序化交易测试报告.xls',{'空头保证金'},'资产变化','D6');xlswrite('E:数量化金融程序化交易测试报告.xls',ShortMargin,'资产变化','D7');xlswrite('E:数量化金融程序化交易测试报告.xls',{'可用资金'},'资产变化','E6');xlswrite('E:数量化金融程序化交易测试报告.xls',Cash,'资产变化','E7');xlswrite('E:数量化金融程序化交易测试报告.xls',{'动态权益'},'资产变化','F6');xlswrite('E:数量化金融程序化交易测试报告.xls',DynamicEquity,'资产变化','F7');xlswrite('E:数量化金融程序化交易测试报告.xls',{'静态权益'},'资产变化','G6');xlswrite('E:数量化金融程序化交易测试报告.xls',StaticEquity,'资产变化','G7'); %%--图表分析--%画出布林带(部分)figure(1);candle(High(end-150:end),Low(end-150:end),Open(end-150:end),Close(end-150:end),'r');hold on;plot([MidLine(end-150:end)],'k');plot([UpperLine(end-150:end)],'g');plot([LowerLine(end-150:end)],'g');title('布林带(仅部分)');saveas(gcf,'E:数量化金融程序化交易1布林带(仅部分).png');close all;%交易盈亏曲线及累计成本 figure(2);subplot(2,1,1);area(1:RecLength,CumNetMargin(1:RecLength),'FaceColor','g');axis([1 RecLength min(CumNetMargin(1:RecLength))max(CumNetMargin(1:RecLength))]);xlabel('交易次数');ylabel('交易盈亏(元)');title('交易盈亏曲线'); subplot(2,1,2);plot(CumNetMargin(1:RecLength),'r','LineWidth',2);hold on;plot(cumsum(CostSeries(1:RecLength)),'b','LineWidth',2);axis([1 RecLength min(CumNetMargin(1:RecLength))max(CumNetMargin(1:RecLength))]);xlabel('交易次数');ylabel('交易盈亏及成本(元)');legend('交易盈亏','累计成本','Location','NorthWest');hold off;saveas(gcf,'E:数量化金融程序化交易2交易盈亏曲线.png');close all; %交易盈亏分布图 figure(3)subplot(2,1,1);ans=NetMargin(1:RecLength);%正收益和负收益用不同的颜色表示 ans(ans<0)=0;plot(ans,'r.');hold on;ans=NetMargin(1:RecLength);ans(ans>0)=0;plot(ans,'b.');xlabel('盈亏(元)');ylabel('交易次数');title('交易盈亏分布图'); subplot(2,1,2);hist(NetMargin(1:RecLength),50);h = findobj(gca,'Type','patch');set(h,'FaceColor','r','EdgeColor','w')xlabel('频率');ylabel('盈亏分组');saveas(gcf,'E:数量化金融程序化交易3交易盈亏分布图.png');close all;%权益曲线 figure(4)plot(Date,DynamicEquity,'r','LineWidth',2);hold on;area(Date,DynamicEquity,'FaceColor','g');datetick('x',29);axis([Date(1)Date(end)min(DynamicEquity)max(DynamicEquity)]);xlabel('时间');ylabel('动态权益(元)');title('权益曲线图');hold off;saveas(gcf,'E:数量化金融程序化交易4权益曲线图.png');close all; %仓位及回测比例 figure(5);subplot(2,1,1);plot(Date,pos,'g');datetick('x',29);axis([Date(1)Date(end)min(pos)max(pos)]);xlabel('时间');ylabel('仓位');title('仓位状态(1-多头 0-不持仓-1-空头)'); subplot(2,1,2);plot(Date,BackRatio,'b');datetick('x',29);axis([Date(1)Date(end)min(BackRatio)max(BackRatio)]);xlabel('时间');ylabel('回撤比例');title(strcat('回撤比例(初始资金为:',num2str(DynamicEquity(1)),',开仓比例:',num2str(max(max(LongMargin),max(ShortMargin))/DynamicEquity(1)*100),'%',...',保证金比例:',num2str(MarginRatio*100),'%)'));saveas(gcf,'E:数量化金融程序化交易5仓位及回测比例.png');close all; %多空对比 figure(6)subplot(2,2,1);pie3([LotsWinLong LotsLoseLong],[1 0],{strcat('多头盈利手数:',num2str(LotsWinLong),'手,','占比:',num2str(LotsWinLong/(LotsWinLong+LotsLoseLong)*100),'%')...,strcat('多头亏损手数:',num2str(LotsLoseLong),'手,','占比:',num2str(LotsLoseLong/(LotsWinLong+LotsLoseLong)*100),'%')});subplot(2,2,2);pie3([WinLong abs(LoseLong)],[1 0],{strcat('多头总盈利:',num2str(WinLong),'元,','占比:',num2str(WinLong/(WinLong+abs(LoseLong))*100),'%')...,strcat('多头总亏损:',num2str(abs(LoseLong)),'元,','占比:',num2str(abs(LoseLong)/(WinLong+abs(LoseLong))*100),'%')}); subplot(2,2,3);pie3([LotsWinShort LotsLoseShort],[1 0],{strcat('空头盈利手数:',num2str(LotsWinShort),'手,','占比:',num2str(LotsWinShort/(LotsWinShort+LotsLoseShort)*100),'%')...,strcat('空头亏损手数:',num2str(LotsLoseShort),'手,','占比:',num2str(LotsLoseShort/(LotsWinShort+LotsLoseShort)*100),'%')}); subplot(2,2,4);pie3([WinShort abs(LoseShort)],[1 0],{strcat('空头总盈利:',num2str(WinShort),'元,','占比:',num2str(WinShort/(WinShort+abs(LoseShort))*100),'%')...,strcat('空头总亏损:',num2str(abs(LoseShort)),'元,','占比:',num2str(abs(LoseShort)/(WinShort+abs(LoseShort))*100),'%')});saveas(gcf,'E:数量化金融程序化交易6多空对比饼图.png');close all; %% 收益多周期统计 figure(7);subplot(2,2,1);bar(Daily(2:end),DailyRet,'r','EdgeColor','r');datetick('x',29);axis([min(Daily(2:end))max(Daily(2:end))min(DailyRet)max(DailyRet)]);xlabel('时间');ylabel('日收益率'); subplot(2,2,2);bar(Weekly(2:end),WeeklyRet,'r','EdgeColor','r');datetick('x',29);axis([min(Weekly(2:end))max(Weekly(2:end))min(WeeklyRet)max(WeeklyRet)]);xlabel('时间');ylabel('周收益率'); subplot(2,2,3);bar(Monthly(2:end),MonthlyRet,'r','EdgeColor','r');datetick('x',28);axis([min(Monthly(2:end))max(Monthly(2:end))min(MonthlyRet)max(MonthlyRet)]);xlabel('时间');ylabel('月收益率'); subplot(2,2,4);bar(Yearly(2:end),YearlyRet,'r','EdgeColor','r');datetick('x',10);axis([min(Yearly(2:end))max(Yearly(2:end))min(YearlyRet)max(YearlyRet)]);xlabel('时间');ylabel('年收益率');saveas(gcf,'E:数量化金融程序化交易7收益多周期统计.png');close all; 经纬仪測回法实训心得 这一次完成的很小心,因为我们在前两次犯得低级错误太多了,很多地方都是微微改动自己的念头就会毫无顾忌地写下去了。但是我们在前两次的教训中,我们学会的耐心和虚心······ 一开始的时候,我们就觉得这次实训不一般,从经纬仪的结构上看就很明显体现出来,望远镜物镜可以多方位移动,目测的定点需要尖锐、细小,有点特别的是读数的时候发现跟显微镜类似要用到反光镜,这些还是很简单的,下面的才是我们的中心处。 仪器的调平——初步对中有点意思,我们需要从一个十字中心点对准我们在地下画好的额交叉点,但是我们最初的伸出脚掌的对准,才慢慢移动居中;然后还有初步整平——调动三脚架,基本居中圆水准器;再到精确校对整平,两个水平校准器要达到一致,可是不知道是我们技术问题,还是仪器調整的挠度很高,我们始终还是没有居中校平,要不就是水准器偏了离谱,要不就是圆水准器又走偏了。 最后老师来为我们从新调平得出结论,仪器坏了······ 不过呢,我们还抱着学习的心态去对待自己的状况,我们需要的是使用的经验和熟悉測回法的过程,所以我们接下来我们每个人都轮流来回测两个点,虽然还是有很多小小的错误,比如回测的时候,对准点不是很精确,读数的时候没有看准,或着是计算的时候没留意等等。 不过比前两次实训好多了,我们懂得分工后要学习不同组员的方式跟技巧了,还有就是我们在无味的实训中,应有的耐心跟团结心慢慢凝聚在一起了······篇二:测量日志加心得体会 实习日记本 学院 土木建筑学院 学生姓名丁琪家 学号重庆交通大学 指导老师邓明镜 实习时间 6.18~6.29 2012年6月18日 星期一 天气 晴 今天是我测量实习的第一天,在领过仪器并检查校验确认无误之后,组长开始给各组员分配任务,接着全组人商讨确定出了此次测量进度计划。各项安排全都完成后,我们领着仪器返回宿舍。为期两周的测量实习开始了。2012年6月19日 星期二 天气 晴 今日全组人员在为桥涵、概率论、毛概考试进行复习,未进行测量。2012年6月20日 星期三 天气 晴 今日全组人员在为桥涵、概率论、毛概考试进行复习,未进行测量。2012年6月21日 星期四 天气 晴 今日全组人员在为剩下的两科毛概和桥涵考试进行复习,未进行测量。2012年6月22日 星期五 天气 晴 今天算是正式测量实习的第一天。一大早,我们组成员七点就到达作业地点。开始选取测量的控制点,由于仪器测量的不方便和地形的要求,初选一共为18个选点,相对其他测量小组,测点显得有点多。与此同时,我也明白到了此次实习的任务的艰巨性。对于选点,在这之后我也有了一定了解,相邻点之间的通视要好,便于测量和量距;选点的视野要广,便于碎部测量。 虽然今天是端午节房间的第一天,但是全组人员没有一人因为放 假而缺勤迟到,大家都在为测量付出自己的努力。2012年6月23日 星期六 天气 晴 今天是端午节放假的第二天,也是正式的端午节。因此,本组组长在征得大家的意见和建议之后,决定让大家下午放假半天。在上午,我们发现昨日测出的几个控制点的高程有误。部分人员进行了返工,力求测量准确。同时,我们也用经纬仪用测回法测内角二测回,并努力保证测点上、下半测回角值不得大于40?,且角度闭合差不得大于?60?*n。2012年6月24日 星期日 天气 晴 经过昨天的角度测量,我们严重发现,角度闭合差极大,已经可以用度来作为单位,为了之后的碎部测量的可行性和地图绘制的准确性,我们不得不再次进行返工。不过,值得庆幸的是,高差闭合差已经达到数据要求。同时,测绘专业的同学决定将全站仪借用给我们。于是,经历一个上午的大家的辛苦测量,以及高科技全站仪的帮助下,使我们返工落下的进度又赶了回来。在此,我也终于体会到理论与实际的差距。原来要搞好测量,只懂得理论是圆圆不够的。 2012年6月25日 星期一 天气 阵雨 今天很是悲剧的下了一场雨,使得我们的测量进度又往后拖了一步。同时,地图的绘制也出现了不小的问题,大体控制点已经找好,但是碎步测量的测点在地图上表示出来的误差还是有点大。不过正好利用这场雨,让大家好好休息,养精蓄锐,为明天的测量做准备。2012年6月26日 星期二 天气 雨 今天虽然依旧在下雨,但工作进度已经不容许我们组继续拖下去了。因此,我们冒雨进行了碎部测量并用皮尺在一些碎部点测距。围着整个一教楼到处跑,还有好多蚊子。不得不感慨,测量学真是一门艰苦的职业啊!2012年6月27日 星期三 天气 晴 今天终于见到了久违的阳光。我们依旧进行的是碎部测量。地图绘制的同学,能够轻易地读出我们碎部点的平面位置。这也让我们测量的同学的辛苦劳作没有白费。对于一教楼的不熟悉以及施工带来的不便。我们只得一边测量一边对建筑物轮廓进行修改。地图绘制的图纸也不得不换一张重画。不过,我们也一天天努力着,进步着。2012年6月28日 星期四 天气 晴 今天,差不多已经进行到测量的收尾工作了,我们仍然测着碎部点。特别是那些拐点,着实让我们测量的同学辛苦了一番。地图的全貌已经快出来了,并且数据的校验与处理,基本上也都没什么问题。大伙儿都感到努力的成果没有白费。2012年6月29日 星期五 天气 晴 今天上午,我们大家呆在寝室整理测算的数据。直到下午三点,到归还仪器的时间了。终于经过了约两周的时间,要给这些陪着我们日晒风吹的仪器说再见了。这也宣告着我们的测量实习的日子,已经结束了。 遗憾的是我们损坏了一个皮尺,陪了40元。t t… 工程测量心得体会 此次专业的为期两个星期的工程测量就结束了。我们也着实体验了搞测量的前辈们的艰辛,明白了工程测量的路原来还有很长要走。 这次的测量仪器使用的是光学经纬仪和水准仪,引来了同学们的不少抱怨的声音。虽然比起电子仪器显得有点落伍,但这同时也是考验我们测量水平的一个重要方面。经过对仪器的使用,我也对经纬仪,水准仪更加熟悉了。 六月的重庆,完全可以用烈日炎炎来形容。我们顶着烈日做着测量。虽然条件,环境都较为恶劣。但大家都没有叫苦叫累,也没人中途退缩。我也从中明白团队合作组员间的相互理解和信任的默契,才能使测量事半功倍,才是按时完成测量任务的重要保证。这同时也是对我们吃苦耐劳,不畏困难的品质的一种锻炼。我还明白了,在数据处理,计算的时候,一定要认真谨慎,不得马虎。特别是今后,一旦踏上工作岗位,稍有一个偏差,后果不堪设想。对待凡事,都要认真细致地处理。 我很开心学校给我这样的一次实习机会,它至少能让我以后走上工作岗位不会对测量学一无所知。同时也使我的意志品质得到了锻炼。 最后,感谢邓明镜老师的测量实习的指导以及同组成员的互相帮助。这将使我大学生活乃至今后人生中一段宝贵的财富。篇三:测绘学习心得 学习测绘规范 1、进行数字化测图时,当测区较大或有条件时,可在测区内按自然带状地物(如街道线、河沿线)为边界线构成分区界限,分成若干相对独立的分区。 2、当地物跨越不同分区时,该地物应在某一分区内采集完成。 3、具有多种属性的线状要素(重合),只可采集一次,地类界与线状地物重合时,按线状地物采集。 4、采集线状地物时,应适当增加地物点的密度,保证曲线的准确拟合。 5、同时进行碎步测量和控制测量时,碎步点坐标应以平差后控制点坐标计算得到的。 6、文字注记:字头朝北,注记道路河流时,随线状弯曲方向排列。 7、等高线注记:字头应该指向山顶或高地,但字头不宜指向图纸的下方。 8、数字化测图提交检查验收资料有: 1、技术设计书,技术总结。 2、数据文件包括图廓内外整饰信息文件,元数据文件等。 3、输出的检查图。 4、技术规定或技术设计规定的其他资料。 5、检查报告。 9、上交资料: 1、技术设计书。 2、测图控制点展点图,水准路线图,埋石点点之记,控制点平差计算成果表。 3、地形图数据文件、元数据文件等各种数据文件。 4、输出的地形图。 5、产品检查报告、产品验收报告、技术总结报告。 10、上交资料满足的要求:即时性、一致性、完整性、可读性、真实性。 11、测绘技术设计方案内容: 1、软硬件环境及其要求。 2、作业的技术路线和流程。 3、各工序的作业方法,技术指标和要求。 4、生产过程中的质量控制环节和产品质量检查的主要要求。 5、数据安全备份或其他特殊的技术要求。 6、上交和归档成果及其资料的内容和要求。 7、有关附录,包括设计附图、附表和其他有关内容。 12、设计评审:评审依据、评审目的、评审内容、评审方式和评审人员等。 13、点、线、面状要素属性表中:字段名、字段类型、字段长、字段顺序、属性与属性值均应正确无误。 14、地形图分幅:绘图处理—标准图幅—图名、人员名、图表名—点击左上角—点击右下角—确定—修改 15、水准仪规格:如ds1,1表示每千米水准测量往返测高差中数的中误差为1mm。 16、经纬仪规格:如dj2,2表示野外一测回方向观测中误差为2秒。 17、一个项目的技术工作前需要了解的:①测区地点、面积,为什么要测量?;②什么测绘种类是地形测绘、工程测量、地籍测量还是房产测量?③多大的工作量?要什么成果物?④项目验收要求及成果清单(什么测绘种类?等级?数量?精度要求等等)。 第一章 MATLAB环境 1、MATLAB通用操作界面窗口包括哪些?命令窗口、历史命令窗口、当前目录窗口、工作空间窗口各有哪些功能? 答:MATLAB通用操作界面窗口包括:命令窗口、历史命令窗口、当前目录浏览器窗口、工作空间窗口、变量编辑器窗口、M文件编辑/调试器窗口、程序性能剖析窗口、MATLAB帮助。 命令窗口是MATLAB命令操作的最主要窗口,可以把命令窗口当做高级的“草稿纸”。在命令窗口中可以输入各种MATLAB的命令、函数和表达式,并显示除图形外的所有运算结果。 历史命令窗口用来记录并显示已经运行过的命令、函数和表达式,并允许用户对它们进行选择、复制和重运行,用户可以方便地输入和修改命令,选择多行命令以产生M文件。 当前目录窗口用来设置当前目录,可以随时显示当前目录下的M、MKL等文件的信息,扬文件类型、文件名、最后个修改时间和文件的说明信息等,并可以复制、编辑和运行M文件及装载MAT数据文件。 工作空间窗口用来显示所有MATLAB工作空间中的变量名、数据结构、类型、大小和字节数。 2、熟悉课本中表格1.4、1.5、1.6、1.7、1.8的内容。 3、如何生成数据文件?如何把数据文件中的相关内容输入到工作空间中,用实例进行操作。 4、在工作空间中可以通过哪些命令管理变量,写出每种语法的具体操作过程。答:(1)把工作空间中的数据存放到MAT数据文件。 语法:save filename 变量1 变量2 „„参数。 (2)从数据文件中取出变量存放到工作空间。 语法: load filename 变量1 变量2 „„。 (3)查阅MATLAB内存变量名。 语法:who(4)、查阅MATLAB内存变量变量名、大小、类型和字节数。 语法:whos(5)、删除工作空间中的变量。 语法:clear(6)查询工作空间中是否存在某个变量。 语法:i=exist(‘X’) 5、MATLAB用户文件格式有几哪种?扩展名各是什么? 答:MATLAB的用户文件格式通常有以下几种:(1)程序文件,扩展名为.m。(2)数据文件,扩展名为.mat。(3)可执行文件,扩展名为.mex。(4)图形文件,扩展名为.fig。(5)模型文件,扩展名为.mdl。 6、熟悉文件管理命令的语法,特别是命令type 作用。 7、详细操作课本26页例题1.3。 第二章 MATLAB数值计算 1、变量名的命名规则是什么?写出几个合理的变量。 答:MATLAB的变量命名规则: (1)变量名区分字母的大、小写。例 如,“a”和“A”是不同的变量。(2)变量名不能超过63个字符,第63个字符后的字符被忽略。 (3)变量名必须以字母开头,变量名的组成可以是任意字母,数字或者下画线,但不能含有空格和标点符号。 (4)关键字不能作为变量名。 2、产生矩阵有哪几种方法?分别举例说明。 答:(1)通过显示元素列表输入矩阵。 例如:d=[2;3,4;5,6] (2)通过语句生成矩阵。 例如:y=1:1:7 (3)由函数产生特殊矩阵。 例如:a=eye(4) 3、在excel表格中输入2行10列的数据,通过数据加载,输入到工作空间中,用矩阵元素的操作分别提取第1行和第2行的数据。 4、矩阵和数组的算术运算包括哪些运算?各有哪些不同点? 答:(1)矩阵和数组的加,减运算。 矩阵的加,减法运算规则与数组的完全相同,运算符也完全相同。(2)矩阵和数组的乘法运算。 矩阵的乘法运算表达式为“A*B”,表示矩阵的相乘。矩阵A的列数必须等于矩阵B的行数,除非其中有1个标量。 数组的乘法运算表达式为“A*B”,运算符为“*”,表示数组A和B中的对应元素相乘。 5、多项式如何表示?多项式求值、求根和多项式拟合的语法各是什么? 答:在MATLAB中多项式可以用长度为n+1的行向量表示为:P=[an,an-1„„a1,a0],即把多项式的各项系数烽按降幂次序排放成为行向量,如果多项式中缺某幂次项,则用0代替该幂次项的系数。 多项式求值语法:y=polyval(p,x)多项式求根语法:r=roots(p)多项式拟合语法:p=polyfit(x,y,n) 6、多项式一维插值有哪些类型? 答:多项式一维插值是指对一个自变量的插值,interep1函数是用来进行一维插值的,其语法为:yi=interp1(x,y,xi,“method”)。 Method是插值函数的类型,“linear”为线性插值(默认)。“nearest”为用最接近的相邻点插值。“spline”为三次样条插值。“cubic”为三次插值。 7、在M文件中完整地写出语句,使其产生课本中图2.5 一阶、二阶和三阶拟合曲线,并在适当位置添加图例。 解:随机产生一个一元三次多项式y=5x^3+2x^2+x+1; 拟合结果如图: x1=1:10;p=[2 3 4 5]; y0=polyval(p,x1);p1=polyfit(x1,y0,1);p2=polyfit(x1,y0,2);p3=polyfit(x1,y0,3);y1=polyval(p1,x1);y2=polyval(p2,x1);y3=polyval(p3,x1);plot(x1,y0,'r',x1,y1,'g',x1,y2,'-.',x1,y3,'*')legend('y1,一阶拟合','y2,二阶拟合','y3,三阶拟合',4) 8、元胞数组和结构数组有哪些创建方法? 答:元胞数组的创建方法:(1)直接使用{}创建。(2)由各元胞创建。(3)由各元朡内容创建。结构数组的创建方法:(1)直接创建。 (2)利用struct函数创建。 9、元胞数组和结构数组的内容如何获取? 答:元胞数组的内容获取:(1)取元胞数组的元素内容。(2)取元胞数组的元素。结构数组的获取: (1)使用点号(.)获取。 (2)使用getfield获取结构数组的数据。(3)使用setfield设置结构数组的数据。 10、矢量积、数量积和混合积的语法各是什么? 答:矢量积的语法:cross(a,b)数量积的语法:dot(a,b)混合积的语法:dot(a,cross(b,c)) 第四章 MATLAB图形处理 1、用plot(x,y)命令绘制混合式曲线时有几种情况?分别举例说明。 答:(1)如果x是向量,而y是矩阵,则x的长度必须等于矩阵y的行数或列数必须相等。如果x的长度与y的行数相等,则向量x与矩阵y的每列向量对应画一条曲线;如果x的长度与y的列数相等,则向量x与矩阵y的每行向量对应画一条曲线;如果y是方阵,则x和y的行数列数都相等,将向量x与矩阵y的每列向量画1条曲线。 (2)如果x是矩阵,y是向量,则y的长度必须等于x的行数或列数,绘制方法与前一种相似。 (3)如果x和y都是矩阵,则大小必须相同,将矩阵x的每列和y的每列画一条曲线。 2、熟悉本章表4.1、4.2、4.3、4.4、4.5、4.6中的内容。 3、能熟练操作课本124页中例题4.10。 x=0:0.1:2*pi;>> plot(x,sin(x))>> hold on >> plot(x,cos(x),'ro')>> title('y1=sin(x),y2=cos(x)')>> xlabel('x')>> legend('sin(x)','cos(x)',4)>> text(pi,sin(pi),'x=pi') 第五章 MATLAB程序设计 1、指出脚本文件和函数文件的不同点? :脚本文件 (1)多条命令的综合体 (2)没有输入、输出变量 (3使用MATLAB基本工作空间 (4.没有函数声明行 函数文件 (1).常用于扩充MATLAB函数库(2).可以包含输入、输出变量 (3).运算中生成的所有变量都存放在函数工作空间(4).包含函数声明行 脚本文件可以理解为简单的M文件,脚本文件中的变量都是全局变量。 函数文件是在脚本文件的基础之上多添加了一行函数定义行,其代码组织结构 和调用方式与对应的脚本文件截然不同。函数文件是以函数声明行“function...”作为开始的,其实质就是用户往MATLAB函数库里边添加了子函数,函数文件中的变量都是局部变量,除非使用了特别声明。函数运行完毕之后,其定义的变量将从工作区间中清除。而脚本文件只是将一系列相关的代码结合封装,没有输入参数和输出参数,即不自带参数,也不一定要返回结果。而多数函数文件一般都有输入和输出变量,并见有返回结果。 2、分别用for 循环、while循环和函数调用编写。 1sum=∑()! i=12i+1 i=10 n=10;sum=0;f=1;>> for i=1:10 f=f/(2*i*(2*i+1));sum=sum+f;end >> sum sum = 0.1752 >> sum=0;f=1;i=1;>> while i<=10 f=f/(2*i*(2*i+1));sum=sum+f;i=i+1;end >> sum sum = 0.1752 8 Matlab心得体会 10金融3 吕淼 2010241125 在为学习这门课前就听说了他的强大,因为现在的经济模型都是需要这些分析软件的,也曾听说金融的未来方向是需要数学等等作为依托的。曾经旁听过学校数学建模的课程,当时老师用的是lingo。对那个只需要U盘携带就可以安装的小东西记忆深刻。等到学习matlab时觉得这才是真正的王道啊。 它不仅有强大的运算功能,还有强大的绘图功能,虽然学习了有一个学习,但是我对他的了解额仅仅是一点点,或许连入门都谈不上。因为我学习时了解到一个现实。就是matlab的学习依赖有比较好的数学功底,其中我看最经常运用到的就是矩阵。我从网上了解到matlab是一门高等数学和计算机技术结合的东西,学习它必须具有相应的数学和计算机知识。然而很可惜,我的书写不是很好。每次讲到这个部分的时候就觉得听说理解无能了。特别是我今年还是大二,有一次老师讲课时用到协方差。无可避免的我笑了,因为协方差是我们下节课概率论数理统计老师要讲的内容。大一的时候还不觉得,但是大二,越是学习以后的内容越是感觉到时间不够用。或许时间是够用的,但是无法放弃那些占用自己时间表的无用项目。虽然这学期的学习的时间短暂,就算时间足够,老师也不能把所有的都讲解给我们,因为一个软件的功能需要我们自己不断的去摸索,老师也不可能知道所有。老师只是个指路人,最终的学习还是要靠自己。而且在摸索的过程中,我们能够发现和体会学习的快乐。痛并快乐着是种常态了吧。 自我感觉学习matlab与其说是学习一门软件,更不如说是学习一门语言。用一种数理的语言描述现象,揭示表象下的规律。此外,我认为matlab中的作图功能很强大,不仅简单的函数现象可以明确画出,而且一些点状物,甚至立体图也可以画出。大一上微积分的时候,老师曾经多次在课件中加入用matlab画出的图来。不论是一维二维三维等等,都能很好的画出来。只要能编写出函数式,在短短的几秒之内,他就会呈现在你眼前。另外就是图形的直观性,这是由阴影的制作的。而且可以根据需要,坐标图上加标题,坐标轴标记,文本注释级栅格等,也可以指定图线形式,比如是虚线。颜色也可以自己来定。可以在同一张图上画,也可以单个显示。 今年选择金融matlab一方面出于希望能够提前修完大三时期的课程,能够空出更多的时间去考研或者为就业做准备。另一个考虑就是希望明年能够参加数学建模大赛,今年种种纠结放弃了,觉得万分可惜。明年也就是大三下学期的话我就会再来一次,而且还会更加坚定些。那么学习matlab的话对明年的计划也是有帮助的。在学习的过程中,因为以前学过access中的select语言,觉得就编写这方面是有共性的,但是matlab的编程语言似乎更多更复杂一点,这是由于涉及的数学模型,数学公式更多的原因。老师在讲解的过程中是通过一个个具体的金融例子来讲解的,而不是就matlab这个具体的软件工具进行讲解。这个给我带来相当大的打击,因为我发现我不仅仅是工具不能够熟练,涉及到的专业知识也是一知半解。这更加坚定了我要好好学习专业知识的决心,大学四年有几个人是希望荒度过去的呢?可是今年的这门课真的是让我感到没学到什么,估计也是因为我抱着看一看的随意态度来的吧,也没有那种遇到不懂的就一定要弄懂它的决心和毅力。说什么都是借口了,无法掩饰我没有学好它的事实。事实上,我觉得今年这门课的重点并不是让我们掌握这种软件的具体用法,而是主要向我们展示如何用它去解决一些金融问题,数学问题。这点让我很郁闷,因为我不懂得原理,听起来这门课倍感吃力啊。可是嘛,年轻没有什么不可以,又有谁可以断言我接下来的生活中不能好好学习这个东西为自己的工作,学习,生活,研究兴趣带来方便呢。 从大学开学的见闻到现在学习MATLAB,感觉这是一个很好的软件,语言简便,实用性强。作为一个做新手,想要学习好这门语言,可以说还是比较难的。在我接触这门语言的这些天,除了会画几个简单的图形,其他的还是有待提高。从另一个方面也对我们大学生提出了两个要求——充实的课外基础和良好的英语基础。在现代,几乎所有好的软件都是来自国外,假如不会外语,想学好是非常难的。其实想要学习好一们语言,不能只靠老师,关键是自己。每个人内心深处都是有抵触意识的,不可能把老师的所有都学到。学习这门语言,不光是学习一种语言,更重要的事学习一种方法,一种学习软件的方法,还有学习的态度。 总结一下,学习任何一门语言:态度决定一切。不论是英语还是计算机语言。其实以前上高中的时候接触过这种编程语言,当时记得最头疼的就是循环语句,但是在matlab中这种东西用的就比较少了。语言语句都是很简洁利落的,都是一枪瞄死靶心的那种,很直接,这也让我减轻不少心理负担。 其实学习这种事,与其说学习什么具体的东西,更不如说是学习一种态度,从种种波折中认识到自己的局限性,不足。心情会沮丧,也会豁然开朗。光想不练假把式,不论想的再多,不实际运用还是没有用的。书山有路勤为径,学海无涯苦作舟。华山再高,顶有过路。这就是我今年学习金融matlab的心得体会。 Matlab心得体会 10金融3 吕淼 2010241125 在为学习这门课前就听说了他的强大,因为现在的经济模型都是需要这些分析软件的,也曾听说金融的未来方向是需要数学等等作为依托的。曾经旁听过学校数学建模的课程,当时老师用的是lingo。对那个只需要U盘携带就可以安装的小东西记忆深刻。等到学习matlab时觉得这才是真正的王道啊。 它不仅有强大的运算功能,还有强大的绘图功能,虽然学习了有一个学习,但是我对他的了解额仅仅是一点点,或许连入门都谈不上。因为我学习时了解到一个现实。就是matlab的学习依赖有比较好的数学功底,其中我看最经常运用到的就是矩阵。我从网上了解到matlab是一门高等数学和计算机技术结合的东西,学习它必须具有相应的数学和计算机知识。然而很可惜,我的书写不是很好。每次讲到这个部分的时候就觉得听说理解无能了。特别是我今年还是大二,有一次老师讲课时用到协方差。无可避免的我笑了,因为协方差是我们下节课概率论数理统计老师要讲的内容。大一的时候还不觉得,但是大二,越是学习以后的内容越是感觉到时间不够用。或许时间是够用的,但是无法放弃那些占用自己时间表的无用项目。虽然这学期的学习的时间短暂,就算时间足够,老师也不能把所有的都讲解给我们,因为一个软件的功能需要我们自己不断的去摸索,老师也不可能知道所有。老师只是个指路人,最终的学习还是要靠自己。而且在摸索的过程中,我们能够发现和体会学习的快乐。痛并快乐着是种常态了吧。 自我感觉学习matlab与其说是学习一门软件,更不如说是学习一门语言。用一种数理的语言描述现象,揭示表象下的规律。此外,我认为matlab中的作图功能很强大,不仅简单的函数现象可以明确画出,而且一些点状物,甚至立体图也可以画出。大一上微积分的时候,老师曾经多次在课件中加入用matlab画出的图来。不论是一维二维三维等等,都能很好的画出来。只要能编写出函数式,在短短的几秒之内,他就会呈现在你眼前。另外就是图形的直观性,这是由阴影的制作的。而且可以根据需要,坐标图上加标题,坐标轴标记,文本注释级栅格等,也可以指定图线形式,比如是虚线。颜色也可以自己来定。可以在同一张图上画,也可以单个显示。 今年选择金融matlab一方面出于希望能够提前修完大三时期的课程,能够空出更多的时间去考研或者为就业做准备。另一个考虑就是希望明年能够参加数学建模大赛,今年种种纠结放弃了,觉得万分可惜。明年也就是大三下学期的话我就会再来一次,而且还会更加坚定些。那么学习matlab的话对明年的计划也是有帮助的。在学习的过程中,因为以前学过access中的select语言,觉得就编写这方面是有共性的,但是matlab的编程语言似乎更多更复杂一点,这是由于涉及的数学模型,数学公式更多的原因。老师在讲解的过程中是通过一个个具体的金融例子来讲解的,而不是就matlab这个具体的软件工具进行讲解。这个给我带来相当大的打击,因为我发现我不仅仅是工具不能够熟练,涉及到的专业知识也是一知半解。这更加坚定了我要好好学习专业知识的决心,大学四年有几个人是希望荒度过去的呢?可是今年的这门课真的是让我感到没学到什么,估计也是因为我抱着看一看的随意态度来的吧,也没有那种遇到不懂的就一定要弄懂它的决心和毅力。说什么都是借口了,无法掩饰我没有学好它的事实。事实上,我觉得今年这门课的重点并不是让我们掌握这种软件的具体用法,而是主要向我们展示如何用它去解决一些金融问题,数学问题。这点让我很郁闷,因为我不懂得原理,听起来这门课倍感吃力啊。可是嘛,年轻没有什么不可以,又有谁可以断言我接下来的生活中不能好好学习这个东西为自己的工作,学习,生活,研究兴趣带来方便呢。 从大学开学的见闻到现在学习MATLAB,感觉这是一个很好的软件,语言简便,实用性强。作为一个做新手,想要学习好这门语言,可以说还是比较难的。在我接触这门语言的这些天,除了会画几个简单的图形,其他的还是有待提高。从另一个方面也对我们大学生提出了两个要求——充实的课外基础和良好的英语基础。在现代,几乎所有好的软件都是来自国外,假如不会外语,想学好是非常难的。其实想要学习好一们语言,不能只靠老师,关键是自己。每个人内心深处都是有抵触意识的,不可能把老师的所有都学到。学习这门语言,不光是学习一种语言,更重要的事学习一种方法,一种学习软件的方法,还有学习的态度。 总结一下,学习任何一门语言:态度决定一切。不论是英语还是计算机语言。其实以前上高中的时候接触过这种编程语言,当时记得最头疼的就是循环语句,但是在matlab中这种东西用的就比较少了。语言语句都是很简洁利落的,都是一枪瞄死靶心的那种,很直接,这也让我减轻不少心理负担。 其实学习这种事,与其说学习什么具体的东西,更不如说是学习一种态度,从种种波折中认识到自己的局限性,不足。心情会沮丧,也会豁然开朗。光想不练假把式,不论想的再多,不实际运用还是没有用的。书山有路勤为径,学海无涯苦作舟。华山再高,顶有过路。这就是我今年学习金融matlab的心得体会。第二篇:测回法学习心得
第三篇:matlab作业题
第四篇:Matlab心得体会
第五篇:Matlab心得体会