【发布时间】:2019-05-09 14:28:27
【问题描述】:
我有每天包含开盘价、最高价、最低价、收盘价的股票价格数据。我正在创建一个新列“信号”,它将根据某些条件采用值“信号”或“无”。
每次df['signal']=="signal",我们都必须将它与df['signal']=="signal"的前3次出现进行比较。让我们想象当前发生的事件是第四个信号。因此,之前出现的df['signal']=="signal" 将是第三个信号,偶数之前的将是第二个信号,之前的信号将是第一个信号。
我需要检查信号 4 和信号 3 之间的 df['low'] 的最小值是否大于信号 1 和信号 2 之间的 df['low'] 的最小值。
如果更大,我需要一个新列 df['trade']=="Buy"。
Sample data
No Open High Low Close signal Trade
1 75 95 65 50 signal
2 78 94 74 77 none
3 83 91 81 84 none
4 91 101 88 93 signal
5 104 121 95 103 none
6 101 111 99 105 none
7 97 108 95 101 signal
8 103 113 102 106 none
9 108 128 105 114 signal BUY
10 104 114 99 102 none
11 110 130 105 115 signal BUY
12 112 122 110 115 none
13 118 145 112 123 none
14 123 143 71 133 signal NONE
15 130 150 120 140 none
在上面的示例数据中,在第 9 行中,df['Trade']=="BUY" 发生,因为 df['Low']=95 的最小值介于此 df['signal']="signal " 和之前的 df['signal']="signal" 大于 df['signal']="signal" 的前两次出现之间的 df['Low']= 65 的最小值。
同样,在第 14 行,df['Trade']="None" 发生,因为此信号和前一个信号之间的 df['Low']=71 的最小值不大于 df[ 的最小值'Low']=99 在前两个信号之间。
我需要代码方面的帮助来实现这一点。
import pandas as pd
import numpy as np
import bisect as bs
df = pd.read_csv("Nifty.csv")
cols = ['No', 'Low', 'signal']
df['5EMA'] = df['Close'].ewm(span=5).mean()
df['10EMA'] = df['Close'].ewm(span=10).mean()
condition1 = df['5EMA'].shift(1) < df['10EMA'].shift(1)
condition2 = df['5EMA'] > df['10EMA']
df['signal'] = np.where(condition1 & condition2, 'signal', None)
df1 = pd.concat([df[cols], df.loc[df.signal=='signal',cols].assign(signal='temp')]) \
.sort_values(['No', 'signal'],ascending=[1,0])
df1['g'] = (df1.signal == 'signal').cumsum()
df1['Low_min'] = df1.groupby('g').Low.transform('min')
s = df1.groupby('g').Low.min()
buy = s[s.shift(1) > s.shift(3)].index.tolist()
m1 = df1.signal.eq('signal') & df1.g.gt(3)
m2 = df1.g.isin(buy) & m1
df1['trade'] = np.select([m2, m1], ['Buy', 'None'], '')
df['trade'] = ''
df.trade.update(df1.loc[df1.signal=='signal',"trade"])
print(df)
【问题讨论】:
-
添加一些示例数据,主要是 5-10 行就足够了。比通读代码更容易直观地看到您尝试在数据中执行的操作。查找有关提出“好”熊猫问题的更多信息here
-
@Erfan 您好,感谢您的回复。我添加了示例数据来解释我打算做什么。
标签: python pandas trading algorithmic-trading