【问题标题】:Pandas DataFrame Logic - PythonPandas DataFrame 逻辑 - Python
【发布时间】:2017-04-08 19:18:52
【问题描述】:

为了好玩而尝试回测交易逻辑,但我似乎可以理解如何利用 numpy 做出决策。例如,我想根据数据是低于还是高于上下线来设置 df['position'] = 1 或 -1。如果 Data = 上一行。一旦数据 >= 上线,我想设置 position = -1 并保持在 -1 然后重复。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

data = np.random.standard_normal((5, 100)).flatten()
data = data.cumsum()

df = pd.DataFrame({'Data': data})
df['std'] = df['Data'].rolling(50).std()
df['SMA'] = df['Data'].rolling(50).mean()
df['upper'] = df['SMA'] + (2 * df['std'])
df['lower'] = df['SMA'] - (2 * df['std'])

df[['Data', 'SMA', 'upper', 'lower']].plot(figsize=(10, 6))

df['position'] = 0
plt.show()

在这里我尝试这样做但失败了,因为我不知道如何正确地做到这一点。

df['islower'] = np.where(df['Data'] < df['lower'], 1, 0)
df['isupper'] = np.where(df['Data'] > df['upper'], 1, 0)
df['position'] = np.where(df['isupper']==1, -1, 0) | np.where(df['islower']==1, 1, 0)

【问题讨论】:

  • 你失败了是什么意思?你得到什么错误?或者你想显示你得到的数据?
  • 我不知道如何设置 df['position'] = 1 if df['Data'] df['上']。我可以在没有熊猫的情况下使用状态逻辑来做到这一点,但目标是使用数据框来做到这一点。
  • 下面的答案不是您要找的吗?如果没有,我建议您显示您想要获得的输出与您实际获得的输出
  • 顺便提一下,numpypandas 都有一个 where 函数。我认为您正在寻找的是来自pandas
  • 是的,这显示了如何正确判断数据是低于还是高于线,但是如果我们触及底线/顶线,我如何设置 position = 1 或 -1?

标签: python pandas numpy logic


【解决方案1】:

我想你想做的是:

df['islower'] = df['islower'].where(df['Data'] < df['lower'], 1, 0)    
df['isupper'] = df['isupper'].where(df['Data'] < df['upper'], 1, 0)    

【讨论】:

  • 是的,这显示了如何正确判断数据是低于还是高于行,但是如果我们触及底线/顶线,我如何设置 position = 1 或 -1?
  • 这不是你要找的吗?
  • 我想弄清楚如何设置 df['position'] = np.where(df['isupper']==1, -1, 0) | np.where(df['islower']== 1, 1, 0) 如果您使用 df[['position']].plot(figsize=(10, 6)) 并查看,我使用的代码不正确结果
  • 你的意思是如何有一个 OR 条件?
  • 我猜,我不确定这是否是在查看 df['islower'] 和 df['isupper'] 时设置 position = 1 或 -1 的最佳方法
猜你喜欢
  • 2018-05-05
  • 1970-01-01
  • 2017-10-11
  • 1970-01-01
  • 2021-03-04
  • 2020-12-18
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多