返回介绍

第一部分 新手入门

第二部分 股票量化相关

第三部分 基金、利率互换、固定收益类

第四部分 衍生品相关

HS300ETF套利(上)

发布于 2022-02-20 22:26:14 字数 7083 浏览 845 评论 0 收藏 0

新股民入市时,一般都会收到一句忠告:“买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%
tradeDateclosePrice
02012-05-282.6040
12012-05-292.6440
22012-05-302.6360
32012-05-312.6300
42012-06-012.6300
8482015-11-233.9869
8492015-11-243.9901
8502015-11-254.0142
8512015-11-263.9953
8522015-11-273.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)

效果看着还可以吧。

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

有心人可以再研究交流。

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文