小白量化《穿云箭集群量化》(7) 巡航导弹策略

小白量化《穿云箭集群量化》(7) 巡航导弹策略
量化交易策略比较有名的是网格策略,网格策略的缺点是对网格定义不容易,另外通过网格穿越交易也不是最优价格。
穿云箭量化平台提供了巡航导弹策略,可以利用巡航导弹技术自动实现买卖交易。巡航导弹技术本质上是价格漂移跟踪技术,能够自动识别股价移动方向,及时发出多空信号。它客服了人的 贪婪和恐惧,聪明的投资者利用穿云箭量化的巡航导弹技术,选择一个优质股票池,交给穿云箭量化的巡航导弹策略自动交易赚钱,轻松实现自己的资产增值。
在穿云箭量化中有一个超级订单SuperOrder功能。

##超级动态跟踪挂单
class SuperOrder():
    def __init__(self,gap=1.5,ld=3,lk=3):
        pass

    '''
    kind种类,code代码,price价格,volume数量,
    kind=0 #买多,固定价格
    kind=1 #卖空,固定价格
    kind=2 #买多,浮动价格
    kind=3 #卖空,浮动价格
    x是正涨幅
    y是负涨幅
    '''
    def add(self,code="",kind=0,price=1.00,volume=100,magic=0,\
           sl=-99999,tp=-99999,comment='',stop=99999,t=99999,\
           x=0.05,y=-0.05,d=0.0,p=0.0):
           pass

对于股票,这里主要使用kind=2
kind=2 #买多,浮动价格
x=0.05 #上涨偏移
通过设置上涨偏移,实现动态买入信号,
卖出继续采用回撤止盈函数,动态卖出。
下面给出回测版本的完整策略。
注意:穿云箭量化使用的中文Python,可直接使用中文Python关键字。

策略名='回测_中文巡航导弹'
#修改日期:2022-11-05
导入 pandas 命名为 pd
导入 HP_tdx 命名为 htdx
导入 HP_global 命名为 hg   #建立全局数据域hg
从 HP_formula 导入 *
导入 HP_formula 命名为 gs
从 HP_factor 导入 *
导入 HP_factor 命名为 hf
导入 HP_quant 命名为 hpq
从 HP_quant 导入 *
导入 time

#巡航导弹
cruise_missile=hf.SuperOrder()

函数 初始化(context):  
    context.zh='xiaobai'      #账户
    context.zhlx='回测'   #账户类型,2个汉字
    context.firstcash=2000000.00  #初始现金
    context.cash=context.firstcash
    context.portfolio.available_cash=context.firstcash
    set_maxdays(300)

    # 设置我们要操作的股票池
    g.stocks=hpq.get_universe()
    hpq.log.info('----策略环境信息-----')
    hpq.log.info('量化模块版本: '+str(hpq.ver))
    hpq.log.info('量化模块最后修改日期: '+str(hpq.mdate))
    hpq.log.info('svrip: '+hpq.svrip)
    hpq.log.info('svrport: '+str(hpq.svrport))
    hpq.log.info('\n----开始运行策略-----\n')
    hpq.log.info('策略名:'+策略名)
    qhcsj2=time.strftime('%Y%m%d %H:%M:%S')
    hpq.log.info('开始运行时间:'+qhcsj2)
    # 设定沪深300作为基准
    set_benchmark((1,'000001'))
    # 开启动态复权模式(真实价格)
    set_option('use_real_price',)
    #pop_universe([(1,'600861'),(0,'000517')])  #需要删除的股票代码池 
    hg.seemsg=假
    g.stocks2=[]  #被选池
    htdx.TdxInit(ip='139.159.239.163',port=7709)
    g.hd=0.005  #滑点比例 

# 每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次
函数 盘中运行(context, data):
    序列循环 m,security 在其中 context.universe[0]:
        df=data[security].df
        如果 len(df)<1:
            继续
        price = data[security].close
        close=price
        high= data[security].high
        low= data[security].low
        pre_close=data[security].pre_close   #前收盘

        acc_avg_cost  = context.portfolio.positions[security].acc_avg_cost #买入成本价 
        amos=context.portfolio.positions[security].closeable_amount  #可卖数量
        amos2=context.portfolio.positions[security].total_amount   #总数量

        #如果可卖数量大于0,做止盈和止损处理
        如果 amos>0:
            sell=hf.autosell(security,price=price,cost=acc_avg_cost,withdraw=0.3,stoploss=-0.05,minp=0.05,t=999) #追踪收盘价
            如果 sell==2:  #止损
                p5=round(price*(1-g.hd),2)
                x=order_target(security,0,p=p5)
                hpq.log.info(context.current_dt+   " 止损卖出: %s ,数量:%d,卖出价格:%.2f,成交资金:%0.2f"%(security,amos,p5,amos*p5))
                cruise_missile.add(security,2,price)
            否则如果 sell==1: #止盈
                p5=round(price*(1-g.hd),2)
                x=order_target(security,0,p=p5)
                hpq.log.info(context.current_dt+   " 止盈卖出: %s ,数量:%d,卖出价格:%.2f,成交资金:%0.2f"%(security,amos,p5,amos*p5))
                cruise_missile.add(security,2,price)
            继续
        否则如果 amos2>0 : #有持仓
            继续


        如果 不是 cruise_missile.isin(security,2):
            cruise_missile.add(security,2,price)
            继续

        buy=cruise_missile.oncheck(security,2,price)
        如果 buy==1:
            price2=round(price*(1+g.hd),2)
            x=order_target(security,1000,p=price2)
            如果 x !=:
                hpq.log.info(context.current_dt+ " 买入: %s ,数量:%d,买入价格:%.2f,成交资金:%0.2f"%(security,x.amount,price,x.amount*price))

我们选取一个股票池,看看回测结果。
在这里插入图片描述
如果使用easytrader进行实盘交易,可以使用下面的程序代码。

策略名='交易_中文巡航导弹'
#修改日期:2022-11-05
导入 pandas 命名为 pd
导入 HP_tdx 命名为 htdx
导入 HP_global 命名为 hg   #建立全局数据域hg
从 HP_formula 导入 *
导入 HP_formula 命名为 gs
从 HP_factor 导入 *
导入 HP_factor 命名为 hf
导入 HP_quant 命名为 hpq
从 HP_quant 导入 *
导入 time

导入 easytrader
##初始化同花顺软件
ths = easytrader.use('ths')
ths.connect( "C:\\同花顺软件\\同花顺\\xiadan.exe")
ths.enable_type_keys_for_editor()

#巡航导弹
cruise_missile=hf.SuperOrder()

函数 初始化(context):
    #context.istest=True    
    context.zh='xiaobai'      #账户
    context.zhlx='回测'   #账户类型,2个汉字
    context.firstcash=2000000.00  #初始现金
    context.cash=context.firstcash
    context.portfolio.available_cash=context.firstcash
    set_maxdays(300)

    # 设置我们要操作的股票池
    g.stocks=hpq.get_universe()
    hpq.log.info('----策略环境信息-----')
    hpq.log.info('量化模块版本: '+str(hpq.ver))
    hpq.log.info('量化模块最后修改日期: '+str(hpq.mdate))
    hpq.log.info('svrip: '+hpq.svrip)
    hpq.log.info('svrport: '+str(hpq.svrport))
    hpq.log.info('\n----开始运行策略-----\n')
    hpq.log.info('策略名:'+策略名)
    qhcsj2=time.strftime('%Y%m%d %H:%M:%S')
    hpq.log.info('开始运行时间:'+qhcsj2)
    # 设定沪深300作为基准
    set_benchmark((1,'000001'))
    # 开启动态复权模式(真实价格)
    set_option('use_real_price',)
    #pop_universe([(1,'600861'),(0,'000517')])  #需要删除的股票代码池 
    hg.seemsg=假
    g.stocks2=[]  #被选池
    htdx.TdxInit(ip='139.159.239.163',port=7709)
    g.hd=0.005  #滑点比例 

# 每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次
函数 盘中运行(context, data):
    序列循环 m,security 在其中 context.universe[0]:
        df=data[security].df
        如果 len(df)<1:
            继续
        price = data[security].close
        close=price
        high= data[security].high
        low= data[security].low
        pre_close=data[security].pre_close   #前收盘
        #value = context.portfolio.positions[security].value
        acc_avg_cost  = context.portfolio.positions[security].acc_avg_cost #买入成本价 
        amos=context.portfolio.positions[security].closeable_amount  #可卖数量
        amos2=context.portfolio.positions[security].total_amount   #总数量

        #如果可卖数量大于0,做止盈和止损处理
        如果 amos>0:
            #sell=hf.autosell(security,price=high,cost=acc_avg_cost,withdraw=0.3,stoploss=-0.05,minp=0.05,t=999)  #追踪最高价
            sell=hf.autosell(security,price=price,cost=acc_avg_cost,withdraw=0.3,stoploss=-0.05,minp=0.05,t=999) #追踪收盘价
            如果 sell==2:  #止损
                p5=round(price*(1-g.hd),2)
                x=order_target(security,0,p=p5)
                hpq.log.info(context.current_dt+   " 止损卖出: %s ,数量:%d,卖出价格:%.2f,成交资金:%0.2f"%(security,amos,p5,amos*p5))
                cruise_missile.add(security,2,price)
                ths.buy(security, price=p5, amount=amos) 
            否则如果 sell==1: #止盈
                p5=round(price*(1-g.hd),2)
                x=order_target(security,0,p=p5)
                hpq.log.info(context.current_dt+   " 止盈卖出: %s ,数量:%d,卖出价格:%.2f,成交资金:%0.2f"%(security,amos,p5,amos*p5))
                cruise_missile.add(security,2,price)
                ths.buy(security, price=p5, amount=amos) 
            继续
        否则如果 amos2>0 : #有持仓
            继续


        如果 不是 cruise_missile.isin(security,2):
            cruise_missile.add(security,2,price)
            继续

        buy=cruise_missile.oncheck(security,2,price)
        如果 buy==1:
            price2=round(price*(1+g.hd),2)
            x=order_target(security,1000,p=price2)
            ths.buy(security, price=price2, amount=1000) 
            如果 x !=:
                hpq.log.info(context.current_dt+ " 买入: %s ,数量:%d,买入价格:%.2f,成交资金:%0.2f"%(security,x.amount,price,x.amount*price))

中文Python穿云箭量化平台支持中文Python语法,提供了完整的Python股票软件开发源代码。新版本支持自编指标公式脚本编写策略回测,并有一键生成Python交易策略功能,提供多空雷达,抄底雷达,响尾蛇导弹,巡航到导弹等交易技术。提供期货行情,期货CTP接口,提供MT5交易接口,提供miniQMT接口,盈透TWS接口以及彩票模块。支持问财选股,支持语音报盘,微信通知等。用户可以根据自己需求设计出满足自己要求的 自动化交易工具。我们后面逐步介绍这些功能和技术。
超越自己是我的每一步!我的进步就是你的进步!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荷蒲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值