<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 互聯網+量化投資 大數據指數手把手 > 來源:https://uqer.io/community/share/55263359f9f06c8f3390457b ## 策略簡介 從公司基本面、市場驅動指標、市場情緒等多維度驗證擁有“天時、地利、人和”的大牛股,讓每個人都能生產符合自己投資理念的大數據指數。實現中參考了水星社區中的牛人@吳宇笛的因子計分卡策略。 本策略的參數如下: + 起始日期: 2014年1月1日 + 結束日期: 2016年5月18日 + 股票池: 上證50 + 業績基準: 上證50 + 起始資金: 100000元 + 調倉周期: 1個月 策略參數獲取: + 十日移動均線(MA10) 60日移動均線(MA60) 資產回報率(ROA) 市盈率(PE) 對數市值(LCAP) 波幅中位數(DHILO) 凈利潤/營業總收入(NPToTOR) 產權比率(DebtEquityRatio) 營業利潤同比增長(OperatingProfitGrowRate) 總資產同比增長(TotalAssetGrowRate) 均可以通過`DataAPI.MktStockFactorsDateRangeGet`獲得 + 市場新聞熱度指標可以通過`DataAPI.NewsHeatIndexGet`獲得 + 市場情緒指標可以通過`DataAPI.NewsSentimentIndexGet`獲得;與新聞熱度指標一樣,都是DataYes利用大數據分析從海量關聯新聞中提取出來的 ## 調倉策略 (1) 對每只股票獲取之前的120個交易日的收盤價,計算20日累計收益,共得到100個收益率數據 (2) 獲取該股票同期的100個交易日的基本面、市場驅動指標和市場熱度、情緒指標,分別計算均值、標準差,并進行中心化 (3) 以該股票20日累計收益率為因變量,基本面、市場驅動指標和市場熱度、情緒指標為自變量進行[彈性網 ( ElasticNet ) 回歸](http://scikit-learn.org/stable/modules/linear_model.html) (4) 獲取該股票前一日的基本面、市場驅動指標和市場熱度、情緒指標 (5) 對該股票前一日的基本面、市場驅動指標和市場熱度、情緒指標,依據前100個交易日的均值和標準差,置相對大小為 (前一日值 - 均值)/ 標準差 并四舍五入,作為在該項因子上的得分 (6) 根據之前計算出的權重對這些得分進行加總,得到該股票的得分,并以此為指數進行股票篩選 (7) 根據指數得分排序,選取總分最高的前五支股票作為買入列表 (8) 根據買入列表調倉 ```py import pandas as pd import numpy as np import statsmodels.api as sm import statsmodels.regression.linear_model as lm from sklearn.linear_model import ElasticNet from CAL.PyCAL import * used_factors = ['MA10', 'MA60', 'ROA', 'PE', 'LCAP', 'DHILO', 'DebtEquityRatio', 'OperatingProfitGrowRate', 'TotalAssetGrowRate', 'NPToTOR'] #used_factors = ['ASSI', 'EBITToTOR', 'ETP5', 'MA60', 'HSIGMA', 'PE', 'VOL60', 'SUE', 'DAVOL20', 'TotalAssetGrowRate'] def StockFactorsGet(universe, trading_days): data_all = {} for i,stock in enumerate(universe): try: data = DataAPI.MktStockFactorsDateRangeGet(secID = stock, beginDate = trading_days[0], endDate = trading_days[-1], field = ['tradeDate'] + used_factors) # data['tradeDate'] = pd.to_datetime(data['tradeDate']) except Exception, e: print e try: news_data = DataAPI.NewsHeatIndexGet(secID = stock, beginDate = trading_days[0], endDate = trading_days[-1]) heatIndex = news_data.set_index('newsPublishDate').sort_index().reset_index()[['heatIndex','newsPublishDate']] heatIndex['flag'] = heatIndex['newsPublishDate'].apply(lambda x: True if x in data.tradeDate.values else False) heatIndex = heatIndex[heatIndex.flag].reset_index() data = pd.merge(data, heatIndex, how = 'inner', left_index = 'tradeDate', right_index = 'newsPublishDate').drop(['index','newsPublishDate','flag'], 1) except Exception, e: data['heatIndex'] = 0 try: emotion_data = DataAPI.NewsSentimentIndexGet(secID = stock, beginDate = trading_days[0], endDate = trading_days[-1]) emotionIndex = emotion_data.set_index('newsPublishDate').sort_index().reset_index()[['sentimentIndex','newsPublishDate']] emotionIndex['flag'] = emotionIndex['newsPublishDate'].apply(lambda x: True if x in data.tradeDate.values else False) emotionIndex = emotionIndex[emotionIndex.flag].reset_index() data = pd.merge(data, emotionIndex, how = 'inner', left_index = 'tradeDate', right_index = 'newsPublishDate').drop(['index','newsPublishDate','flag'], 1) except Exception, e: # print 'emotion', stock, e data['sentimentIndex'] = 0 data['news_emotion'] = data['heatIndex'] * data['sentimentIndex'] data_all[stock] = data return data_all def StockRegDataGet(stock, trading_days, factors, shift = 20): start = trading_days[0] end = trading_days[-1] data = factors[(factors.tradeDate >= start.strftime('%Y-%m-%d')) & (factors.tradeDate <= end.strftime('%Y-%m-%d'))][:-shift] ret = DataAPI.MktEqudGet(secID = stock, beginDate = start.strftime('%Y%m%d'), endDate = end.strftime('%Y%m%d'), field = ['tradeDate', 'closePrice']) ret['fwdPrice'] = ret['closePrice'].shift(-shift) ret['return'] = ret['fwdPrice'] / ret['closePrice'] - 1. ret = ret[:-shift] data = data.merge(ret, how = 'inner', left_on = ['tradeDate'], right_on = ['tradeDate']) data = data.loc[:, ['return', 'heatIndex', 'sentimentIndex', 'news_emotion'] + used_factors] return data def GetRegressionResult(data): data = data.dropna() all_factors = ['heatIndex', 'sentimentIndex', 'news_emotion'] + used_factors for f in all_factors: if data[f].std() == 0: continue data[f] = (data[f] - data[f].mean()) / data[f].std() y = np.array(data['return'].tolist()) x = [] for f in all_factors: x.append(data[f].tolist()) x = np.column_stack(tuple(x)) x = np.array( [ np.append(v,1) for v in x] ) en = ElasticNet(fit_intercept=True, alpha=0) en.fit(x, y) res = en.coef_[:-1] w = dict(zip(all_factors, res)) return w def preparing(universe, date, factors_all): date = Date(date.year, date.month, date.day) cal = Calendar('China.SSE') start = cal.advanceDate(date, '-120B', BizDayConvention.Following) end = cal.advanceDate(date, '-1B', BizDayConvention.Following) start = datetime(start.year(), start.month(), start.dayOfMonth()) end = datetime( end.year(), end.month(), end.dayOfMonth()) trading_days = quartz.utils.tradingcalendar.get_trading_days(start, end) datas, means, vols, weights = {}, {}, {}, {} for i,stock in enumerate(universe): try: datas[stock] = StockRegDataGet(stock, trading_days, factors_all[stock]) means[stock] = dict(datas[stock].mean()) vols[stock] = dict(datas[stock].std()) weights[stock] = GetRegressionResult(datas[stock]) except Exception, e: pass return means, vols, weights ``` ```py from datetime import datetime end = datetime(2016, 5, 18) f_start = datetime(2014, 1, 1) universe = set_universe('SH50') f_days = quartz.utils.tradingcalendar.get_trading_days(f_start, end) factors_all = StockFactorsGet(universe, f_days) ``` ```py from datetime import datetime start = datetime(2014, 6, 1) end = datetime(2016, 5, 18) benchmark = 'SH50' universe = set_universe('SH50') capital_base = 100000 refresh_rate = 20 # f_start = datetime(2012, 6, 1) # f_days = quartz.utils.tradingcalendar.get_trading_days(f_start, end) # factors_all = StockFactorsGet(universe, f_days) def initialize(account): pass def handle_data(account): print account.current_date means, vols, weights = preparing(account.universe, account.current_date, factors_all) cal = Calendar('China.SSE') date = Date(account.current_date.year, account.current_date.month, account.current_date.day) date = cal.advanceDate(date, '-1B', BizDayConvention.Following) date = datetime(date.year(), date.month(), date.dayOfMonth()) factors_cur = StockFactorsGet(account.universe, [date]) score = {} all_factors = ['heatIndex', 'sentimentIndex', 'news_emotion'] + used_factors for stock in account.universe: if stock not in weights: continue fac = factors_cur[stock] s = 0 for f in all_factors: try: x = fac[f].iloc[-1] x = (x - means[stock][f])/vols[stock][f] s += weights[stock][f] * int(round(x)) except: pass score[stock] = s buylist = sorted(score.keys(), key = lambda x: score[x])[-5:] rebalance(account, buylist) def rebalance(account, buylist): for stock in account.valid_secpos: if stock not in buylist: order_to(stock, 0) for stock in buylist: order(stock, account.referencePortfolioValue / len(buylist) / account.referencePrice[stock]) 2014-06-03 00:00:00 2014-07-01 00:00:00 2014-07-29 00:00:00 2014-08-26 00:00:00 2014-09-24 00:00:00 2014-10-29 00:00:00 2014-11-26 00:00:00 2014-12-24 00:00:00 2015-01-23 00:00:00 2015-02-27 00:00:00 2015-03-27 00:00:00 2015-04-27 00:00:00 2015-05-26 00:00:00 2015-06-24 00:00:00 2015-07-22 00:00:00 2015-08-19 00:00:00 2015-09-18 00:00:00 2015-10-23 00:00:00 ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看