全部版块 我的主页
论坛 金融投资论坛 六区 金融学(理论版) 量化投资
1712 6
2017-03-03
策略思路:
在开盘30分钟后准备入场;
上轨=开盘后30分钟高点;
下轨=开盘后30分钟低点;

多头进场条件:收盘价大于上轨,最高价连续三根涨
空头进场条件:收盘价小于下轨,最低价连续三根跌

多头出场条件:收盘价小于下轨
空头出场条件:收盘价大于上轨


回测曲线(由Auto-trader提供回测报告)


hans.png


策略代码:


  function  HansStrategy(Freq,shareNum)  %上面2个为输入参数  


%  ------------  HansStrategy-------------------

%  Freq  为输入时间频率

%  shareNum  为操作的手数



global  hh;    %  全局变量,记录9点至9点半之间最大值

global  ll;    %  全局变量,记录9点至9点半之间最小值

if  isempty(hh)      %  全局变量hh赋初值

        hh=0;

end

if  isempty(ll)      %  全局变量ll赋初值

        ll=0;

end

%---------------------策略初始化与是否日内平仓---------------%

traderDailyCloseTime(145000);          %  每天14:50分平仓        如果没有日内平仓,去掉这句话就可以了。

targetList  =  traderGetTargetList();  %获取交易标的句柄

HandleList  =  traderGetHandleList();  %获取账户句柄

[marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(1).Market,targetList(1).Code);  %获取当前仓位状况

lags=300;

barnum=traderGetCurrentBar(targetList(1).Market,targetList(1).Code);  %当前Bar的编号

if(barnum<=lags)  %当编号不超过所取的数据长度时,返回

        return;

end



%---------------------策略提取数据---------------%

[time,open,high,low,close,volume,turnover,openinterest]  =  traderGetKData(targetList(1).Market,targetList(1).Code,'min',Freq,  0-lags,  0,false,'FWard');  %提取数据,从当前开始往前取lags个数据


%---------------------策略计算与基本逻辑---------------%


t0=datevec(time(end));

if  (floor(time(end))~=floor(time(end-1)))    %  判断当前BAR是否为当天,只对当天BAR计算

        hh=high(end);

        ll=low(end);

        nhNum=0;

        nlNum=0;

        newh=0;

        newl=0;

end

kaicang=0;    %记录当天开仓次数

if  time(end)>=datenum([t0(1)  t0(2)  t0(3)  09  15  00])  &&  time(end)<=datenum([t0(1)  t0(2)  t0(3)  09  45  00])  %  如果当天在9:15和9:30之间

        if  high(end)>hh

                hh=high(end);

        end

        if  low(end)<ll

                ll=low(end);

        end

end

if  kaicang<1            %  每天只开仓一次

        if  time(end)>datenum([t0(1)  t0(2)  t0(3)  09  45  00])            %交易时间从当天9:45开始

                T=datevec(time(end)-datenum([t0(1)  t0(2)  t0(3)  09  45  00]));

                len=ceil(T(5)/Freq);

                hh1=min(close(end-len+1:end-3)<hh*ones(len-3,1));    %超过9:15至9:30之间的最大值的第一根BAR之后,继续连续三根BAR上涨

                ll1=min(close(end-len+1:end-3)>ll*ones(len-3,1));    %低于9:15至9:30之间的最小值的第一根BAR之后,继续连续三根BAR下跌


                %----------------------策略主体-------------------------------%

                if      marketposition(1)==0

                        if    close(end-2)>hh

                                if  high(end-1)>high(end-2)

                                        if  high(end)>high(end-1)

                                                if  hh1

                                                        orderID1=traderBuy(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','buy0');%开多单

                                                end

                                        end

                                end

                        end

                end


                    if      marketposition(1)==0

                        if    close(end-2)<ll

                                if  low(end-1)<low(end-2)

                                        if  low(end)<low(end-1)

                                                if  ll1

                                orderID2=traderSellShort(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','sellshort1');%开空单

                                                end

                                        end

                                end

                        end

                end

                if    marketposition(1)>0

                        if  close(end)<ll          %止损

                                traderSell(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','sell0');

                                kaicang=1;

                        end

                end

                if    marketposition(1)<0

                        if  close(end)>hh      %止损

                                traderBuyToCover(HandleList(1),targetList(1).Market,targetList(1).Code,shareNum,0,'market','buytocover1');

                                kaicang=1;

                        end

                end


        end

end

end


更多免费策略源码下载请登录atrader社区-策略服务下载~





二维码

扫码加我 拉你入群

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

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

全部回复
2017-3-3 14:41:58
有双均线的吗?
二维码

扫码加我 拉你入群

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

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

2017-3-4 15:46:32
ghjktdf 发表于 2017-3-3 14:41
有双均线的吗?
去网站上找啊,楼主之前也发过貌似
二维码

扫码加我 拉你入群

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

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

2017-3-6 10:41:33
atrader 社区已经更名为 digquant 社区,迁移至 www.digquant.com.cn
二维码

扫码加我 拉你入群

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

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

2017-3-7 19:21:36
挖矿专家 发表于 2017-3-6 10:41
atrader 社区已经更名为 digquant 社区,迁移至 www.digquant.com.cn
楼主是水军啊
二维码

扫码加我 拉你入群

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

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

2017-3-8 10:27:41
hans123 这个是个经典策略
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
栏目导航
热门文章
推荐文章

说点什么

分享

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