import yfinance as yf
import pandas as pd
import talib
code = '2800'
para_dict = {
'sample_period_list': [200],
'fastperiod_list': [12, 16],
'slowperiod_list': [26, 30],
'signalperiod_list': [8, 12],
'higher_percentile_list': [0.8],
'profit_target': [0.04],
'stop_loss': [-0.04]
}
start_date = '2020-01-01'
end_date = '2022-10-10'
df_dict = {}
df = yf.Ticker(code + '.HK').history(start=start_date, end=end_date)
df = df[df['Volume'] > 0]
df = df[['Open', 'High', 'Low', 'Close']]
# df['pnl_percentage'] = df['Open'].pct_change()
df = df.reset_index()
for fastperiod in para_dict['fastperiod_list']:
for slowperiod in para_dict['slowperiod_list']:
for signalperiod in para_dict['signalperiod_list']:
macd_key = str(fastperiod) + '_' + str(slowperiod) + '_' + str(signalperiod)
df['macd'], df['macdsignal'], df['macdhist'] = talib.MACD(df['Close'], fastperiod=fastperiod, slowperiod=slowperiod, signalperiod=signalperiod)
df_dict[macd_key] = df
print(df_dict)
我无法获得不同MACD周期的正确数据帧,相反,我通过以下代码使用不同的MACD周期生成相同的数据帧?为什么
我无法获得不同MACD周期的正确数据帧,相反,我通过以下代码使用不同的MACD周期生成相同的数据帧?为什么
原因是,您指向的是同一个数据帧,如果您更改一个,它们都会更改,因此在您的示例中,它们都将等于最后一个df。
你可以在这些问题中阅读更多:
修改一个数据帧似乎会更改另一个
为什么Panda DataFrames可以互相更改?
作为您案例的解决方案,您需要使用数据帧的副本,而不是实际的数据帧:
df_dict[macd_key] = df.copy()
#instead of df_dict[macd_key] = df
它将解决您的问题