@Channelchan
2018-01-24T11:26:20.000000Z
字数 1872
阅读 37244
利用价值因子选股后,在大盘低于MA30时,卖出一张股指期货作为对冲大盘风险。
import numpy as npimport talib as taimport pandas as pdimport rqalphafrom rqalpha.api import *from fxdayu_data import DataAPIfrom rqalpha.const import INSTRUMENT_TYPEdef init(context):df = DataAPI.candle('000001.XSHE', 'D')df['MA_hedge'] = ta.abstract.DEMA(df, 4)context.df = dfcodes = pd.read_excel('factor.xlsx')context.codes = codes.set_index('date')def find_pool(context, date):codes = context.codes.loc[date]stocks = codes.index[codes == 1]return stocksdef handle_bar(context, bar_dict):hedge(context)buy(context, bar_dict)def buy(context, bar_dict):try:pool = find_pool(context, context.now)except KeyError:returnif pool is not None:stocks_len = len(pool)for stock in context.portfolio.positions:instrument = instruments(stock)if instrument.enum_type == INSTRUMENT_TYPE.FUTURE:continueif stock not in pool:order_target_percent(stock, 0)result = []try:for codes in pool:data_c = history_bars(codes, 25, '1d', 'close', adjust_type='post')ma = ta.MA(data_c, timeperiod=20)if len(ma) > 3 and context.df.close.loc[context.now] > context.df.MA_hedge.loc[context.now]:if ma[-1] > ma[-2] and ma[-2] > ma[-3] and codes not in result and codes not in context.portfolio.positions:result.append(codes)except KeyError:returnif len(result):for r in result:order_target_percent(r, 1.0 / stocks_len)def hedge(context):for future in get_future_contracts("IF"):try:sell_qty = context.portfolio.positions[future].sell_quantityif context.df.close.loc[context.now] < context.df.MA_hedge.loc[context.now] and sell_qty == 0:sell_open(future, 1)if context.df.close.loc[context.now] > context.df.MA_hedge.loc[context.now] and sell_qty > 0:buy_close(future, 1)except KeyError:continueconfig = {"base": {"start_date": "2016-08-01","end_date": "2017-08-01","frequency": '1d',"accounts": {'stock':1000000, 'future':1000000},"benchmark": "000300.XSHG"},"extra": {"log_level": "verbose",},"mod": {"sys_analyser": {"enabled": True,"plot": True}}}rqalpha.run_func(init=init, handle_bar=handle_bar, config=config)
