@Channelchan
2017-05-05T16:51:52.000000Z
字数 2984
阅读 27763
Factors_Strategies
*iteritems()/stack()
from fxdayu_data.data.handler.mongo_handler import MongoHandler
from datetime import datetime
import talib as ta
import pandas as pd
mh = 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 alphalens
import matplotlib.pyplot as plt
factor_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'] == 3
save = factor_data[cond]
s = pd.Series(True, index=save.index)
s = s.unstack()
s[s != True] = False
s.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.index
for code in context.portfolio.positions:
if code not in target:
order_target(code, 0)
# pct = int(1.0/len(target)*1000)/1000.0
for code in target:
order_target_percent(code, 0.016)
if __name__ == '__main__':
import matplotlib.pyplot as plt
trader = 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 pf
from datetime import datetime
from datetime import timedelta
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
data = 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)
用选股器:
打分法给股票打分
取交集并集
排序