python-3.x - 使用 plotly 或 pandas 在烛台图上识别和提取 OHLC 模式?
问题描述
我正在使用 Ameritrade API 和 pandas/plotly 以分钟为单位绘制简单的股票价格图表,我想使用生成的图表的一些属性来识别和提取特定的烛台模式。
在这里,我构建了我的数据框并将其绘制为烛台:
frame = pd.DataFrame({'open': pd.json_normalize(df, 'candles').open,
'high': pd.json_normalize(df, 'candles').high,
'low': pd.json_normalize(df, 'candles').low,
'close': pd.json_normalize(df, 'candles').close,
'datetime': pd.DatetimeIndex(pd.to_datetime(pd.json_normalize(df, 'candles').datetime, unit='ms')).tz_localize('UTC').tz_convert('US/Eastern')})
fig = go.Figure(data=[go.Candlestick(x=frame['datetime'],
open=frame['open'],
high=frame['high'],
low=frame['low'],
close=frame['close'])])
fig.update_layout(xaxis_rangeslider_visible=False)
fig.show()
情节:
我正在寻找的模式只是每天四根连续红色蜡烛交易中的第一组。
红色蜡烛可以定义为:
close < open & close < prev.close
所以在这种情况下,我无法在prev.close
交易的第一分钟访问,因为我没有上市前/延长时间的数据。
我想知道是否甚至可以访问 plotly 图形数据,因为如果是这样,我可以提取第一组四个连续red
蜡烛及其数据 - 但如果没有,我将定义我的模式并使用 pandas 提取它但还没有到那一步。
使用 plotly 或 pandas 会更容易吗?一个简单的实现会是什么样子?
解决方案
不确定Candlestick
,但在熊猫中,你可以尝试这样的事情。注意:我假设每个工作日的数据已经有 1 行并且已排序。第一件事是创建一个名为 red 的列 True ,其中您问题中描述的红色蜡烛的条件为 True :
df['red'] = df['close'].lt(df['open'])&df['close'].lt(df['close'].shift())
然后你想看看它是否连续 4 天发生并假设数据按升序排序(通常),想法是用 [::-1] 反转数据框,使用rolling
4 的窗口,sum
创建的列红色就在上面并检查它等于 4 的位置。
df['next_4days_red'] = df[::-1].rolling(4)['red'].sum().eq(4)
那么如果你想要连续 4 个红色交易日开始的日子,你可以这样做loc
:
df.loc[df['next_4days_red'], 'datetime'].tolist()
这里有一个带有虚拟变量的小例子:
df = pd.DataFrame({'close': [10,12,11,10,9,8,7,10,9,10],
'datetime':pd.bdate_range('2020-04-01', periods=10 )})\
.assign(open=lambda x: x['close']+0.5)
df['red'] = df['close'].lt(df['open'])&df['close'].lt(df['close'].shift())
df['next_4days_red'] = df[::-1].rolling(4)['red'].sum().eq(4)
print (df.loc[df['next_4days_red'], 'datetime'].tolist())
[Timestamp('2020-04-03 00:00:00'), Timestamp('2020-04-06 00:00:00')]
注意:它捕获了两个连续的日期,因为它连续减少了 5 天,不确定在这种情况下您是否想要两个日期
推荐阅读
- scala - scala中的特别函数递归地连接两个列表:不使用“concat”
- python - Flask:如何将上传的文件作为输入传递给方法?AttributeError: '_io.BytesIO' 对象没有属性 'lower'
- reactjs - s.indexOf 不是 Function.n.fromString 的函数
- azure-active-directory - 图形 API 无法访问“https://graph.microsoft.com/v1.0/me/messages”端点
- html - 试图弄清楚如何使网站滚动
- python - 调用一个函数来打印一些东西
- visual-studio-code - Lua 与 VS 代码
- python - 在数据框中搜索字符串并将找到的数字增加 1
- angular - 没有互联网连接时如何显示自定义组件
- c# - 如何使用信号器允许 cors