繁簡切換您正在訪問的是FX168財經網,本網站所提供的內容及信息均遵守中華人民共和國香港特別行政區當地法律法規。

FX168财经网>人物频道>帖子

# 「期权研究」50ETF期权之PCR

作者/谎言梦 2019-09-27 00:00 0 来源: FX168财经网人物频道

「期权研究」50ETF期权之PCR¶

突然发现joinquant有期权数据,正好研究下PCR和50etf的关系,看看是否能作为一个择时信号。

先import各种包

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
rc("mathtext", default="regular")
import seaborn as sns
sns.set_style("white")
from matplotlib import dates
from pandas import Series,DataFrame,concat
import matplotlib.dates as mdates
from datetime import datetime

期权分看跌和看涨两种,买入两种不同的期权,代表着对于后市的不同看法,因此可以引进一个量化指标。¶

*  PCR = Put Call Ratio
*  PCR可以是关于成交量的PCR,也可以是成交额的PCR

期权合约信息可以用jq的opt.OPT_CONTRACT_INFO获得,方便的一b。

start = "2018-01-01"
end = "2019-09-01"
from jqdata import *
q = query(opt.OPT_CONTRACT_INFO).filter(
    opt.OPT_CONTRACT_INFO.underlying_symbol=='510050.XSHG',
    opt.OPT_CONTRACT_INFO.list_date>start,
    opt.OPT_CONTRACT_INFO.list_date<end)
ins = opt.run_query(q)
callOption = ins[ins["contract_type"]=="CO"].code.tolist()
putOption = ins[ins["contract_type"]=="PO"].code.tolist()
codf = get_price(callOption,start_date=start, end_date=end, frequency='daily', fields=["volume","money"], skip_paused=False, fq='pre', count=None, panel=False)
podf = get_price(putOption,start_date=start, end_date=end, frequency='daily', fields=["volume","money"], skip_paused=False, fq='pre', count=None, panel=False)
callvol = pd.pivot_table(codf, values=["money", "volume"], index="time", aggfunc=[np.sum], dropna=True)
putvol = pd.pivot_table(podf, values=["money", "volume"], index="time", aggfunc=[np.sum], dropna=True)
etf = get_price("510050.XSHG",start_date=start, end_date=end, frequency='daily', fields=["close"], skip_paused=False, fq='pre', count=None, panel=False)

对比下成交量和成交金额PCR¶

可以看出走势大致相同

fig = plt.figure(figsize=(10,13))
ax = fig.add_subplot(211)

import matplotlib.dates as mdates
ax.xaxis.set_major_formatter(mdates.DateFormatter('%y-%m-%d'))

ax.plot(putvol.index, putvol["sum", "volume"], '--gs',linewidth=1, label = u'Put Volume')
ax.plot(callvol.index, callvol["sum", "volume"], '--rs',linewidth=1, label = u'Put Volume')

ax.grid()
ax.set_xlabel(u"trade Date")
ax.set_ylabel(r"Turnover Volume")

ax1 = fig.add_subplot(212)
ax1.plot(putvol.index, putvol["sum", "money"], '--gs',linewidth=1, label = u'Put Money')
ax1.plot(callvol.index, callvol["sum", "money"], '--rs',linewidth=1, label = u'Put Money')
ax1.grid()
ax1.set_xlabel(u"trade Date")
ax1.set_ylabel(r"Turnover Money")

ax.legend(loc="best")
ax1.legend(loc="best")
plt.title('50ETF Option TurnoverVolume/ TurnoverMoney')

plt.show()

对比50etf走势和基于成交量PCR¶

fig = plt.figure(figsize=(12,8))
ax = fig.add_subplot(111)

import matplotlib.dates as mdates
ax.xaxis.set_major_formatter(mdates.DateFormatter('%y-%m-%d'))

ax.plot(putvol.index, putvol["sum", "volume"]/callvol["sum", "volume"], '--rs',linewidth=1, label = u'Volume PCR')
# ax.plot(callvol.index, putvol["sum", "money"]/callvol["sum", "money"], '--rs', linewidth=1,label = u'Money PCR')
ax.legend(loc="best")

ax2 = ax.twinx()
lns3 = ax2.plot(etf.index, etf.close, 'b-', label = 'ETF closePrice')

ax.grid()
ax.set_xlabel(u"trade Date")
ax.set_ylabel(r"Turnover Volume")
plt.title('50ETF Option TurnoverMoney')

plt.show()

因为两个PCR都差不多,为了更直观的分析就只画了基于成交量的PCR,可以看出:

PCR和价格存在负相关性,价格一路下跌,PCR一路上涨,价格在上升趋势的时候,PCR趋于平稳。方向上的择时可能用近月的PCR来计算比较精确,因为近月的gamma最大,用来判断方向比较合理。有兴趣可以clone自己实现下。

 
分享到:
举报财经168客户端下载

全部回复

0/140

投稿 您想发表你的观点和看法?

更多人气分析师

  • 张亦巧

    人气2144文章4145粉丝45

    暂无个人简介信息

  • 梁孟梵

    人气2152文章3177粉丝39

    qq:2294906466 了解群指导添加微信mfmacd

  • 指导老师

    人气1856文章4423粉丝52

    暂无个人简介信息

  • 李冉晴

    人气2296文章3821粉丝34

    李冉晴,专业现贷实盘分析师。

  • 刘钥钥1

    人气2016文章3119粉丝34

    专业从事现货黄金、现货白银模似实盘操作分析指导

  • 张迎妤

    人气1896文章3305粉丝34

    个人专注于行情技术分析,消息面解读剖析,给予您第一时间方向...

  • 金泰铬J

    人气2320文章3925粉丝51

    投资问答解咨询金泰铬V/信tgtg67即可获取每日的实时资讯、行情...

  • 金算盘

    人气2696文章7761粉丝125

    高级分析师,混过名校,厮杀于股市和期货、证券市场多年,专注...

  • 金帝财神

    人气4728文章8329粉丝118

    本文由资深分析师金帝财神微信:934295330,指导黄金,白银,...