量化交易策略 - 均仓策略

今天给大家介绍一个非常简单但是却的确有效果的一个投资策略 - 均仓策略

首先我们提一下什么叫做仓位? 仓位管理是投资里面非常重要的一个环节。如果完全持有现金的话,那仓位就是空仓;同理,如果全部买入了标的(股票、基金、期货等)那么就叫做满仓。

顾名思义,均仓的意思就是平均仓位,达到50-50的管理方法。在投资的过程中,保持50%的现金和50%的投资标的。这样可以做到进可攻退可守的地位。这种方法在股票投资里也算是一种比较简单傻瓜式的投资策略吧。

没有看见有其他的文章对这种简单的策略做一个详细介绍,下面以股票投资为例子,来写一下关于这个投资策略的简单应用。

投资步骤:

1. 初次买入:买入半仓价值的股票

2. 设定均仓条件:时间or涨跌幅度

当买入后,我们只需要等待。设定一个去均仓的条件,一般有时间或涨跌幅度两种方式。比如:我们可以考虑每一个周或者更长的时间一个月等来均仓;如果以价格涨跌程度的话,那么当涨跌超过5%,我们都可以考虑均仓一次。

3. 均仓方法:当达到第二步中的均仓条件时,需要对仓位进行管理,使得手中的现金和股票市值仍旧相等。如果股票市值大于现金则卖出;如果股票市值小于现金则买入

通俗来讲,如果当股票市值大于现金,则说明之前涨了,这个时候我们可以考虑卖出一些来兑现。相反,如果股票市值低于现金,说明之前跌了,则我们需要继续买入来降低成本。

4. 均仓金额: abs(股票市值-现金)/2

 我们以两者之差的1/2为需要均仓的金额,当跌了就买入均仓金额价值的股票,如果涨了就卖出这些金额的股票。当完成之后,手中的现金和股票市值又会回归相等。

 

以上就是均仓策略的一个基本的思路。一般来讲,以时间为条件的均仓使用较少,就着重讲一下价格涨跌幅度均仓方法。当每次完成均仓之后,都是以最新的均仓价格为新的起始为准,重新计算应该涨跌的均仓价位。这样可以避免均仓之后,当前价格仍然远大于或小于平均标的价格的涨跌幅度。

下面是我自己尝试写的一段量化策略代码(这里以价格涨跌5%为均仓条件):

# 导入函数库
from jqdata import *

# 初始化函数,设定基准等等
def initialize(context):
    # 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    # 输出内容到日志 log.info()
    log.info('初始函数开始运行且全局只运行一次')
    # 过滤掉order系列API产生的比error级别低的log
    # log.set_level('order', 'error')
  
    ### 股票相关设定 ###
    # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')

    ## 运行函数(reference_security为运行时间的参考标的;传入的标的只做种类区分,因此传入'000300.XSHG'或'510300.XSHG'是一样的)
      # 开盘前运行
    run_daily(before_market_open, time='before_open', reference_security='000300.XSHG')
      # 开盘时运行
    run_daily(market_open, time='open', reference_security='000300.XSHG')
      # 收盘后运行
    run_daily(after_market_close, time='after_close', reference_security='000300.XSHG')
    g.last_trade_price = 0
    
## 开盘前运行函数
def before_market_open(context):
    # 输出运行时间
    log.info('函数运行时间(before_market_open):'+str(context.current_dt.time()))

    # 给微信发送消息(添加模拟交易,并绑定微信生效)
    # send_message('美好的一天~')
    # 要操作的股票:平安银行(g.为全局变量)
    g.security = '000001.XSHE'
    
    
## 开盘时运行函数
def market_open(context):
    log.info('函数运行时间(market_open):'+str(context.current_dt.time()))
    security = g.security
    last_trade_price = g.last_trade_price
    cash = context.portfolio.available_cash
    # 取得当前的现金
    if context.portfolio.positions_value ==0:
        order_value(security, context.portfolio.starting_cash/2)
        g.last_trade_price = context.portfolio.positions['000001.XSHE'].price
    elif abs(last_trade_price-context.portfolio.positions['000001.XSHE'].price) / last_trade_price >0.05:
        print(last_trade_price)
        print(context.portfolio.positions['000001.XSHE'].price)
        print('-------')
        print(cash)
        print(context.portfolio.positions_value)
        do_juncang(context)
        g.last_trade_price = context.portfolio.positions['000001.XSHE'].price
        print(context.portfolio.available_cash)
        print(context.portfolio.positions_value)
        print(context.portfolio.available_cash+context.portfolio.positions_value)

def do_juncang(context):
    security = g.security
    cash = context.portfolio.available_cash
    order_value(security, (cash-context.portfolio.positions_value)/2)
    
    
    
## 收盘后运行函数
def after_market_close(context):
    log.info(str('函数运行时间(after_market_close):'+str(context.current_dt.time())))
    #得到当天所有成交记录
    trades = get_trades()
    for _trade in trades.values():
        log.info('成交记录:'+str(_trade))
    log.info('一天结束')
    log.info('##############################################################')

然后使用聚宽平台来进行策略回测,可以看到策略收益为大概33%,跑输了沪深300 哈哈哈 大概是因为选择回测的标的股票平安银行大盘股 股价波动幅度不是很大 走势也不是太好吧

 

均仓策略算不上一个优秀的策略,但是也还是一个不错的方法。主要比较适用于震荡行情中,下面总结一下:

优点:1. 简单无脑傻瓜式方法,易于操作 。 2.适用于震荡行情,可以来来回回吃到波段的利润。因为据统计大盘超过半数时间都是在震荡行情的,选择波动大的股票标的优势更大。3. 可以抵抗一些行情出现变化的回撤现象,也可以克服因为市场下跌而不敢补仓的情况。关键在于,要严格按照均仓策略进行操作。

缺点:1. 如果出现单边上涨则均仓策略会导致利润偏小,过早的卖出手中的股票。2.如果出现单边下跌则会导致后续所需要的资金量要求大。3.因为无脑傻瓜式操作,不考虑其他额外的因素,可能出现紧急情况无法变通。

均仓策略有一定可以优化的空间,之后再做分享介绍。如果这篇文章对你有帮助,不妨给我点个赞或者关注,谢谢!

 

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值