【发布时间】: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['上']。我可以在没有熊猫的情况下使用状态逻辑来做到这一点,但目标是使用数据框来做到这一点。
-
下面的答案不是您要找的吗?如果没有,我建议您显示您想要获得的输出与您实际获得的输出
-
顺便提一下,
numpy和pandas都有一个where函数。我认为您正在寻找的是来自pandas -
是的,这显示了如何正确判断数据是低于还是高于线,但是如果我们触及底线/顶线,我如何设置 position = 1 或 -1?