做空机制探讨

策略分享
新手专区
标签: #<Tag:0x00007f2599640ad0> #<Tag:0x00007f2599640918>

(XiaoyuDu) #1

做空机制实现探讨

BigQuant 平台也支持做空交易

1)做空机制的介绍

2) 做空机制如何在BigQuant上实现

3) 做空机制实现的效果

1)

交易的过程本质上是一个预测的过程,当你预测价格上涨的时候,你可以买入股票或者持有手上的股票等待预测实现后卖出;
而当你预测价格下跌的时候,你又能怎么做呢? 如果你持有该股票你可以卖出,如果你没有该股票你可以借入该股票并在预测实现后卖出。
目前的融券交易就是做空交易的重要实现手段;

2)

下面我们来看一下如何在 BigQuant上具体实现做空;

获取数据和特征提取


获取数据可以用证券代码列表模块简单的实现;
而具体使用何种的特征来刻画做空的条件是灵活的:
常用的做空的特征包括技术特征:均线下行突破等, 包括基本面特征:市盈率在同行业中过高等
我们在这里采用5日均线和70日均线的关系构建交易指标:

signal=where(mean(close_0,5)>mean(close_0,70),1,-1)

where() 函数中的第一个位置返回一个bool型变量表示真假,当为真时返回第二个位置的值,当为假的时候返回第三个位置的值;
于是我们上述代码中的signal的变量取值就是,当5日均线上穿70日均线时取1,当5日均线下穿70日均线时取-1;

最重要的部分是Trade模块

引擎初始化部分

# 回测引擎:初始化函数,只执行一次
def bigquant_run(context):

    # 系统已经设置了默认的交易手续费和滑点,要修改手续费可使用如下函数
    context.set_commission(PerOrder(buy_cost=0.0003, sell_cost=0.0013, min_cost=5))
    context.df = context.options['data'].read_df().set_index('date')['signal']
    context.set_long_only(False)
    set_max_leverage(10)

以上是回测引擎的初始化函数
context是一个对象,包含了交易所需要的重要信息;
第一行设置了买入成本为0.0003千分之0.3的佣金,卖出成本为0.00013,佣金加上交易成本千分之一;
第二行将交易信号存储了并设置了日期作为指标;
第三行是很关键的,将仅允许多头交易这个参数赋值False;
第四行将最大杠杆设置为10,也就是借入的股票价值不能超过持有资金的十倍;

def bigquant_run(context, data):
    # 获取今日的日期
    today = data.current_dt.strftime('%Y-%m-%d')  
    
    try:
        signal = context.df.ix[today] 
    except KeyError as e:
        return 
    # 投资标的
    k = context.instruments[0]
    sid = context.symbol(k)
    cur_position = context.portfolio.positions[sid].amount 
    # 策略逻辑部分
    if signal == 1 and data.can_trade(sid):  
        if cur_position > 0:
            return
        context.order_target_percent(sid, 1) 
        print(today, '开多仓')
    
    if signal == -1 and data.can_trade(sid): 
        if cur_position < 0:
            return
        context.order_target_percent(sid, -1) 
        print(today, '开空仓')
    

以上是回测引擎的交易函数,每天执行一次,判断是否进行交易
此处先获取signal和sid的值,如果满足做多条件且对该股票并没有持有多仓我们买入该股票,如果满足做空条件且对该股票并没有持有空仓我们卖出该股票;
通过print()函数输出多空仓的交易信息可以使我们的交易过程更透明;

3)

做空机制的实现效果

净值曲线图:


原始股价走势图:
image

如图所示,我们的做空策略实际上比不上从一开始就直接持有的傻瓜策略,但是本文仅仅是一个例子展示如何在BigQuant上进行做空策略的设计;

如何查看交易详情:


如图所示,我们在6月28日卖出1171.62股,获得257821元现金;

持仓价值也因此由正转负

https://i.bigquant.com/user/xiaoyudu/lab/share/short%20%E7%AD%96%E7%95%A5%E7%AE%80%E4%BB%8B.ipynb?_t=1545649752853


(大胡子) #2

matplotlib打开方式应该不对,绘图还可以更好看一些


(XiaoyuDu) #3

谢谢指导~~