@Channelchan
2017-05-05T08:51:52.000000Z
字数 2984
阅读 27920
Factors_Strategies
*iteritems()/stack()
from fxdayu_data.data.handler.mongo_handler import MongoHandlerfrom datetime import datetimeimport talib as taimport pandas as pdmh = MongoHandler()all_stocks = mh.table_names("HS300")pn = mh.read(all_stocks, 'HS300', start=datetime(2016, 1, 1), end = datetime(2016,12,31))prices = pn.minor_xs('close')mom5 = pd.DataFrame({name: ta.ROCP(item.values, 5) for name, item in prices.iteritems()}, index=prices.index)factor = mom5.stack()print factor
quantile/demeaned/by_date=True
import alphalensimport matplotlib.pyplot as pltfactor_data = alphalens.utils.get_clean_factor_and_forward_returns(factor, prices, quantiles=8)mean, std = alphalens.performance.mean_return_by_quantile(factor_data, demean=False, by_date=True)alphalens.plotting.plot_cumulative_returns_by_quantile(mean, 1)alphalens.plotting.plot_cumulative_returns_by_quantile(mean, 5)alphalens.plotting.plot_cumulative_returns_by_quantile(mean, 10)plt.show()
cond = factor_data['factor_quantile'] == 3save = factor_data[cond]s = pd.Series(True, index=save.index)s = s.unstack()s[s != True] = Falses.columns = map(lambda x: str(x[:-2]), s.columns)mh.write(s, 'mom5_Q3codes', 'Course_data', index='datetime')
Order/TimeSchedule/Performance
mh = MongoHandler()def initialize(context, data):context.d = mh.read('mom5_Q3codes', 'Course_data')# context.d.columns = map(lambda c: c+'.D', context.d.columns)context.d.index = pd.to_datetime(context.d.index) + timedelta(hours=15)def handle_data(context, data):pool = context.d.loc[context.current_time]stocks = pool[pool == True]target = stocks.indexfor code in context.portfolio.positions:if code not in target:order_target(code, 0)# pct = int(1.0/len(target)*1000)/1000.0for code in target:order_target_percent(code, 0.016)
if __name__ == '__main__':import matplotlib.pyplot as plttrader = Trader()trader['data'].kwargs.update({"host": '192.168.0.103', "port": 27018})trader.back_test(__file__, map(lambda c: str(c[:-2]), all_table("HS", host='192.168.0.103', port=27018)),frequency='D', start=datetime(2015, 1, 12), end=datetime(2016, 12, 10), ticker_type='HS', save=True)plt.plot(trader.performance.equity)plt.show()
输入Brenchmark与组合收益
import pyfolio as pffrom datetime import datetimefrom datetime import timedeltaimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltdata = pd.read_excel('D:\\PycharmProjects\\bigfishtrader\\Selection_Strategy\\FiveDay_Change\\volume5_5_change&2017-04-28-12-22-24&.xls', header=0)data_s = pd.Series(data.rate.values, data.datetime.values)data_s.index = pd.to_datetime(data_s.index, format='%Y-%m-%d')data_r = data_s.pct_change().dropna()data_r.index = data_r.index.tz_localize('UTC')-timedelta(hours=15)benchmark = pd.read_csv('D:\\Python_excel\\benchmark.csv', header=None)benchmark = pd.Series(benchmark[1].values, benchmark[0].values)benchmark.index = pd.to_datetime(benchmark.index, format='%Y-%m-%d')benchmark.index = benchmark.index.tz_localize('UTC')pf.create_returns_tear_sheet(data_r, live_start_date='2016-10-10', benchmark_rets=benchmark)
用选股器:
打分法给股票打分
取交集并集
排序
