pu = PlotUtil()
start_date = datetime.date(2015, 1, 1)
end_date = datetime.date(2018, 8, 8)
dt_histvol = start_date - datetime.timedelta(days=90)
min_holding = 15
init_fund = c.Util.BILLION
slippage = 0
m = 1  # 期权notional倍数
""" commodity option """
# name_code = name_code_option = c.Util.STR_M
# df_metrics = get_data.get_comoption_mktdata(start_date, end_date,name_code)
# df_future_c1_daily = get_data.get_future_c1_by_option_daily(dt_histvol, end_date, name_code, min_holding)
""" 50ETF option """
name_code = c.Util.STR_IH
name_code_option = c.Util.STR_50ETF
df_metrics = get_data.get_50option_mktdata(start_date, end_date)
df_future_c1_daily = get_data.get_mktdata_cf_c1_daily(dt_histvol, end_date,
                                                      name_code)
""" 隐含波动率 """
df_iv = get_data.get_iv_by_moneyness(dt_histvol, end_date, name_code_option)
df_iv_call = df_iv[df_iv[c.Util.CD_OPTION_TYPE] == 'call']
df_iv_put = df_iv[df_iv[c.Util.CD_OPTION_TYPE] == 'put']
df_data = df_iv_call[[c.Util.DT_DATE, c.Util.PCT_IMPLIED_VOL
                      ]].rename(columns={c.Util.PCT_IMPLIED_VOL: 'iv_call'})
df_data = df_data.join(df_iv_put[[c.Util.DT_DATE,c.Util.PCT_IMPLIED_VOL]].set_index(c.Util.DT_DATE),on=c.Util.DT_DATE,how='outer')\
    .rename(columns={c.Util.PCT_IMPLIED_VOL:'iv_put'})
df_data = df_data.dropna().reset_index(drop=True)
df_data.loc[:, 'average_iv'] = (df_data.loc[:, 'iv_call'] +
                                df_data.loc[:, 'iv_put']) / 2
""" Volatility Statistics """
df_iv_stats = df_data[[c.Util.DT_DATE, 'average_iv']]
Exemple #2
0
from data_access.get_data import get_comoption_mktdata,get_50option_mktdata
import datetime
import numpy as np
import back_test.model.constant as c
from back_test.model.base_option import BaseOption
from back_test.model.base_account import BaseAccount
from Utilities.PlotUtil import PlotUtil
import matplotlib.pyplot as plt


dt_start = datetime.date(2018, 12, 12)
dt_end = datetime.date.today()
# df_data = get_comoption_mktdata(dt_start, dt_end, c.Util.STR_CU)
df_data = get_50option_mktdata(dt_start, dt_end)
m = 0.5
cd_trade_price = c.CdTradePrice.VOLUME_WEIGHTED

df_option1 = df_data[df_data[c.Util.ID_INSTRUMENT] == '50etf_1811_c_2.65'].reset_index(drop=True)
df_option2 = df_data[df_data[c.Util.ID_INSTRUMENT] == '50etf_1811_p_2.45'].reset_index(drop=True)

baseoption1 = BaseOption(df_data=df_option1, df_daily_data=df_option1, flag_calculate_iv=True)
baseoption2 = BaseOption(df_data=df_option2, df_daily_data=df_option2, flag_calculate_iv=True)
account = BaseAccount(init_fund=10000000, leverage=1.0, rf=0.03)

dt_open = datetime.date(2018, 11, 12)
baseoption1._reprocess_if_genenate_single_option()
baseoption2._reprocess_if_genenate_single_option()
baseoption1.init()
baseoption2.init()

import datetime
import pandas as pd
import matplotlib.pyplot as plt
import back_test.model.constant as c
import data_access.get_data as get_data
from Utilities.PlotUtil import PlotUtil
from Strategy.model.VolTrading import VolTrading, VolTradingLLT, VolTradingIvHv, VolTrading_1
pu = PlotUtil()

dt_start = datetime.date(2015, 1, 1)
dt_end = datetime.date(2018, 10, 8)
dt_histvol = dt_start - datetime.timedelta(days=300)
name_code = c.Util.STR_IH
name_code_option = c.Util.STR_50ETF
df_metrics = get_data.get_50option_mktdata(dt_start, dt_end)
df_future_c1_daily = get_data.get_mktdata_future_c1_daily(
    dt_histvol, dt_end, name_code)
df_futures_all_daily = get_data.get_mktdata_future_daily(
    dt_start, dt_end, name_code)
df_iv = get_data.get_iv_by_moneyness(dt_histvol, dt_end, name_code_option)
df_iv = df_iv[df_iv[c.Util.CD_OPTION_TYPE] == 'put_call_htbr'][[
    c.Util.DT_DATE, c.Util.PCT_IMPLIED_VOL
]].reset_index(drop=True)

vol_arbitrage = VolTradingIvHv(dt_start, dt_end, df_metrics, df_iv,
                               df_future_c1_daily, df_futures_all_daily)
vol_arbitrage.slippage = 1.0 / 1000.0
vol_arbitrage.init()
account = vol_arbitrage.back_test()
res = account.analysis()
yearly = account.annual_analyis()
Exemple #4
0
# df_metrics = get_data.get_50option_mktdata(datetime.date(2015,1,1),datetime.date(2018,11,20))
# df_baseindex = get_data.get_index_mktdata(datetime.date(2015,1,1),datetime.date(2018,11,20),c.Util.STR_INDEX_50SH)
#
# df_res = pd.DataFrame()
# for cd_strategy in ['short_call','short_put','short_straddle']:
#     naked_short = NakedShort(df_metrics,df_baseindex,cd_strategy=cd_strategy,cd_marutity_days=5)
#     naked_short.moneyness_rank=-2
#     naked_short.back_test()
#     naked_short.account.account.to_csv('../../accounts_data/naked_short_account_'+ str(cd_strategy) +'_' + str(naked_short.moneyness_rank) + '_2015.csv')
#     naked_short.account.trade_records.to_csv('../../accounts_data/naked_short_records_' + str(cd_strategy) +'_' + str(naked_short.moneyness_rank) + '_2015.csv')
#     res = naked_short.account.analysis()
#     print(res)
#     df_res[cd_strategy] = res
# df_res.to_csv('../../accounts_data/res_cd_strategy_' + str(naked_short.moneyness_rank) + '_2015.csv')

df_metrics = get_data.get_50option_mktdata(datetime.date(2015, 2, 9),
                                           datetime.date(2018, 11, 20))
df_baseindex = get_data.get_index_mktdata(datetime.date(2015, 2, 9),
                                          datetime.date(2018, 11, 20),
                                          c.Util.STR_INDEX_50SH)

df_res = pd.DataFrame()
for cd_strategy in ['short_call', 'short_put', 'short_straddle']:
    naked_short = NakedShort(df_metrics,
                             df_baseindex,
                             cd_strategy=cd_strategy,
                             cd_marutity_days=0)
    naked_short.moneyness_rank = -4
    naked_short.back_test()
    naked_short.account.account.to_csv(
        '../../accounts_data/naked_short_account_' + str(cd_strategy) + '_' +
        str(naked_short.moneyness_rank) + '_2015.csv')