【问题标题】:Pandas column with multiple conditions具有多个条件的 Pandas 列
【发布时间】:2020-11-21 18:25:14
【问题描述】:

我正在学习使用 Pandas 探索交易策略。我听到的算法交易的“Hello World”是移动平均线交叉,其中较短的滚动平均值高于或低于较长的滚动平均值,以分别确定多头和空头头寸。

universe = sorted(os.listdir(f'{os.getcwd()}/Data'))
for u in range(len(universe)):
    universe[u] = universe[u][:-4]

df = pd.DataFrame()
df2 = pd.DataFrame()
df3 = pd.DataFrame()
df4 = pd.DataFrame()

for s in universe:
    df[s] = pd.read_csv(f'Data/{s}.csv', index_col='Date')['Adj Close']
    df2[s] = df[s].rolling(50).mean()
    df3[s] = df[s].rolling(200).mean()
    df4[s] = np.where((df2[s] > df3[s]), 1, 0)

对于 df4,我在 np.where 的真实条件下只有一个 1 来表示 Long。但是我将如何使用另一个条件 np.where((df2[s]

另外,我可能有这样一种情况,即它只在数据中发生一次,但将该信号保持为“1”或“-1”,直到另一个信号将其注册为 0。

所以我想我真的不知道如何在 Pandas DF 中应用 If-else 条件。

非常感谢您的帮助,谢谢

获取样本数据:

ticker = ['STT', 'TROW', 'BIIB', 'ADP', 'COG', 'EMR', 'USB', 'UA', 'AXP', 'WYNN']

for t in ticker:
    try:
        pdr.DataReader(t, data_source='yahoo', start=datetime(2000,1,1), end=datetime(2020,1,1)).to_csv(f'Data/{t}.csv')
    except KeyError:
        pass

【问题讨论】:

  • 请在reproducible way 中提供示例数据。否则人们将无法测试。
  • 好的,我对我的原始帖子进行了编辑以获取示例数据

标签: python-3.x pandas algorithmic-trading


【解决方案1】:

很遗憾,我没有足够的声誉来为您的问题添加评论,因此我会尽量直接回答,尽管我认为我不能 100% 理解您的问题。

如果您拥有的 sn-p 通过在满足条件的地方插入 1 来按预期工作(我想,但没有使用与您完全相同的数据进行测试),那么您可以替换“else”方法的一部分与另一个 np.where

df4[s] = np.where((df2[s] > df3[s]), 1, np.where((df2[s] < df3[s]), -1, 0))

如果 df3df2,则为 1,如果 df3=df2,则为 0。原则上,您可以继续对 np.where 进行这些嵌套调用。

另外,我可能有这样一种情况,即它只在数据中发生一次,但将该信号保持为“1”或“-1”,直到另一个信号将其注册为 0。

我不太明白你的这部分问题,也许你可以详细说明一下,我会尽力提供帮助。

【讨论】:

  • 嗨,这实际上很完美,谢谢。为了澄清您不理解的问题部分,例如我有一个资产突破了 df2[s] > df3[s] 的价格水平,即使价格跌至以下,我也想继续进行该交易直到我达到止损为止。因此,当 df[s] > df[s].shift(1) 在某个价格水平时 df4[s] 应该等于“1”,但即使价格下跌直到另一个信号被记录出来,它也继续为“1”的贸易。我希望这是有道理的。
  • 您可以在 np.where 方法中使用更复杂的条件语句,例如np.where((conditional1)&amp;(conditional2), then this, else that 并使用&amp; (and)| (or)(我认为还有~ for NOT)来链接这些条件。我想这样应该可以检查的不仅仅是 df2[s]>df3[s]。
猜你喜欢
  • 2022-01-23
  • 2018-10-20
  • 2021-04-06
  • 1970-01-01
  • 2019-02-14
  • 1970-01-01
  • 2014-09-08
  • 2021-05-16
  • 2017-11-18
相关资源
最近更新 更多