我正在尝试建立一个涉及多个外汇对和自定义指数的交易策略。他们都有 OHLC 数据,我需要将特定指标应用于某些而不是其他。
每个指数和对包含以下列:
date, open, high, low, close
我希望将所有这些外汇对和指数都放在一个数据框中。我首先尝试使用以下方法:
index_list = ['index_1', 'index_2', ...]
pair_list = ['pair_1', 'pair_2', ...]
df = pd.read_csv('index_1.csv')
df['type'] = 'index'
df['name'] = index_list[0]
for index in index_list[1:]:
df1 = pd.read_csv(f'{index}.csv')
df1['type'] = 'index'
df1['name'] = index
df.append(df1)
for pair in pair_list:
df1 = pd.read_csv(f'{pair}.csv')
df1['type'] = 'pair'
df1['name'] = pair
df.append(df1)
df = df.set_index(['date', 'type', 'name']).sort_index()
这按预期工作并返回以下数据框:
date type name open high low close
2020-01-01 00:00:00 index index_1 0.60866 0.60906 0.60834 0.60900
index_2 0.69038 0.69040 0.69011 0.69030
pair pair_1 0.73149 0.73151 0.73131 0.73140
pair_2 1.03914 1.03945 1.03900 1.03924
... ... ... ... ... ... ...
当我想将一些特定指标应用于“货币”而不是“配对”(“类型”列的值)时,问题就开始了。
我使用 pandas-ta 来实现指标。例如,我使用 RSI 尝试了以下操作:
df.loc[(df.index.get_level_values('type') == 'currency')].ta.rsi(close=df.loc[(df.index.get_level_values('type') == 'currency')].close, length=14, append=True)
但后来我有以下错误:
/home/user/.local/lib/python3.8/site-packages/pandas/core/frame.py:4300: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
return super().rename(
/home/user/miniconda3/lib/python3.8/site-packages/pandas_ta/core.py:387: SettingWithCopyWarning:
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
df[ind_name] = result
尽管“append = True”,但 RSI 列并未出现在数据框中。有人可以告诉我我的方法有什么问题吗?
更一般地说,是否有更好/更智能的方式来处理使用 pandas 的单一交易策略的多个 OHLC 数据?我应该使用几个熊猫数据框,还是尝试将它们全部放在一个中是一种有效的方法?如果是后者,你有什么建议?