@Channelchan
2017-06-19T01:48:28.000000Z
字数 2216
阅读 958
Hedge
利用基本面选股,当大盘低于MA40空仓。
# coding=utf-8import numpy as npimport talib as taimport pandas as pdimport osimport rqalphafrom rqalpha.api import *from fxdayu_data import DataAPI
在init设置你需要的外部数据。
def init(context):DataAPI.set_file('D:/PycharmProjects/Quant_Alpha/Data_Manager/Valuation_Selection/config.py')df = DataAPI.candle('sh000001', 'D')df['MA_hedge'] = ta.abstract.MA(df, 40)context.df = df#读取excel选股表codes = pd.read_excel('Value_Selection.xlsx')codes.index = codes.pop('date')context.codes = codes
def find_pool(context, date):codes = context.codes.loc[date]stocks = codes.index[codes == True]return stocksdef handle_bar(context, bar_dict):if can_trade(context):sell(context)buy(context, bar_dict)def buy(context, bar_dict):pool = find_pool(context, context.now)if pool is not None:stocks_len = len(pool)for stocks in context.portfolio.positions:if stocks not in pool:order_target_percent(stocks, 0)result = []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.MA100.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)if len(result):for r in result:order_target_percent(r, 1.0 / stocks_len)def sell(context):sell_list = []for stocks in context.portfolio.positions:data_c = history_bars(stocks, 25, '1d', 'close', adjust_type='post')ma = ta.MA(data_c, timeperiod=20)if len(ma) > 3:if (ma[-1] < ma[-2] and ma[-2] < ma[-3]):sell_list.append(stocks)# print('sell_list:', sell_list)if len(sell_list):for s in sell_list:order_target_percent(s, 0)def sell_all(context):for stock in context.portfolio.positions:order_target_percent(stock, 0)#设置可否交易的布尔开关def can_trade(context):if context.df.close.loc[context.now] < context.df.MA_hedge.loc[context.now]:sell_all(context)return Falseelse:return Trueconfig = {"base": {"start_date": "2010-06-01","end_date": "2017-05-30","frequency": "1d","securities": ['stock'],"stock_starting_cash": 10000000,"benchmark": "000300.XSHG","strategy_file_path": os.path.abspath(__file__)},"extra": {"log_level": "verbose",},"mod": {"sys_analyser": {"report_save_path": ".","enabled": True,"plot": True},'sys_simulation': {'match_engine': 'next_bar'}}}rqalpha.run_func(init=init, handle_bar=handle_bar, config=config)
