本文讲解期魔方指标图形对象的核心概念与通用绘制方法(实例化、set_point、set_segment、init_graphics)。各类图形的详细参数清单见图形对象清单。
图形对象总览
指标图形对象是指在量化交易中用于绘制图形的 python 实例,包括线条、柱状图、K 线等元素,用以展示价格走势、成交量等信息。
期魔方提供以下图形对象:
| 序号 | 图形对象 | 创建函数 | 典型用途 |
|---|---|---|---|
| 1 | 线条(Line) | self.Line(name, color, line_width, line_dash) |
均线、趋势线 |
| 2 | K 线文字(Text) | self.Text(name) |
移动止盈信号 ATP |
| 3 | 圆点(Point) | self.Point(name, color, bg_color, point_radius) |
多空转折点 |
| 4 | 柱状图(Bar) | self.Bar(name, color, width, type) |
成交量、MACD 柱 |
| 5 | 多边形(Polygon) | self.Polygon(name, color, line_width, line_dash, bg_color) |
区间突破 |
| 6 | 箭头线(ArrowLine) | self.ArrowLine(name, color, start, end, angle, length, line_width) |
突破信号 |
| 7 | 彩色 K 线(ColorKline) | self.ColorKline(name, default_color) |
涨跌停板 |
| 8 | 多段线条(MultiLine) | self.MultiLine(name, line_width, line_dash) |
区间压力线 |
| 9 | 多段文字(MultiText) | self.MultiText(name) |
触发信号文字说明 |
| 10 | 多段圆点(MultiPoint) | self.MultiPoint(name) |
多空转折点 |
| 11 | 表格(Table) | self.Table(name, row, col, **style) |
统计数据面板 |
每一个图形对象的使用方式为:
- 第一步先实例化图形对象,并配置其属性。
- 第二步使用该图形对象提供的绘制方法(一般为
set_point(key, value, **styles)),写入对应点的值。
通用图形函数
init_graphics() — 重置/初始化所有图形
描述:重置所有图形。
说明:
- 当需要清除之前绘制的图形并重新绘制时,调用该方法重置指标的所有图形。
- 在行情页面往左滑动加载历史数据时,改变了指标计算的起点,也需要调用该方法重置。
- 该方法一般在
calculate_all()方法中使用。
接口案例:
def calculate_all(self, data):
# 先重置图形,再进行后续的全量计算
self.init_graphics()
set_point(datetime, value, **styles) — 设置图形点
描述:图形对象的绘制点函数,用于设置横轴坐标和竖轴坐标。
说明:
- 每个图形对象都有
set_point()方法,用于接收横轴坐标(时间)和竖轴坐标(价格)的值。 - 不同的图形对象该方法的参数有所区别,还可以接受其他参数用于设置图形样式。
- 具体参数请查看[图形对象清单]。
输入参数:
| 参数 | 中文描述 | 类型 | 必填 |
|---|---|---|---|
| datetime | 时间值 | str | 是 |
| value | 价格值(在 Y 轴的位置) | float | 是 |
接口案例:
def calculate_last(self, data):
# 返回的 data 数据中会有时间值,再结合自己计算的价格值,定位一个图形点
self.fast_line.set_point(datetime, value)
self.slow_line.set_point(datetime, value)
set_segment(segment) — 设置图形段
描述:给不连续的图形添加其中一段图形。
说明:
- 默认的
Line图形是连续的,所有点都会连续绘制。 - 如需绘制不连续的线,支持中途某一节断开,需要使用
MultiLine组合LineSegment的方式。 - 同理,
MultiText组合TextSegment,MultiPoint组合PointSegment。 Polygon组合CornerSegment。
输入参数:
| 参数 | 中文描述 | 类型 | 必填 |
|---|---|---|---|
| segment | 图形段对象 | object | 是 |
接口案例:
def calculate_all(self, data):
# 实例化1个不连续的文字图形
self.multi_text = self.MultiText('multi_text')
# 实例化2个文字图形段
self.buy_text = self.TextSegment('buy')
self.sell_text = self.TextSegment('sell')
# 分别在不同图形段设置不同的文字
self.buy_text.set_point(datetime1, value1, 'B')
self.sell_text.set_point(datetime2, value2, 'S')
# 将2个文字图形段添加到多段文字图形对象中
self.multi_text.set_segment(self.buy_text)
self.multi_text.set_segment(self.sell_text)
特殊绘制方法
部分图形对象不使用 set_point(),而是使用专属方法:
ArrowLine(箭头线)
箭头线使用 set_start_point() 和 set_end_point() 方法绘制:
def calculate_all(self, data):
length, datetime_str, open, high, low, close, volume = data
self.arrow2.set_start_point(datetime_str[-40], 9208)
self.arrow2.set_end_point(datetime_str[-15], 9180)
Table(表格)
表格使用 set_table_title()、set_table_data()、set_table_cell() 方法:
def on_init(self):
self.table = self.Table("my_table", 2, 2, top="10px", left="10px", font_size=18)
self.table.set_table_title("Demo Table", font_size=24, font_color="#f5222d")
def calculate_all(self, data):
_, klines = data
self.table.set_point(klines["datetime"][-1], klines["close"][-1])
# 一次性设置全部表格内容
table_data = [
[{"content": f"Open: {klines['open'][-1]}"}, {"content": f"High: {klines['high'][-1]}"}],
[{"content": f"Low: {klines['low'][-1]}"}, {"content": f"Close: {klines['close'][-1]}"}],
]
self.table.set_table_data(table_data)
完整创建示例
在 on_init 中实例化各种图形对象:
def on_init(self):
self.calculate_type = 'last'
self.calculate_data_type = 'list'
self.fields('close')
# 线条
self.fast_line = self.Line('fast_line', 'rgba(255, 0, 0, 1)')
self.slow_line = self.Line('slow_line', 'rgba(0, 255, 0, 1)', line_width=2, line_dash=[5, 5])
# 圆点
self.signal_point = self.Point('signal', 'rgba(255, 0, 0, 1)', bg_color='rgba(255, 0, 0, 1)', point_radius=8)
# 柱状图
self.volume_bar = self.Bar('volume', 'rgba(255, 0, 0, 1)', width=8, type=1)
# 箭头线
self.arrow = self.ArrowLine('arrow1', '#FFCC00', start=True, end=True, angle=30, length=20, line_width=4)
# 彩色K线
self.color_kline = self.ColorKline('main_kline')
相关阅读

评论
登录后参与讨论,与站内账号体系共用。