Ну, я решил углубиться в сюжетную документацию и посмотреть, смогу ли я найти способ сделать это. Оказывается, это не так уж важно. Я начинаю любить Plotly все больше и больше.
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wed Oct 23 22:17:44 2019
@author: TysonU
"""
from plotly.offline import plot
import plotly.graph_objects as go
import random
import pandas as pd
#Create random OHLC and Volume
high = 40
low = 20
dev = 1
days = 100
fake_market = []
for each in range(days):
ohlc = []
ohlc.append(each)
if each == 0:
o = random.randrange(low, high)
ohlc.append(o)
else:
ohlc.append(c) #I know
h = random.randrange(o, high)
ohlc.append(h)
l = random.randrange(low, o)
ohlc.append(l)
c = random.randrange(l, h)
ohlc.append(c)
fake_market.append(ohlc)
fake_volume = [[x, random.randrange(10, 30)] for x in range(low, (high+1))]
df = pd.DataFrame(fake_market, columns=["Date", "Open", "High", "Low", "Close"])
df2 = pd.DataFrame(fake_volume, columns=["Volume", "Price"])
#Do all the plotly stuff
fig = go.Figure(
data=[
go.Bar(
x=[str(x) for x in df2.Price.to_list()],
y=[str(x) for x in df2.Volume.to_list()],
orientation="h",
xaxis="x",
yaxis="y",
visible=True,
showlegend=False
),
go.Candlestick(
x=[str(x) for x in df.Date.to_list()],
open=[str(x) for x in df.Open.to_list()],
high=[str(x) for x in df.High.to_list()],
low=[str(x) for x in df.Low.to_list()],
close=[str(x) for x in df.Close.to_list()],
xaxis="x2",
yaxis="y2",
visible=True,
showlegend=False
)
],
layout=go.Layout(
title=go.layout.Title(text="Candlestick With Volume Profile"),
xaxis=go.layout.XAxis(
side="top",
range=[0, 300],
rangeslider=go.layout.xaxis.Rangeslider(visible=False),
showticklabels=False
),
yaxis=go.layout.YAxis(
side="left",
range=[low, high],
showticklabels=False
),
xaxis2=go.layout.XAxis(
side="bottom",
title="Date",
rangeslider=go.layout.xaxis.Rangeslider(visible=False),
overlaying="x"
),
yaxis2=go.layout.YAxis(
side="right",
title="Price",
range=[low, high],
overlaying="y"
)
)
)
template = ["plotly", "plotly_white", "plotly_dark", "ggplot2", "seaborn", "none"]
fig.update_layout(template=template[2])
plot(fig)
Не уверен, каков закон для публичной публикации данных о запасах, поэтому я создал простой генератор для генерации данных OHLC и Volume. Реальные биржевые данные сделали бы график менее беспорядочным.
Что-то, что я еще не понял, - это сторона, на которой находятся бары. В настоящее время они находятся на левой стороне, но было бы хорошо, чтобы они были на правой стороне. Должно быть что-то легкое, хотя.
Ну, надеюсь, это поможет кому-нибудь когда-нибудь. Хорошего дня!