matlab回测,Matlab交易策略回测模板

1.

Matlab交易策略回测模板

for i=1::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 && 请输入相关触发条件  %用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 &&请输入相关触发条件

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;%平多仓时的静态权益

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值