成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

用 Python 基于均線交叉策略進行回測

開發 后端
本篇文章中,我將用 Python 構建一個簡單的移動平均線交叉交易策略進行回測,并使用 標準普爾 500 指數(S&P500) 進行測試。

 [[419581]]

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

本篇文章中,我將用 Python 構建一個簡單的移動平均線交叉交易策略進行回測,并使用 標準普爾 500 指數(S&P500) 進行測試。

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

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

我們將首先使用 pandas_datareader 從 Yahoo Finance 下載標準普爾 500 指數從 2000 年第一個交易日到今天的價格數據,如下所示: 

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

讓我們快速檢查一下數據的格式。 

  1. sp500.head() 

讓我們創建一個收盤價的折線圖,看看標準普爾在此期間的表現如何。 

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

我們要實施的趨勢策略是基于兩條簡單移動平均線的交叉;2 個月(42 個交易日)和 1 年(252 個交易日)移動平均線。我們的第一步是創建移動平均值并同時將它們附加到我們現有的 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) 

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

在這里我們看到確實已正確添加了移動平均值列表。現在讓我們繼續在同一圖表上繪制收盤價和移動平均線。 

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

我們的基本數據集現在已經非常完整,剩下要做的就是設計一個規則來生成我們的交易信號。我們將有 3 個基本規則:

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

2) 暫停交易 – 無倉位。

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

創建這些信號的第一步是向 DataFrame 添加一個新列,它只是兩個移動平均線之間的差異: 

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

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

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

最后一行代碼生成如下結果: 

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

表明在我們選擇回測的時間段內,有2077個交易日,42天移動平均線位于252天移動平均線下方50多點,有1865個交易日,42天移動平均線位于252天移動平均線上方50多點。

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

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

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

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

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

請注意我們如何將 sp[‘Close’] 列表向下移動,以便我們使用前一天收盤時的“Stance”來計算第二天的回報。

現在我們可以在同一圖表上繪制標準普爾 500 指數的回報與移動平均交叉策略的回報進行比較: 

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

我們可以看到,盡管該策略在市場低迷期間表現得相當好,但在市場反彈或只是向上趨勢時表現不佳。 

 

責任編輯:龐桂玉 來源: Python中文社區
相關推薦

2024-12-23 07:20:00

2021-06-07 09:00:53

Python回測分析Python基礎

2021-06-07 23:57:59

Python 游戲Pgzero

2020-07-23 09:15:25

Python機器學習聚類分析

2021-06-08 11:00:59

pgzeroPython游戲

2021-04-09 20:49:44

PythonOCR圖像

2022-11-28 16:04:16

2021-09-13 11:59:30

Python股票代碼

2022-03-28 07:33:13

GatekeeperOPA 策略管理CRD

2022-03-30 07:45:41

KyvernoAPI開源項目

2011-07-28 14:07:30

2022-03-16 08:21:34

ToB策略前端

2011-04-19 10:57:18

2010-03-12 13:32:02

python2.6

2019-11-20 12:30:21

Python編程語言語音識別

2020-06-17 08:55:22

mysqlslapsysbenchMySQL

2022-06-02 13:59:57

數據遷移數據

2021-07-21 16:16:40

PythonNLTK編程語言

2018-04-24 10:45:00

Python人工智能圖像識別

2025-01-13 08:20:00

Python數據抓取
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区在线不卡 | 精品欧美一区免费观看α√ | 欧美精| 97久久超碰| 综合国产第二页 | 亚洲视频中文字幕 | 亚州综合在线 | 国产一级在线视频 | 在线观看国产www | 男人av在线播放 | 中文字幕国产精品 | 在线播放国产一区二区三区 | 人妖一区| 午夜激情视频在线 | 久久久高清 | 天天操天天怕 | 久久成人国产 | 日日骚av | 国产欧美一区二区三区久久手机版 | 久久精品成人 | 婷婷激情在线 | 欧美在线a | 国产成在线观看免费视频 | 久久久女女女女999久久 | 欧美国产一区二区三区 | 久在线 | 久久久亚洲 | 国产目拍亚洲精品99久久精品 | 国产综合精品一区二区三区 | 国产免费一区二区三区网站免费 | 动漫www.被爆羞羞av44 | 久久久久久亚洲国产精品 | 人人干视频在线 | 欧美日韩一区在线播放 | 午夜久久久 | 一区二区三区四区免费视频 | 午夜二区 | 又爽又黄axxx片免费观看 | 91精品国产色综合久久不卡98 | 精品国产乱码久久久久久闺蜜 | 亚洲国产精品一区二区久久 |