使用 plotly 或 pandas 在烛台图表上识别和提取 OHLC 模式?
Identify and extract OHLC pattern on candlestick chart using plotly or pandas?
我正在使用 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()
The plot:
我正在寻找的形态就是每天连续四根红色蜡烛的交易中的第一组。
红色蜡烛可以定义为:
close < open & close < prev.close
所以在这种情况下,我无法在交易的第一分钟访问 prev.close
,因为我没有 pre-market/extended 小时的数据。
我想知道是否有可能访问绘图数据,因为如果是这样,我可以只提取第一组四个连续 red
蜡烛及其数据 - 但如果不能,我只会定义我的模式并使用 pandas 提取它,但还没有那么远。
使用 plotly 或 pandas 会更容易吗?简单的实现会是什么样子?
不确定 Candlestick
,但在 pandas 中,您可以尝试这样的操作。 注意:我假设每个工作日的数据已经有 1 行并且已排序。 首先是创建一个名为 red 的列,其中包含 True 中描述的红色蜡烛的条件你的问题是真的:
df['red'] = df['close'].lt(df['open'])&df['close'].lt(df['close'].shift())
然后您想看看它是否连续 4 天发生并假设数据按升序排序(通常),想法是使用 [::-1] 反转数据帧,使用 rolling
window 为 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 天的减少,不确定在这种情况下您是否想要这两个日期
我正在使用 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()
The plot:
我正在寻找的形态就是每天连续四根红色蜡烛的交易中的第一组。
红色蜡烛可以定义为:
close < open & close < prev.close
所以在这种情况下,我无法在交易的第一分钟访问 prev.close
,因为我没有 pre-market/extended 小时的数据。
我想知道是否有可能访问绘图数据,因为如果是这样,我可以只提取第一组四个连续 red
蜡烛及其数据 - 但如果不能,我只会定义我的模式并使用 pandas 提取它,但还没有那么远。
使用 plotly 或 pandas 会更容易吗?简单的实现会是什么样子?
不确定 Candlestick
,但在 pandas 中,您可以尝试这样的操作。 注意:我假设每个工作日的数据已经有 1 行并且已排序。 首先是创建一个名为 red 的列,其中包含 True 中描述的红色蜡烛的条件你的问题是真的:
df['red'] = df['close'].lt(df['open'])&df['close'].lt(df['close'].shift())
然后您想看看它是否连续 4 天发生并假设数据按升序排序(通常),想法是使用 [::-1] 反转数据帧,使用 rolling
window 为 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 天的减少,不确定在这种情况下您是否想要这两个日期