KB / ARTICLE

图形绘制通用函数

指标文档 · 期货版修订 R2发布于 2026-10-14

本文讲解期魔方指标图形对象的核心概念与通用绘制方法(实例化、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) 统计数据面板

每一个图形对象的使用方式为:

  1. 第一步先实例化图形对象,并配置其属性。
  2. 第二步使用该图形对象提供的绘制方法(一般为 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')

相关阅读

已复制到剪贴板
指标文档 · 期货版修订 R2

返回指标文档 · 期货版板块

评论