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

PlotCandle绘制SSRO蜡烛图数值错误问题修复咨询

SSRO蜡烛图数值异常与形态错误的修复方案

问题根源

  1. 稳定币数据顺序错误:srcget方法中使用unshift添加数据,导致稳定币数组顺序反转,总和计算出现偏差。
  2. SSRO计算逻辑错误:对单根K线的开/高/低/收分别计算SSRO,破坏了原K线高低点的大小关系——主币高低点与稳定币对应高低点总和的比例关系不稳定,直接计算会出现ssro.h < ssro.l的反向异常。

修复步骤

1. 修正稳定币数据数组顺序

将srcget方法中的srcs.unshift(val)替换为srcs.push(val),确保稳定币数据按添加顺序存入数组,总和计算准确。

2. 重构SSRO计算逻辑

SSRO是SSR(稳定币供给比率)的Z-score标准化指标,正确逻辑为:

  • 先计算主币收盘价的SSR序列(主币收盘价 / 稳定币收盘价总和)
  • 基于SSR序列计算均线和标准差,得到收盘价的SSRO值
  • 用主币开/高/低与收盘价的比例,映射出对应点位的SSRO值,保证高低点的大小关系与原K线一致

修复后完整代码

//@version=6
indicator("Stablecoin Supply Ratio Oscillator", "SSRO", overlay=false)

type bar
    float o = open
    float h = high
    float l = low
    float c = close

method data(string coin) =>
    bar x = request.security('CRYPTOCAP:' + coin, '', bar.new())
    na(x) ? bar.new(0, 0, 0, 0) : x

method srcget(array<bar> stbl, string src) =>
    array<float> srcs = array.new<float>()
    for coin in stbl
        val = switch src
            'o' => coin.o
            'h' => coin.h
            'l' => coin.l
            'c' => coin.c
        srcs.push(val)  // 替换unshift为push,修正数组顺序
    srcs

// 计算SSR序列的Z-score(SSRO)
float ssro_calc(float src, float ssr_sma, float ssr_stdev) =>
    (src - ssr_sma) / ssr_stdev

method adj(color col, int lvl) =>
    color.new(col, lvl)
    
var string gs = "SSRO", var string gc = "Colors"
len   = input.int   (200      , "Length"                , group = gs)
chart = input.bool  (true     , "Use Chart As Main Coin", group = gs)

var string main = syminfo.type != 'crypto' ? 'BTC' : chart ? syminfo.basecurrency : 'BTC'
bar        coin = main.data()
array<bar> stbl = array.from(
     'USDT'.data(),
     'USDC'.data(),
     'DAI'.data(),
     'GUSD'.data(),
     'USDD'.data())

// 获取稳定币收盘价总和
float stbl_c_sum = array.sum(stbl.srcget('c'))
// 计算主币收盘价的SSR
float ssr_c = coin.c / stbl_c_sum
// 计算SSR的均线和标准差
float ssr_sma = ta.sma(ssr_c, len)
float ssr_stdev = ta.stdev(ssr_c, len)

// 基于收盘价SSRO,映射开/高/低的SSRO值(保持原K线比例关系)
float ssro_c = ssro_calc(ssr_c, ssr_sma, ssr_stdev)
float ssro_o = ssro_c * (coin.o / coin.c)
float ssro_h = ssro_c * (coin.h / coin.c)
float ssro_l = ssro_c * (coin.l / coin.c)

// 创建修正后的SSRO bar
bar ssro = bar.new(ssro_o, ssro_h, ssro_l, ssro_c)

color col = ssro.c > ssro.o ? color.green : color.red

plotcandle(ssro.o, ssro.h, ssro.l, ssro.c, "SSRO", color=col, wickcolor=col, bordercolor=col) 

plot(ssro.l, "ssro.l", color=color.new(color.navy,50), style=plot.style_line)  
//plot(ssro.h,"ssro.h",color= color.new(color.black,50),style=plot.style_line) 
//plot(ssro.o,"ssro.o",color= color.new(color.blue,50),style=plot.style_line) 
//plot(ssro.c,"ssro.c",color= color.new(color.maroon,50),style=plot.style_line) 

内容的提问来源于stack exchange,提问作者Tomasz Nadwor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 16:17:31