日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
用Python基于均線交叉策略進(jìn)行回測

Python中文社區(qū) (ID:python-china)

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括六合網(wǎng)站建設(shè)、六合網(wǎng)站制作、六合網(wǎng)頁制作以及六合網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,六合網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到六合省份的部分城市,未來相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

本篇文章中,我將用 Python 構(gòu)建一個(gè)簡單的移動(dòng)平均線交叉交易策略進(jìn)行回測,并使用 標(biāo)準(zhǔn)普爾 500 指數(shù)(S&P500) 進(jìn)行測試。

一個(gè)簡單的移動(dòng)平均線交叉策略可能是使用技術(shù)指標(biāo)的量化交易策略的最簡單示例之一,在用 Python 進(jìn)行與財(cái)務(wù)數(shù)據(jù)相關(guān)的分析時(shí),首先導(dǎo)入我們所需的模塊(掃描本文最下方二維碼獲取全部完整源碼和Jupyter Notebook 文件打包下載。): 

 
 
 
 
  1. import pandas as pd  
  2. import numpy as np  
  3. from pandas_datareader import data 

我們將首先使用 pandas_datareader 從 Yahoo Finance 下載標(biāo)準(zhǔn)普爾 500 指數(shù)從 2000 年第一個(gè)交易日到今天的價(jià)格數(shù)據(jù),如下所示: 

 
 
 
 
  1. sp500 = data.DataReader('^GSPC', 'yahoo',start='1/1/2000') 

讓我們快速檢查一下數(shù)據(jù)的格式。 

 
 
 
 
  1. sp500.head() 

讓我們創(chuàng)建一個(gè)收盤價(jià)的折線圖,看看標(biāo)準(zhǔn)普爾在此期間的表現(xiàn)如何。 

 
 
 
 
  1. sp500['Close'].plot(grid=True,figsize=(8,5)) 

我們要實(shí)施的趨勢策略是基于兩條簡單移動(dòng)平均線的交叉;2 個(gè)月(42 個(gè)交易日)和 1 年(252 個(gè)交易日)移動(dòng)平均線。我們的第一步是創(chuàng)建移動(dòng)平均值并同時(shí)將它們附加到我們現(xiàn)有的 sp500 DataFrame 中的新列表中。 

 
 
 
 
  1. sp500['42d'] = np.round(sp500['Close'].rolling(window=42).mean(),2)  
  2. sp500['252d'] = np.round(sp500['Close'].rolling(window=252).mean(),2) 

上面的代碼既創(chuàng)建了列表,又自動(dòng)將它們添加到我們的 DataFrame 中。我們可以看到如下圖表(在這里使用.tail調(diào)用,因?yàn)橐苿?dòng)平均線實(shí)際上直到第 42 天和第 252 天才有3值,因此在.head調(diào)用中僅顯示為NaN):

在這里我們看到確實(shí)已正確添加了移動(dòng)平均值列表?,F(xiàn)在讓我們繼續(xù)在同一圖表上繪制收盤價(jià)和移動(dòng)平均線。 

 
 
 
 
  1. sp500[['Close','42d','252d']].plot(grid=True,figsize=(8,5)) 

我們的基本數(shù)據(jù)集現(xiàn)在已經(jīng)非常完整,剩下要做的就是設(shè)計(jì)一個(gè)規(guī)則來生成我們的交易信號。我們將有 3 個(gè)基本規(guī)則:

1) 買入信號(做多)——42 天移動(dòng)平均線首次高于 252 天趨勢線 X 點(diǎn)。

2) 暫停交易 – 無倉位。

3) 賣出信號(做空)– 42 天移動(dòng)平均線首次低于 252 天趨勢 X 點(diǎn)。

創(chuàng)建這些信號的第一步是向 DataFrame 添加一個(gè)新列,它只是兩個(gè)移動(dòng)平均線之間的差異: 

 
 
 
 
  1. sp500['42-252'] = sp500['42d'] - sp500['252d'] 

下一步是通過添加我們稱為 Stance 的另一列來形式化信號。我們還將信號閾值“X”設(shè)置為 50(這個(gè)值設(shè)置得很隨意,可以在某些時(shí)候進(jìn)行優(yōu)化)。 

 
 
 
 
  1. X = 50  
  2. sp500['Stance'] = np.where(sp500['42-252'] > X, 1, 0)  
  3. sp500['Stance'] = np.where(sp500['42-252'] < -X, -1, sp500['Stance'])  
  4. sp500['Stance'].value_counts() 

最后一行代碼生成如下結(jié)果: 

 
 
 
 
  1. -1    2077  
  2.  1    1865  
  3.  0     251  
  4. Name: Stance, dtype: int64 

表明在我們選擇回測的時(shí)間段內(nèi),有2077個(gè)交易日,42天移動(dòng)平均線位于252天移動(dòng)平均線下方50多點(diǎn),有1865個(gè)交易日,42天移動(dòng)平均線位于252天移動(dòng)平均線上方50多點(diǎn)。

繪圖顯示了“Stance”的視覺表現(xiàn)。我已將“ylim”(即 y 軸限制)設(shè)置為略高于 1 且略低于 -1,因此我們實(shí)際上可以看到線的水平部分。 

 
 
 
 
  1. sp500['Stance'].plot(lw=1.5,ylim=[-1.1,1.1]) 

在這個(gè)模型中,我們的投資者要么做多市場,要么做空市場,要么持平——這使我們能夠處理市場回報(bào)。如果他是空頭,可以簡單地將當(dāng)天的市場回報(bào)乘以 -1 ,如果他是多頭,則乘以1 ,如果持平,則是0。

因此,我們向 DataFrame 添加另一列以保存索引的每日日收益率,然后將該列乘以“Stance”列以獲得策略回報(bào): 

 
 
 
 
  1. sp500['Market Returns'] = np.log(sp500['Close'] / sp500['Close'].shift(1))  
  2. sp500['Strategy'] = sp500['Market Returns'] * sp500['Stance'].shift(1) 

請注意我們?nèi)绾螌?sp[‘Close’] 列表向下移動(dòng),以便我們使用前一天收盤時(shí)的“Stance”來計(jì)算第二天的回報(bào)。

現(xiàn)在我們可以在同一圖表上繪制標(biāo)準(zhǔn)普爾 500 指數(shù)的回報(bào)與移動(dòng)平均交叉策略的回報(bào)進(jìn)行比較: 

 
 
 
 
  1. sp500[['Market Returns','Strategy']].cumsum().plot(grid=True,figsize=(8,5)) 

我們可以看到,盡管該策略在市場低迷期間表現(xiàn)得相當(dāng)好,但在市場反彈或只是向上趨勢時(shí)表現(xiàn)不佳。


當(dāng)前文章:用Python基于均線交叉策略進(jìn)行回測
URL地址:http://www.5511xx.com/article/djgdjec.html