【发布时间】:2022-10-02 10:37:44
【问题描述】:
要重新创建自己:CANDLESTICK CSV | ORDERS CSV
import pandas as pd
import plotly.graph_objects as go
def plot_ohlcv_plotly(df, orders):
df.columns = [\'Date\', \'Open\', \'High\', \'Low\', \'Close\', \'Volume\']
df[\'Date\'] = pd.to_datetime(df[\'Date\'], unit=\'ms\')
fig = go.Figure(
data=[go.Candlestick(
x=df[\'Date\'],
open=df[\'Open\'],
high=df[\'High\'],
low=df[\'Low\'],
close=df[\'Close\'])])
date = pd.to_datetime(orders[\'timestamp\'], unit=\'ms\')
size = orders[\'size\'] * 0.5
fig.add_trace(go.Scatter(x=date, y=orders[\'price\'], mode=\"markers\", marker = dict(
# color = orders[\'color\'], <-- where color is set
size=size
)
))
fig.show()
df = pd.read_csv(\'btcusdt-orders.csv\')
candles = pd.read_csv(\'btcusdt-candles.csv\')
grouped_multiple = df.groupby([\'timestamp\']).agg({\'size\': [\'sum\'], \'price\': [\'mean\'], \'side\':[\'first\']})
grouped_multiple.columns = [\'size\', \'price\', \'side\']
orders = grouped_multiple.reset_index()
orders = orders.loc[orders[\'size\'] > 20]
# pepe.plot_orders(grouped_multiple)
plot_ohlcv_plotly(candles, orders)
我有一个简单的问题,我似乎无法找到解决方案。
我想要做的是在烛台图的顶部绘制一个散点图,显示在时间范围内发生的大订单。到目前为止,我得到了它的工作。
问题: 如何更改圆圈的颜色以匹配下订单的一侧?因此,\'buy\' 会将那个圆圈设置为 \'green\' 和 \'red\' 来表示 \'sell\'。
到目前为止,我尝试的是 python 三元赋值,但无法评估 Series 真值:
color = \'green\' if orders[\'color\'] == \'buy\' else \'red\'
错误告诉我尝试添加 .all()、.any()、.item()、.bool() 以找出真值,但 .any() 和 .all() 是唯一没有错误的,但它不适用于每一行和绘制的每个圆圈。
我还尝试根据“side”列的值创建一个新的颜色列。但这也不起作用。
这是我绘制 plotly 图表的函数:
def plot_ohlcv_plotly(self, df, orders):
df.columns = [\'Date\', \'Open\', \'High\', \'Low\', \'Close\', \'Volume\']
df[\'Date\'] = pd.to_datetime(df[\'Date\'], unit=\'ms\')
fig = go.Figure(
data=[go.Candlestick(
x=df[\'Date\'],
open=df[\'Open\'],
high=df[\'High\'],
low=df[\'Low\'],
close=df[\'Close\'])])
date = pd.to_datetime(orders[\'timestamp\'], unit=\'ms\')
size = orders[\'size\'] * 0.5
fig.add_trace(go.Scatter(x=date, y=orders[\'price\'], mode=\"markers\", marker = dict(
# color = orders[\'color\'],
size=size
)
))
fig.show()
订单 csv 文件确实包含有销售的行。因此,数据确实包含买入和卖出。
timestamp,size,price,side
1664567708302,20.55188,19560.0,buy
1664568424915,29.02367,19450.0,buy
1664568480558,29.38344,19489.29,buy
1664569334535,30.37156,19490.0,sell
1664572312440,26.37094,19370.0,buy
1664572667156,25.87512,19350.0,sell
1664572746101,20.66364,19300.1,sell
1664572746103,53.43113,19300.0,sell
1664575734563,44.57541,19250.0,sell
1664575734563,31.07015,19250.0,buy
1664575734594,31.94762,19250.0,buy
1664577201634,22.63745,19345.01,sell
1664579865001,29.92649,19390.18,sell
1664581629722,22.07112,19427.09,sell
-
您的 df 包含 6 列,而 CSV 文件包含 4 列?
-
那是对的。烛台图使用 df 数据框绘制,散点图使用订单数据框绘制。有两个 CSV 文件,一个用于蜡烛(6 列),一个用于订单(4 列)
-
您应该将数据框添加到问题中,以帮助其他人重现您的工作以帮助您。
-
@Hamzah 好主意,谢谢你的建议。我将整个项目添加到帖子的顶部。
-
有很多文件,我认为将必要的代码添加到您的问题中以至少绘制上面显示的图表是个好主意。
标签: python plotly scatter-plot