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']]
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()
# 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')