[專題實作]以Yfinance之臺股資料進行市場寬度指標驗證-Step4.匯入檔案以產生策略
讀取和處理數據
讀取數據
python
import pandas as pd
'讀取之前處理好的數據檔案,並將日期格式處理乾淨:'
path4 = r'D:\市場寬度 專題\2020-2024市場寬度與大盤指數.csv' # 從檔案讀取
MW = pd.read_csv(path4)
這段程式碼從指定路徑讀取之前處理好的市場寬度與大盤指數的數據。
處理日期格式
python
MW['Date'] = MW['Date'].apply(lambda x: x[:10])
MW['Date'] = pd.to_datetime(MW['Date'], format="%Y-%m-%d")
MW.columns = ['Date', '20ma_p', '200ma_p', 'TWII']
MW.set_index('Date', inplace=True)
由於原日期格式包含時區資訊,無法直接轉換,因此先提取前10個字元(日期部分),再使用 pd.to_datetime
進行轉換。最後,將欄位名稱重新命名並將 'Date' 設定為索引。
保存處理後的數據
python
path5 = r'D:\市場寬度 專題\2020-2024市場寬度與大盤指數(DT).csv'
MW.to_csv(path5, sep=',', na_rep='', float_format='%.4f', encoding='utf_8_sig')
將處理後的數據保存為新的 CSV 檔案。
準備回測數據
python
from backtesting import Backtest, Strategy
from backtesting.lib import crossover
from backtesting.test import SMA
'資料引入:'
data = pd.DataFrame(MW)
data['Close'] = MW['TWII']
data['Open'] = MW['TWII']
data['High'] = MW['200ma_p']
data['Low'] = MW['20ma_p']
backtesting
套件要求數據至少包含 'Open', 'High', 'Low', 'Close' 這四個欄位,因此將高、低點設定為 200 日和 20 日移動平均線,並將開盤價和收盤價設為大盤指數。
定義交易策略
python
'策略區'
class M20_MA200_15p(Strategy): # 給定名稱,使用 Strategy 功能
n = 1
s = 180
def init(self):
self.p20 = self.I(SMA, self.data.Low, self.n) # 定義第一條參考線
self.p200 = self.I(SMA, self.data.High, self.n) # 定義第二參考線
def next(self):
if self.p200 < 0.1:
if self.p20 < 0.1: # 家數雙雙破低-買進
self.buy() # buy 就是用收盤價
elif 0.3 >= self.p200:
if crossover(self.p20, self.p200): # 低位檔黃金交叉買進
self.buy()
elif self.p200 > 0.8: # 家數雙雙創高-賣出
if self.p20 > 0.7:
self.position.close() # 出清部位,.sell 是做空
elif self.p200 <= 0.4: # 中位檔死亡交叉-賣出
if crossover(self.p200, self.p20):
self.position.close()
定義了一個名為 M20_MA200_15p
的策略類,繼承自 Strategy
。在 init
方法中,初始化 20 日和 200 日移動平均線。在 next
方法中,定義了多個買賣條件,如低位黃金交叉買進、中位死亡交叉賣出等。
執行回測
python
'回測:'
invest_plan = Backtest(data, M20_MA200_15p, cash=100000, commission=0.001425)
invest_return = invest_plan.run()
print(invest_return) # 印出結果
invest_plan.plot(superimpose=True, plot_pl=True) # 績效操作圖
設置回測參數,包括初始資金和手續費,並執行回測。最後,印出回測結果並繪製績效圖表。
總結
這段程式碼通過讀取和處理市場寬度與大盤指數的數據,定義一個基於移動平均線的交易策略,並進行回測。該策略旨在通過市場寬度指標來判斷買賣時機,以期獲得較好的投資回報。這樣的自動化流程不僅提高了數據處理效率,還能幫助投資者制定更加精確的交易決策。
留言
張貼留言