<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>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 決策樹模型(固定模型) > 來源:https://uqer.io/community/share/568dce2d228e5b18e2ba296e 樓主上學時學的是機器學習,現在在BAT做數據挖掘,一直對將機器學習的知識應用到金融領域比較感興趣。 最近發現了優礦這個平臺之后,有點著迷了,通過看大家的策略,也學到些知識。 因為樓主對金融投資認識不多,所以寫的策略比較簡單粗暴,希望向大家多多學習~ 策略: 1、不預測具體股價,只預測次日收盤價相比今日是漲是跌; 2、如果預測為漲,則全部買入或持有;如果預測為跌,則全部賣出。 方法: 基于某只股票的歷史數據,采用機器學習的方法,挖掘其中規律,預測該只股票次日收盤價是漲還是跌 ```py import numpy as np from CAL.PyCAL import * from sklearn.cross_validation import train_test_split from sklearn.externals import joblib import pandas as pd cal = Calendar('China.SSE') # 第一步:設置基本參數 start = '2015-01-01' end = '2015-11-01' capital_base = 1000000 refresh_rate = 1 benchmark = 'HS300' ##HS300 freq = 'd' #601872.XSHG HS300 # 第二步:選擇主題,設置股票池 universe = ['601872.XSHG', ] ##訓練模型 def model_train(begin_date,end_date): data1=DataAPI.MktEqudGet(secID=u"601872.XSHG",beginDate=begin_date,endDate=end_date,field=['tradeDate','highestPrice','lowestPrice','openPrice','closePrice','turnoverVol','turnoverRate'],pandas="1") data2=DataAPI.MktStockFactorsDateRangeGet(secID=u"601872.XSHG",beginDate=begin_date,endDate=end_date,field=['tradeDate','DAVOL5','EMA5','EMA10','MA5','MA20','RSI','VOL5','VOL10','MACD'],pandas="1") df_data=pd.merge(data1,data2,on='tradeDate') tmp=[] for i in range(len(df_data.values)): mark_1=0 for j in range(len(df_data.values[i])): if str(df_data.values[i][j])=='nan': mark_1=1 if mark_1==0: a=list(df_data.values[i]) a.append(df_data.values[i][4]-df_data.values[i][10]) a.append(df_data.values[i][4]-df_data.values[i][11]) tmp.append(a) data=tmp print len(data) x=[] y=[] for i in range(len(data)-1): if data[i][4]<data[i+1][4]: y.append(1) else: y.append(0) x.append(data[i][1:]) x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.0, random_state=42) ##訓練模型 from sklearn import tree clf = tree.DecisionTreeClassifier( max_depth =3 ) clf.fit(x_train,y_train) y_predict=clf.predict(x_train) n_1=0 for i in range(len(y_predict)): if y_train[i]==y_predict[i]: n_1=n_1+1 n_2=0 for i in range(len(y_predict)): if y_train[i]==y_predict[i] and y_predict[i]==1: n_2=n_2+1 joblib.dump(clf, 'clf.model') return clf,float(n_1)/float( len(y_predict) ),float(n_2)/float( int(sum(y_train)) ) ,float(sum(y_train))/float(len(y_train)) def initialize(account): ##使用2015年2月1日之前800個交易日的數據進行訓練 today='20150201' train_begin_date = cal.advanceDate(today,'-800B',BizDayConvention.Preceding).strftime('%Y%m%d') train_end_date = cal.advanceDate(today,'-1B',BizDayConvention.Preceding).strftime('%Y%m%d') model,acc_rate,recall_rate,balance=model_train(train_begin_date,train_end_date) print acc_rate,recall_rate,balance ##正確率、召回率、正負樣本均衡度 def handle_data(account): # 本策略將使用account的以下屬性: # account.referencePortfolioValue表示根據前收計算的當前持有證券市場價值與現金之和。 # account.universe表示當天,股票池中可以進行交易的證券池,剔除停牌退市等股票。 # account.referencePrice表示股票的參考價,一般使用的是上一日收盤價。 # account.valid_secpos字典,鍵為證券代碼,值為虛擬賬戶中當前所持有該股票的數量。 c = account.referencePortfolioValue today = account.current_date.strftime('%Y-%m-%d') begin_date = cal.advanceDate(today,'-1B',BizDayConvention.Preceding).strftime('%Y%m%d') end_date = cal.advanceDate(today,'-1B',BizDayConvention.Preceding).strftime('%Y%m%d') data1=DataAPI.MktEqudGet(secID=u"601872.XSHG",beginDate=begin_date,endDate=end_date,field=['tradeDate','highestPrice','lowestPrice','openPrice','closePrice','turnoverVol','turnoverRate'],pandas="1") data2=DataAPI.MktStockFactorsDateRangeGet(secID=u"601872.XSHG",beginDate=begin_date,endDate=end_date,field=['tradeDate','DAVOL5','EMA5','EMA10','MA5','MA20','RSI','VOL5','VOL10','MACD'],pandas="1") df_data=pd.merge(data1,data2,on='tradeDate') a=list(df_data.values[0]) a.append(df_data.values[0][4]-df_data.values[0][10]) a.append(df_data.values[0][4]-df_data.values[0][11]) x_predict=a[1:] for i in range(len(x_predict)): if str(x_predict[i])=='nan': x_predict[i]=10000000 clf = joblib.load('clf.model') y_predict=clf.predict(x_predict) # 計算調倉數量 change = {} for stock in account.universe: if y_predict>0 and stock not in account.valid_secpos: p = account.referencePrice[stock] order(stock,int(c / p)) if y_predict==0 and stock in account.valid_secpos: order_to(stock,0) #print today,x_predict[3],y_predict ``` ![](https://box.kancloud.cn/2016-07-30_579cbdac2fb5a.jpg) ``` 713 0.580056179775 0.334384858044 0.445224719101 ``` This is an empty markdown cell
                  <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>

                              哎呀哎呀视频在线观看