全部版块 我的主页
论坛 提问 悬赏 求职 新闻 读书 功能一区 悬赏大厅
3285 0
2015-04-18
悬赏 8 个论坛币 未解决
求辅助添加止盈止损代码(基于布林通道和ROC指标的策略),没有止盈止损设置,收益率及夏普比率一直很不好,求大神补全止盈止损代码,具体代码如下:
MarketPosition:-1表示持有空头,0表示无持仓,1表示持有多头
Lots:交易手数    MarginRatio:保证金比例   OpenPosPrice:开仓价格   OpenPosNum:开仓序号
High(i)>=UpperLine(i-1):最高价大于布林通道上线    MyEntryPrice(i):建仓价格

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 && 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 && Low(i)<=LowerLine(i-1)
        if MarketPosition==1   
            MarketPosition=-1;
            LongMargin(i)=0;     %平多后多头保证金为0了
            MyEntryPrice(i)=LowerLine(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)+(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)
                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

二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群