设为首页收藏本站

 找回密码
 注册
查看: 2138|回复: 0
打印 上一主题 下一主题

HansStrategy 策略源码 [复制链接]

精华
0
UID
247176
积分
162
帖子
72
主题
68
阅读权限
0
注册时间
2017-2-14
最后登录
2017-5-18
跳转到指定楼层
1#
发表于 2017-3-3 11:40:02 |只看该作者 |倒序浏览
策略思路:

在开盘30分钟后准备入场;
上轨=开盘后30分钟高点;
下轨=开盘后30分钟低点;

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

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

策略代码:

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社区-策略服务下载,http://www.atrader.com.cn/stra.php

HansStrategy源码下载:http://www.atrader.com.cn/stra.php?mod=model&pid=56
您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-6 19:46

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部