量化投資 課件 第4章 策略回測_第1頁
量化投資 課件 第4章 策略回測_第2頁
量化投資 課件 第4章 策略回測_第3頁
量化投資 課件 第4章 策略回測_第4頁
量化投資 課件 第4章 策略回測_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

策略回測思想與目的基本思想通過歷史數(shù)據(jù),盡可能還原實際交易過程,對策略進行驗證和優(yōu)化目的通過交易模擬找出策略中的缺陷和問題,并依據(jù)回測結(jié)果進行優(yōu)化分析并確定策略中的合理假設(shè),以及策略可能的應(yīng)用場景和適用范圍通過分析比較不同(參數(shù))設(shè)置下的策略表現(xiàn),幫助確定策略最優(yōu)設(shè)置策略

回測缺陷&優(yōu)化假設(shè)&應(yīng)用參數(shù)

設(shè)置基本假設(shè)與流程基本假設(shè):歷史會重復使用歷史數(shù)據(jù)進行測試的結(jié)果可用來評估策略在未來市場上的應(yīng)用效果在歷史數(shù)據(jù)上不能盈利的策略在未來一般也很難盈利在歷史數(shù)據(jù)上表現(xiàn)優(yōu)秀的策略在未來很可能也會帶來較好的收益一般流程:策略實現(xiàn)、目標與范圍設(shè)定、數(shù)據(jù)收集與處理、策略運行、結(jié)果分析、策略調(diào)整等環(huán)節(jié)常用平臺與工具回測工具與平臺主要功能:提供基礎(chǔ)(功能)接口和(歷史)數(shù)據(jù)模擬交易流程,執(zhí)行交易策略,評估策略性能常用平臺與工具:在線平臺:聚寬、優(yōu)礦、掘金、萬礦等離線平臺:

Backtrader、BigQuant、zipline、vn.py等工具庫:TALib、QuantLib、PyQL、quantdsl等聚寬Joinquant服務(wù):

1.選取參數(shù),自動生成策略

2.可以自己編寫代碼,生成策略(有代碼顯示)

語言:

Python,R

數(shù)據(jù)庫:

股票、基金、指數(shù)、股指、股票財務(wù)數(shù)據(jù)、金融期貨數(shù)據(jù)、行業(yè)概念數(shù)據(jù)、宏觀經(jīng)濟數(shù)據(jù)等

支持的功能:日級、分鐘級、tick級的回測與模擬交易

優(yōu)勢:

1.支持回測中訪問網(wǎng)絡(luò)

2.社區(qū)活躍,還有銷售策略活動

策略基本框架策略基本框架:初始化+迭代執(zhí)行初始化:策略開始運行前要做的事,如初始化全局變量、資產(chǎn)和數(shù)據(jù)范圍等迭代執(zhí)行:周期循環(huán):策略開始后,每個周期要做的事,判斷是否交易以及如何交易事件驅(qū)動:策略開始后,設(shè)定的事件發(fā)生時執(zhí)行,判斷是否交易以及如何交易回測過程流程:準備好策略,實現(xiàn)handle_data函數(shù)初始設(shè)置:回測起止日期、初始資金、調(diào)倉間隔(如每天)、股票池開始回測(循環(huán)迭代)策略引擎根據(jù)選擇的股票池和日期,取得股票數(shù)據(jù),然后定期(如每天)調(diào)用handle_data函數(shù)在handle_data同時告訴用戶現(xiàn)金、持倉情況和股票在上一天的數(shù)據(jù).在函數(shù)中,用戶還可以調(diào)用函數(shù)獲取任何多天的歷史數(shù)據(jù),然后做出調(diào)倉決定當用戶下單后,策略引擎會根據(jù)實際交易情況處理訂單說明:可以在handle_data中調(diào)用record()函數(shù)記錄某些數(shù)據(jù),引擎會以圖表的方式顯示在回測結(jié)果頁面用戶可以在任何時候調(diào)用/debug/warn/error函數(shù)來打印一些日志回測結(jié)束后,引擎會畫出用戶收益和基準收益的曲線,列出每日持倉,每日交易和一系列風險數(shù)據(jù)神奇公式選股模型公司排序:將目標公司的投資回報率和收益率全部計算出來然后,按照投資回報率和收益率排序打分:

如果是1000家公司,最好的是1000分,最后一名就是1分每個公司的最終分值就是兩個數(shù)字相加最后按照最終分數(shù)來排序,挑選前n佳公司來投資投資策略與步驟:

1、按投資回報率和收益率合并后排序的前n個公司,買入其股票

2、在第一次投入投資金額的20%到33%

3、每隔兩三個月按照步驟一去投資買入

4、持有一種股票滿一年后就將其賣出,不管是否盈利

5、用賣股票的錢和新增投資買入神奇公司股票,替換已賣出的公司好

公司股票便宜高性價比股票神奇公式:實現(xiàn)思路預處理選定股票列表范圍(原始股票池),去除部分股票如:在滬深成分股中去除長期低PE股票(銀行、鋼鐵、煤炭)和ST股票股票排序選定投資回報率和收益率的評價指標,例如:ROE和1/PE計算股票池中每只股票的ROE和1/PE,排序和挑選分數(shù)排在前十的股票分批建倉第一年的每季度重新獲取滿足條件股票,對新股按照原始倉位的25%建倉定期調(diào)倉每個季度檢測股票是否已持倉滿一年,如果是則賣出這只股票用賣股票的錢和新增投資買入同等資金的神奇公司股票止損策略在檢測股票持倉時間時,強制賣出虧損超過10%的股票關(guān)鍵代碼神奇公式defget_stock_list(context,today):#獲取股票池security_list=st_filter(security_list)year=context.current_dt.yeardf=get_fundamentals(query(valuation.code,indicator.roe,#ROE凈資產(chǎn)收益率ROE(%)valuation.pe_ratio,#PE市凈率).filter(valuation.code.in_(security_list)),

statDate=str(year-1))#用前一年的數(shù)據(jù)計算(統(tǒng)計)指標#以股票名詞作為indexdf.index=df['code'].valuesdf['1/pe']=1/df['pe_ratio']#獲取綜合得分df['point']=df[['roe','1/pe']].rank().T.apply(f_sum)name_list=list(map(lambda

x:get_security_info(x).display_name,df[['code']].values.flatten()))df.insert(0,'name',name_list)#按得分進行排序,取10只股票df=df.sort_index(by=['point'],ascending=False).head(N)['code’]returnstock_list回測結(jié)果12開源回測引擎:backtraderbacktrader簡介開源的Python量化回測框架(支持實盤交易)品種多:股票、期貨、期權(quán)、外匯、數(shù)字貨幣周期全:Ticks級、秒級、分鐘級、日度、周度、月度、年度速度快:支持pandas矢量運算、多策略并行運算組件多:內(nèi)置Ta-lib指標庫、PyFlio分析、alphalens多因子庫等擴展靈活:可集成TensorFlow、PyTorch等機器學習模塊安裝簡單:

在pythonconsole中鍵入“pipinstallbacktrader”社區(qū)活躍、幫助文檔齊全回測主體:Cerebro策略類:Strategyinit(

):

數(shù)據(jù)初始化、指標計算notify(

):監(jiān)控回測狀態(tài),狀態(tài)變動時被自動調(diào)用next(

):單位時間間隔調(diào)用,負責邏輯判斷,生成買賣信號,發(fā)出訂單請求回測引擎框架邏輯if__name__==‘__main__’:

#1.創(chuàng)建回測實體

cerebro=bt.Cerebro()

#2.添加策略

cerebro.addstrategy(TestStrategy)

#3.添加數(shù)據(jù)

filepath='./data/000001.csv'

#本地數(shù)據(jù)文件

dataframe=pd.read_csv(filepath,index_col=0,parse_dates=True)#讀入數(shù)據(jù)

dataframe['openinterest']=0#添加一列,使傳入數(shù)據(jù)符合框架要求

data=bt.feeds.PandasData(dataname=dataframe,#設(shè)置回測起止時間

fromdate=datetime.datetime(2013,1,1),

todate=datetime.datetime(2015,1,1))

cerebro.adddata(data)回測主體:主函數(shù)main#4.策略流程配置

cerebro.broker.set_cash(10000)#設(shè)置回測金額

cerebro.addsizer(bt.sizers.FixedSize,stake=100)#設(shè)置買賣股數(shù)或金額比例

cerebro.broker.setcommission(commission=0.001)#設(shè)置手續(xù)費#5.添加分析器

cerebro.addanalyzer(bt.analyzers.AnnualReturn,_name=‘AnnualReturn’)#年回報率

#6.運行策略

results=cerebro.run()

#7.取出回測指標結(jié)果

st0=results[0]

#索引1、2…

Annual_Return=st0.analyzers.AnnualReturn.get_analysis()#8.可視化展示

cerebro.plot()回測主體:主函數(shù)main(續(xù))1.數(shù)據(jù)獲取將時間序列稱作lines(時間線)由adddata()將數(shù)據(jù)傳入策略若只回測一只股票,則用data=self.data若對一個股票池進行回測:data=self.datas[k]#股票池中第k支股票數(shù)據(jù)2.技術(shù)指標計算寫策略時,有時需要一些技術(shù)指標,例如MACD/KDJ/ROC等,在初始化函數(shù)中計算方法一:利用自身指標backtrader.indicators方法二:利用指標庫Ta-lib中的方法classTestStrategy(bt.Strategy):

def__init__(self):

#初始化函數(shù),策略循環(huán)前被調(diào)用

defnotify_order(self,order):

#訂單監(jiān)視函數(shù)

#監(jiān)視訂單變動狀態(tài)

defnext(self):

#策略核心部分

#編寫生成買賣信號的邏輯策略類:初始化函數(shù)def__init__(self):

self.close=self.data.close#獲取股票的收盤價時間序列

self.macd=bt.ind.MACD(self.data.close)#計算MACD均線

self.order=None

#TokeeptrackofordersclassTestStrategy(bt.Strategy):

def__init__(self):

#初始化函數(shù),策略循環(huán)前被調(diào)用

defnotify_order(self,order):

#訂單監(jiān)視函數(shù)

#監(jiān)視訂單變動狀態(tài)

defnext(self):

#策略核心部分

#編寫生成買賣信號的邏輯next()函數(shù)策略類核心組成部分;策略回測開始后,每前進一個時間單位,則next()將被調(diào)用一次,直到回測結(jié)束;以MACD均線(擇時)策略為例:當MACD均線由下上穿零線時視為買入信號;

當MACD均線由上下穿零線時視為賣出信號策略類:next()函數(shù)defnext(self

):

position=self.positionor0#持倉數(shù)量

#上穿零線

ifself.macd[-1]<0.0andself.macd[0]>0.0:

self.order=self.buy()#生成買入訂單

#下穿零線

ifself.macd[-1]>0.0andself.macd[0]<0.0:

ifposition>0:#有持倉

#生成賣出訂單

self.order=self.sell(size=position)#5.添加分析器

cerebro.addanalyzer(bt.analyzers.AnnualReturn,_name='AnnualReturn')#年回報率

#6.運行策略

results=cerebro.run()

#7.取出回測指標結(jié)果

st0=results[0]

Annual_Return=st0.analyzers.AnnualReturn.get_analysis()Analyzer:分析器分析器:Analyzers回測陷阱

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論