楼主: 挖矿专家
2459 6

[交易策略] 【每日一策】MATLAB量化交易策略之 CCI择时 [推广有奖]

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

威望
0
论坛币
2016 个
通用积分
5.2622
学术水平
21 点
热心指数
21 点
信用等级
21 点
经验
6055 点
帖子
403
精华
0
在线时间
151 小时
注册时间
2017-2-8
最后登录
2017-6-27

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
策略名称:CCI择时策略说明:
1.CCI 为正值时,视为多头市场;为负值时,视为空头市场;
2.常态行情时,CCI 波动于±100 的间;强势行情,CCI 会超出±100 ;
3.CCI>100 时,买进,直到CCI

回测曲线:

QQ图片20170220100533.png

策略代码:

function  CCI1(n)  %  顺势指标

%获取目标资产信息

targetList  =  traderGetTargetList();  %  在RunBackTest中选择好的标的.

%获取账户信息

HandleList  =  traderGetHandleList();

%=================================================================

%  RunBackTest的参数设置

%  n=20;  %  CCI的参数

%=================================================================

%  定义持有的账户为全局变量

global  holdingList;

if  isempty(holdingList)  %  判断cc是否为空值

        holdingList(1).Market=0;

        holdingList(1).Code=0;

        holdingList(1).OpenBar=0;

        holdingList(1).OpenPrice=0;

        holdingList(1).Sharebum=0;

end


%  定义可用金额

global  available;

if  isempty(available)  %  判断cc是否为空值

        available=100000000;

end

%  定义初始金额,每只股票的最大仓位为初始资金的1/300

initial=100000000;

initialeach=initial/length(targetList)*2;


k1=0;

%------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

for  i  =  1:length(targetList)  %  每个股票过一遍        

        %  lags为策略需要往前获取多少天

        lags=30;

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

        barnum=traderGetCurrentBar(targetList(i).Market,targetList(i).Code);  %  K线的序号,后面会增加,前面的值对应的日期固定.

        %  数据长度限制,排除了前lags根k线

        if(barnum<lags)

                continue;

        end


        %  策略开始部分

        [time,open,high,low,close,volume,turnover,openinterest]  =  traderGetKData(targetList(i).Market,targetList(i).Code,'day',1,  0-lags,  0,false,'FWard');



                if  length(close)<30

                        continue;

                end


                TP=(high+low+close)/3;

                MATP=mean(TP(end-n+1:end));

                a1=abs(TP(end-n+1:end)-MATP);              

                meanDev=mean(a1);

                CCI=(TP-MATP)/(0.015*meanDev);

                a=CCI(end)>100  &&  CCI(end-1)<100;  %  CCI上穿100,买入


                if  a

                        k1=k1+1;

                        stockList(k1).Market=targetList(i).Market;

                        stockList(k1).Code=targetList(i).Code;

                        stockList(k1).Price=close(end);

                        [ATR1,  ~]=traderATR(14,targetList(i).Market,targetList(i).Code,'day',1,0-lags,0,false,'FWard');

                        stockList(k1).ATR=ATR1(end);

                end

        end

%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

%  判断股票池里面的股票是否要买入,买入多少手

if  k1~=0

        for  i=1:length(stockList)

                %  等权重

                sharenum=floor(initialeach/stockList(i).Price/100)*100;

                %  设置每只股票的交易手数,使得最大的亏损不大于初始账户的  n2%.

%                  sharenum=floor(stockList(i).Price*initialeach/stockList(i).ATR/10000);

                %  获取当前bar序号

                barnum=traderGetCurrentBar(stockList(i).Market,stockList(i).Code);

                %获取当前仓位

                [marketposition,~,~]=traderGetAccountPosition(HandleList(1),stockList(i).Market,stockList(i).Code);

                if  marketposition  ==0  &&  (sharenum*stockList(i).Price)<=1*available  

                        orderID1=traderBuy(HandleList(1),stockList(i).Market,stockList(i).Code,sharenum,0,'market','buy1');  %  开多单

                        if  orderID1~=0

                                [~,~,price]  =  traderGetAccountPosition(HandleList(1),stockList(i).Market,stockList(i).Code);  %  记录开仓的价格

                                available=available-sharenum*price;

                                if  holdingList(1).Market==0

                                        holdingList(1).Market=stockList(i).Market;

                                        holdingList(1).Code=stockList(i).Code;

                                        holdingList(1).OpenBar=barnum+1;

                                        holdingList(1).OpenPrice=price;

                                        holdingList(1).Sharebum=sharenum;

                                else

                                        holdingList1(1).Market=stockList(i).Market;

                                        holdingList1(1).Code=stockList(i).Code;

                                        holdingList1(1).OpenBar=barnum+1;

                                        holdingList1(1).OpenPrice=price;

                                        holdingList1(1).Sharebum=sharenum;

                                        holdingList=[holdingList,holdingList1];

                                end

                        end

                end

        end

end


%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

%  出场设置

if  holdingList(1).Code~=0

        for  i=1:length(holdingList)

%                  [ATR2,  ~]=traderATR(14,holdingList(i).Market,holdingList(i).Code,'day',1,0-lags,0,false,'FWard');

                [time1,open1,high1,low1,close1,volume1,turnover1,openinterest1]  =  traderGetKData(holdingList(i).Market,holdingList(i).Code,'day',1,  0-lags,  0,false,'FWard');

                barnum=traderGetCurrentBar(holdingList(i).Market,holdingList(i).Code);

                TP=(high1+low1+close1)/3;

                MATP=mean(TP(end-n+1:end));

                a1=abs(TP(end-n+1:end)-MATP);              

                meanDev=mean(a1);

                CCI=(TP-MATP)/(0.015*meanDev);

                %  出场条件设定,当CCI指标回到100,并距离前次上穿100在m天之内,我们卖出.或者下穿-100

                b1=CCI(end-1)>100  &&  CCI(end)<=100;

                b2=holdingList(1).OpenBar-barnum<6;

                exitlong1=b1  &&  b2;

                exitlong2=CCI(end-1)>-100  &&  CCI(end)<-100;

                exitlong=  exitlong1  ||  exitlong2;


                if  barnum>=holdingList(i).OpenBar  &&  exitlong

                        orderID2=traderPositionTo(HandleList(1),holdingList(i).Market,holdingList(i).Code,0,0,'market','sell1');

                        if  orderID2~=0

                                exitprice=traderOrderFilledPrice(HandleList(1),orderID2);

                                available=available+exitprice*holdingList(i).Sharebum;

                                holdingList(i).Sharebum=0;

                        end

                end


        end

        %  删除已经卖出的股票

        holdingList2(1).Market=0;

        holdingList2(1).Code=0;

        holdingList2(1).OpenBar=0;

        holdingList2(1).OpenPrice=0;

        holdingList2(1).Sharebum=0;

        for  i=1:length(holdingList)

                if  holdingList(i).Sharebum~=0

                        holdingList2=[holdingList2,holdingList(i)];

                end

        end

        holdingList=holdingList2(2:end);

end

%--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


end



更多免费策略源码下载 请登录atrader社区-策略服务 进行下载 http://www.atrader.com.cn/stra.php

CCI择时策略代码下载:http://www.atrader.com.cn/stra.php?mod=model&pid=88



二维码

扫码加我 拉你入群

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

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

关键词:function 信息

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

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

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

使用道具

藤椅
ghjktdf 发表于 2017-3-7 14:10:58 |只看作者 |坛友微信交流群
挖矿专家 发表于 2017-3-6 14:29
atrader 社区已经更名为 digquant 社区,迁移至 www.digquant.com.cn
(*@ο@*) 哇~鼓掌~

使用道具

板凳
65425856 发表于 2017-3-8 15:57:57 |只看作者 |坛友微信交流群
挖矿专家 发表于 2017-3-6 14:29
atrader 社区已经更名为 digquant 社区,迁移至 www.digquant.com.cn
不是人人都能成为宽客

使用道具

报纸
挖矿专家 发表于 2017-3-9 10:06:26 |只看作者 |坛友微信交流群
感谢支持

使用道具

地板
65425856 发表于 2017-3-9 16:55:38 |只看作者 |坛友微信交流群
挖矿专家 发表于 2017-3-9 10:06
感谢支持

使用道具

7
挖矿专家 发表于 2017-3-13 10:34:59 |只看作者 |坛友微信交流群
65425856 发表于 2017-3-9 16:55

使用道具

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

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

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

GMT+8, 2024-4-26 11:39