楼主: ghjktdf
4049 7

[讨论交流] DUAL TRUST+资金管理策略源码 [推广有奖]

  • 1关注
  • 1粉丝

硕士生

19%

还不是VIP/贵宾

-

威望
0
论坛币
166 个
通用积分
0
学术水平
1 点
热心指数
2 点
信用等级
1 点
经验
1340 点
帖子
225
精华
0
在线时间
39 小时
注册时间
2017-2-16
最后登录
2017-6-26

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
资金管理类策略或文章在其他网站上很少见到,把之前收集的一些策略分享一下

策略名称:DUAL TRUST+资金管理
策略原理:
          在原DualThrust策略逻辑的基础上,加上资金管理策略:即当前头寸在盈利的情况下才考虑进场


回测曲线:


DUAL TRUST+资金管理.png

策略代码:

function  Strategy1(freq)%


targetList  =  traderGetTargetList();  

%获取目标资产信息

HandleList  =  traderGetHandleList();

%获取账户句柄

global  record;

for  k=1:length(targetList);


        %--------------------仓位、K线、当前bar的提取-----------------------------%

        %获取当前仓位

        [marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(k).Market,targetList(k).Code);

        %策略中每次取数据的长度

        lags=200;

        dlags=10;

        barnum=traderGetCurrentBar(targetList(k).Market,targetList(k).Code);

        %数据长度限制

        if(barnum<lags)

                continue;

        end

        %获取K线数据

        [time,open,high,low,close,volume,~,~]  =  traderGetKData(targetList(k).Market,targetList(k).Code,'min',freq,  0-lags,  0,false,'FWard');

        [Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,~,~]  =  traderGetKData(targetList(k).Market,targetList(k).Code,'day',1,  0-dlags,  0,false,'FWard');

        if  length(close)<lags  ||  length(Dclose)<dlags

                continue;

        end;        

        %-------------------------交易逻辑-------------------------------%

        stoplossratio=0.03;

        stopearnratio=stoplossratio*1.1;                                                                                                    %  止盈触发比例

        %  未平仓的订单提取

        remain_num=find(record.isopen==1);

        remain.isopen=record.isopen(remain_num);

        remain.isearn=record.isearn(remain_num);

        remain.pivotprice=record.pivotprice(remain_num);

        remain.entrybar=record.entrybar(remain_num);

        remain.unit=record.unit(remain_num);

        remain.direction=record.direction(remain_num);

        %  计算购买手数

        [ValidCash,MarketCap,OrderFrozen,MarginFrozen,PositionProfit]  =  traderGetAccountInfo(HandleList(1));

        [~,~,Multiple,~,~,~,~,~,~]  =  traderGetFutureInfo(targetList(k).Market,targetList(k).Code);

        remain_share=10-length(remain_num);

        con1=0;

        if  remain_share~=0;

                con1=1;      %  表示仍有可用资金购买

                openunit=fix(ValidCash/remain_share/close(end)/Multiple);

        end;

        %  判断当前是多头持仓还是空头持仓

        posdir=0;  

        if  ~isempty(remain.direction)

                if  remain.direction(end)>0

                        posdir=1;

                elseif  remain.direction(end)<0

                        posdir=-1;

                end;

        end;

        %---------------------------------对未平仓的订单进行平仓或者调整止损线--------------------------------------------%

        for  i=1:length(remain_num)

                index=remain_num(i);

                if  remain.direction(i)==1

                        if  close(end)<remain.pivotprice(i)-stoplossratio*remain.pivotprice(i)  %  触发止损线

                                orderID3=traderDirectSell(HandleList(1),targetList(k).Market,targetList(k).Code,remain.unit(i),0,'market','sell');

                                if  orderID3==0

                                        continue;

                                end;

                                record.isopen(index)=0;

                        elseif  close(end)>remain.pivotprice(i)+stopearnratio*remain.pivotprice(i)  %  触发止盈线

                                record.pivotprice(index)=close(end);

                                record.isearn(index)=2;

                        end;

                elseif  remain.direction(i)==-1

                        if  close(end)>remain.pivotprice(i)+stoplossratio*remain.pivotprice(i)  %  触发止损线

                                orderID4=traderDirectBuy(HandleList(1),targetList(k).Market,targetList(k).Code,remain.unit(i),0,'market','buy');

                                if  orderID4==0

                                        continue;

                                end;

                                record.isopen(index)=0;

                        elseif  close(end)<remain.pivotprice(i)-stopearnratio*remain.pivotprice(i)  %  触发止盈线

                                record.pivotprice(index)=close(end);

                                record.isearn(index)=2;

                        end;

                end;

        end;

        %-----------------------------入场条件--------------------------------------------%

        con2=isempty(find(remain.isearn==1,1));                            %  所有头寸都是盈利的才考虑进新的头寸

        N=3;

        k1=0.5;

        k2=0.5;

        HH=max(Dhigh(end-N:end-1));

        HC=max(Dclose(end-N:end-1));

        LC=min(Dclose(end-N:end-1));

        LL=min(Dlow(end-N:end-1));

        range=max(HH-LC,HC-LL);

        upline=Dopen(end)+k1*range;

        dnline=Dopen(end)-k2*range;

        bcon=close(end)>upline;

        scon=close(end)<dnline;

        buycon=con1  &&  con2  &&  bcon  &&  posdir>=0;

        sellshortcon=con1  &&  con2  &&  scon  &&  posdir<=0;

        %---------------------------入场操作--------------------------------%

        if  buycon

                orderID1=traderDirectBuy(HandleList(1),targetList(k).Market,targetList(k).Code,openunit,0,'market','buy');

                if  orderID1==0

                        continue;

                end;

                record.pivotprice=[record.pivotprice,close(end)];

                record.isearn=[record.isearn,1];

                record.isopen=[record.isopen,1];

                record.unit=[record.unit,openunit];

                record.entrybar=[record.entrybar,barnum];

                record.direction=[record.direction,1];

        end;

        if  sellshortcon

                orderID2=traderDirectSell(HandleList(1),targetList(k).Market,targetList(k).Code,openunit,0,'market','sell');

                if  orderID2==0

                        continue;

                end;

                record.pivotprice=[record.pivotprice,close(end)];

                record.isearn=[record.isearn,1];

                record.isopen=[record.isopen,1];

                record.unit=[record.unit,openunit];

                record.entrybar=[record.entrybar,barnum];

                record.direction=[record.direction,-1];

        end;

end

end


策略来源:atrader社区-策略服务

目测有上百个策略可以免费下载~


二维码

扫码加我 拉你入群

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

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

关键词:文章 网站

已有 1 人评分经验 论坛币 收起 理由
fantuanxiaot + 33 + 33 精彩帖子

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

沙发
ghjktdf 发表于 2017-2-28 14:47:46 |只看作者 |坛友微信交流群
在原DualThrust策略逻辑的基础上,加上资金管理策略~

使用道具

藤椅
挖矿专家 发表于 2017-3-1 11:29:24 |只看作者 |坛友微信交流群
资金管理类策略很少见啊~

使用道具

板凳
peppep 发表于 2017-3-3 16:03:18 |只看作者 |坛友微信交流群
有代码的都是良心专家~~~

使用道具

报纸
ghjktdf 发表于 2017-3-4 14:50:08 |只看作者 |坛友微信交流群
挖矿专家 发表于 2017-3-1 11:29
资金管理类策略很少见啊~
是的,我都传到社区上了

使用道具

地板
hsf1117 发表于 2017-3-7 22:23:01 来自手机 |只看作者 |坛友微信交流群
社区网址?

使用道具

7
挖矿专家 发表于 2017-3-8 10:41:15 |只看作者 |坛友微信交流群
hsf1117 发表于 2017-3-7 22:23
社区网址?
atrader 社区已经更名为 digquant 社区,迁移至 www.digquant.com.cn

使用道具

8
ghjktdf 发表于 2017-3-13 10:43:14 |只看作者 |坛友微信交流群
挖矿专家 发表于 2017-3-8 10:41
atrader 社区已经更名为 digquant 社区,迁移至 www.digquant.com.cn

使用道具

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

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

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

GMT+8, 2024-4-28 20:20