@MasterCopipaster

Как доработать код в matplotlib для рисования фигур над свечным графиком?

Доброе время суток, сидел разбирался с свечными графиками в Python руководствуясь этой статьей. Собственно по самим свечным графикам вопросов нет, но мне надо нарисовать триугольнички над свечами пример на скрине:
643035d9dd77c452836497.png

Мой датафрэйм немного видоизменен по сравнению с примером
prices = pd.DataFrame({'open': [25, 22, 21, 19, 23, 21, 25, 29],
 'close': [24, 20, 17, 23, 22, 25, 29, 31],
 'high': [28, 27, 29, 25, 24, 26, 31, 37],
 'event': [1, 0, 1, 0, 1, 0, 1, 0],
 'low': [22, 16, 14, 17, 19, 18, 22, 26]},

В нем появился event который и отвечает за триугольники 1 это красный, 0 зеленый.
Характиристики триугольника следующие: он должен расоплогатся на некотором растоянии от свечи, и быть не шире свечи. Красные расоплогаются сверху над свечей зеленые снизу.
Собственно вопрос: как мне это сделать? я ни как не могу нагуглить что то похожее, а придумать свое не получается.

Полный код для восрпоизведения:

import pandas as pd
import matplotlib.pyplot as plt

#create DataFrame
prices = pd.DataFrame({'open': [25, 22, 21, 19, 23, 21, 25, 29],
 'close': [24, 20, 17, 23, 22, 25, 29, 31],
 'high': [28, 27, 29, 25, 24, 26, 31, 37],
 'event': [1, 0, 1, 0, 1, 0, 1, 0],
 'low': [22, 16, 14, 17, 19, 18, 22, 26]},
 index=pd.date_range (" 2021-01-01", periods=8, freq=" d "))

#create figure
plt.figure()

#define width of candlestick elements
width = .2
width2 = .02

#define up and down prices
up = prices[prices. close >=prices. open ]
down = prices[prices. close <prices. open ]

#define colors to use
col1 = 'black'
col2 = 'steelblue'

#plot up prices
plt.bar (up. index ,up. close -up. open ,width,bottom=up. open ,color=col1)
plt.bar (up. index ,up. high -up. close ,width2,bottom=up. close ,color=col1)
plt.bar (up. index ,up. low -up. open ,width2,bottom=up. open ,color=col1)

#plot down prices
plt.bar (down. index ,down. close -down. open ,width,bottom=down. open ,color=col2)
plt.bar (down. index ,down. high -down. open ,width2,bottom=down. open ,color=col2)
plt.bar (down. index ,down. low -down. close ,width2,bottom=down. close ,color=col2)

#rotate x-axis tick labels
plt.xticks (rotation= 45 , ha='right')

#display candlestick chart
plt.show()



Зарание спасибо!
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
Maksim_64
@Maksim_64
Data Analyst
Ну задача ваша довольно простая нужно добавить scatter plot и нарисовать его маркерами для low и high и проверять event я так понял 0 продавать 1 покупать . В общем кода то тут всего ничего вот.
plt.scatter(up[up.event == 0].index , up[up.event == 0].low, marker='^',color='green')
plt.scatter(up[up.event == 1].index, up[up.event == 1].high, marker='v',color='red')

plt.scatter(down[down.event == 0].index, down[down.event == 0].low, marker='^',color='green')
plt.scatter(down[down.event == 1].index, down[down.event == 1].high, marker='v',color='red')


Кастомизируйте если надо с цветами там размерами, может еще микро отступы сделать можно вычитать от low и прибавлять к high маленькое число. В общем разберетесь и доведете до желаемого результата.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы