Skip to content

HS300ETF套利(上)

来源:https://uqer.io/community/share/56599d1ef9f06c6c8a91ada4

新股民入市时,一般都会收到一句忠告:“买ETF吧!”。

对于大部分散户而言,这句话十分刺耳,但是却无比正确。

假设来了:如果定投HS300ETF,那么从510300ETF基金上市以来,收益如何呢?

df = DataAPI.MktFunddAdjGet(ticker='510300',field='tradeDate,closePrice')
print '涨幅:%s%%' %(100*df.closePrice.iloc[-1] / df.closePrice.iloc[0]-100)
df.head().append(df.tail())

涨幅:45.1420890937%
tradeDate closePrice
0 2012-05-28 2.6040
1 2012-05-29 2.6440
2 2012-05-30 2.6360
3 2012-05-31 2.6300
4 2012-06-01 2.6300
848 2015-11-23 3.9869
849 2015-11-24 3.9901
850 2015-11-25 4.0142
851 2015-11-26 3.9953
852 2015-11-27 3.7795

可以看到,三年多涨幅高达45%,这还是在经历了股灾后的收益。

不费心不费力,就可以大幅跑赢宝宝。

不过值得注意的是,如果买在牛市高点,那就要套牢了。

也许你要问了,这个东西,确实是很省心,而且也享受了大盘上涨带来的红利,但是这个收益,咱还能不能再提高点呢?

答案当然是肯定的。

目前市场上,挂钩HS300指数的ETF基金有好几款,其中流通性最好的就是沪市的510300和深市的159919。我的策略思路是:

两只ETF均挂钩HS300指数,估值透明,当A折价大于B时,卖出B买入A,反之同理。

直接上代码:

from CAL.PyCAL import *
start = '2015-01-01'                       # 回测起始时间
end = '2015-11-26'                         # 回测结束时间
benchmark = 'HS300'                        # 策略参考标准
universe = ['510300.XSHG', '159919.XSHE']  # 证券池,支持股票和基金
sh300, sz300 = universe
capital_base = 100000                      # 起始资金
freq = 'd'                                 # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
commission = Commission(buycost=0.00015, sellcost=0.00015) 
refresh_rate = 1                           # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟
cal = Calendar('China.SSE')

def initialize(account):                   # 初始化虚拟账户状态
    pass

def handle_data(account):                  # 每个交易日的买入卖出指令
    # 有停牌的话,今天就跳过。
    if len(account.universe) < 2: return

    last_date = cal.advanceDate(account.current_date, '-1B').strftime('%Y%m%d')
    try:
        # 获取两只基金昨日收盘时的折价率
        sh300_df = DataAPI.MktFunddGet(ticker=u"510300",beginDate=last_date,endDate=last_date,field=u"discountRatio",pandas="1")
        sz300_df = DataAPI.MktFunddGet(ticker=u"159919",beginDate=last_date,endDate=last_date,field=u"discountRatio",pandas="1")
        discount_sh = sh300_df.discountRatio[0] 
        discount_sz = sz300_df.discountRatio[0]
    except:
        return
    # 搬搬搬
    if discount_sh - discount_sz > 0.002:
        order_pct_to(sh300, 0.99)
        order_pct_to(sz300, 0)
    elif discount_sz - discount_sh > 0.002:
        order_pct_to(sh300, 0)        
        order_pct_to(sz300, .99)

效果看着还可以吧。

这个策略还比较粗糙,而且市场容量有限,权当抛砖引玉。

有心人可以再研究交流。

有机会会再写一篇(下),做一些更细节的测试。

本文不做任何买入建议,后果概不负责!!!



回到顶部