You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Pinescript在图表右上角展示策略因子表格并绘制折线图?

在TradingView表格内嵌入折线图的Pine Script实现方案

核心结论

  • Pine Script的原生table组件仅支持文本、数值填充和单元格颜色设置,没有内置的单元格绘图API,无法直接在表格单元格内插入折线图。
  • 可通过「表格+独立迷你折线图」的组合方式实现类似需求,或用色块/字符模拟简易折线效果。

实现方案1:表格+侧边迷你折线图

先完成右上角策略表现因子表格,再在表格旁绘制迷你折线图(以策略权益曲线为例):

//@version=5
strategy("策略表现因子表格+迷你折线", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000)

// 计算核心策略表现因子
winRate = strategy.winning_trades / strategy.total_trades * 100
annualReturn = strategy.closedtrades.profit_total / strategy.initial_capital * 100 / (strategy.running_time / 365)
maxDrawdown = strategy.max_drawdown * 100

// 创建右上角统计表格
var table statsTable = table.new(position.top_right, 2, 4, border_width=1)

// 填充表格内容(仅在最后一根K线更新)
if barstate.islast
    // 表头
    table.cell(statsTable, 0, 0, "策略因子", text_color=color.white, bg_color=color.blue)
    table.cell(statsTable, 1, 0, "数值", text_color=color.white, bg_color=color.blue)
    // 因子行
    table.cell(statsTable, 0, 1, "胜率(%)", text_color=color.black)
    table.cell(statsTable, 1, 1, str.tostring(winRate, "%.2f"), text_color=color.green)
    table.cell(statsTable, 0, 2, "年化收益(%)", text_color=color.black)
    table.cell(statsTable, 1, 2, str.tostring(annualReturn, "%.2f"), text_color=color.green)
    table.cell(statsTable, 0, 3, "最大回撤(%)", text_color=color.black)
    table.cell(statsTable, 1, 3, str.tostring(maxDrawdown, "%.2f"), text_color=color.red)

// 收集权益数据用于绘制迷你折线
var float[] equityData = array.new_float()
array.push(equityData, strategy.equity)

// 计算迷你折线的坐标范围(适配表格尺寸)
tableWidth = table.width(statsTable)
tableHeight = table.height(statsTable)
chartXStart = table.get_x(statsTable) - tableWidth * 0.8
chartYStart = table.get_y(statsTable)
chartWidth = tableWidth * 0.7
chartHeight = tableHeight * 0.9

// 归一化权益数据到迷你图表的像素范围
minEquity = array.min(equityData)
maxEquity = array.max(equityData)
normEquity = array.new_float()
for val in equityData
    normVal = (val - minEquity) / (maxEquity - minEquity) * chartHeight + chartYStart
    array.push(normEquity, normVal)

// 绘制迷你折线和边框
if barstate.islast
    // 绘制折线
    for i = 1 to array.size(normEquity)-1
        x1 = chartXStart + (i-1) * (chartWidth / (array.size(normEquity)-1))
        x2 = chartXStart + i * (chartWidth / (array.size(normEquity)-1))
        line.new(x1, array.get(normEquity, i-1), x2, array.get(normEquity, i), color=color.orange, width=2)
    // 绘制图表边框
    box.new(chartXStart, chartYStart, chartXStart+chartWidth, chartYStart+chartHeight, border_width=1, border_color=color.gray)

实现方案2:表格内用色块模拟折线

如果需要严格在表格单元格内展示趋势,可通过不同颜色的单元格填充模拟简易折线(适合短周期数据):

//@version=5
strategy("表格内色块模拟折线", overlay=true, default_qty_type=strategy.cash, default_qty_value=10000)

// 计算策略表现因子(同方案1)
winRate = strategy.winning_trades / strategy.total_trades * 100
annualReturn = strategy.closedtrades.profit_total / strategy.initial_capital * 100 / (strategy.running_time / 365)
maxDrawdown = strategy.max_drawdown * 100

// 创建带趋势列的表格
var table statsTable = table.new(position.top_right, 3, 4, border_width=1)

if barstate.islast
    // 表头
    table.cell(statsTable, 0, 0, "策略因子", text_color=color.white, bg_color=color.blue)
    table.cell(statsTable, 1, 0, "数值", text_color=color.white, bg_color=color.blue)
    table.cell(statsTable, 2, 0, "近3期趋势", text_color=color.white, bg_color=color.blue)
    // 因子行
    table.cell(statsTable, 0, 1, "胜率(%)", text_color=color.black)
    table.cell(statsTable, 1, 1, str.tostring(winRate, "%.2f"), text_color=color.green)
    table.cell(statsTable, 0, 2, "年化收益(%)", text_color=color.black)
    table.cell(statsTable, 1, 2, str.tostring(annualReturn, "%.2f"), text_color=color.green)
    table.cell(statsTable, 0, 3, "最大回撤(%)", text_color=color.black)
    table.cell(statsTable, 1, 3, str.tostring(maxDrawdown, "%.2f"), text_color=color.red)
    
    // 用色块模拟近3期权益趋势
    for i = 1 to 3
        change = strategy.equity[i-1] - strategy.equity[i]
        cellColor = change > 0 ? color.new(color.green, 0) : color.new(color.red, 0)
        table.cell(statsTable, 2, i, "", bg_color=cellColor)

内容的提问来源于stack exchange,提问作者Ali The Trader

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:27:03