输入/搜索内容
内置函数
Global
Version
Sleep
IsVirtual
Mail
Mail_Go
SetErrorFilter
GetPid
GetLastError
GetCommand
GetMeta
Dial
HttpQuery
HttpQuery_Go
Encode
UnixNano
Unix
GetOS
MD5
DBExec
UUID
EventLoop
__Serve
_G
_D
_N
_C
_Cross
JSON.parse
JSON.stringify
SetChannelData
GetChannelData
Log
Market
Trade
Account
Futures
Threads
threading
Thread
getThread
mainThread
currentThread
Lock
Condition
Event
Dict
pending
Thread
ThreadLock
ThreadEvent
ThreadCondition
ThreadDict
TA
Talib
talib.CDL2CROWS
talib.CDL3BLACKCROWS
talib.CDL3INSIDE
talib.CDL3LINESTRIKE
talib.CDL3OUTSIDE
talib.CDL3STARSINSOUTH
talib.CDL3WHITESOLDIERS
talib.CDLABANDONEDBABY
talib.CDLADVANCEBLOCK
talib.CDLBELTHOLD
talib.CDLBREAKAWAY
talib.CDLCLOSINGMARUBOZU
talib.CDLCONCEALBABYSWALL
talib.CDLCOUNTERATTACK
talib.CDLDARKCLOUDCOVER
talib.CDLDOJI
talib.CDLDOJISTAR
talib.CDLDRAGONFLYDOJI
talib.CDLENGULFING
talib.CDLEVENINGDOJISTAR
talib.CDLEVENINGSTAR
talib.CDLGAPSIDESIDEWHITE
talib.CDLGRAVESTONEDOJI
talib.CDLHAMMER
talib.CDLHANGINGMAN
talib.CDLHARAMI
talib.CDLHARAMICROSS
talib.CDLHIGHWAVE
talib.CDLHIKKAKE
talib.CDLHIKKAKEMOD
talib.CDLHOMINGPIGEON
talib.CDLIDENTICAL3CROWS
talib.CDLINNECK
talib.CDLINVERTEDHAMMER
talib.CDLKICKING
talib.CDLKICKINGBYLENGTH
talib.CDLLADDERBOTTOM
talib.CDLLONGLEGGEDDOJI
talib.CDLLONGLINE
talib.CDLMARUBOZU
talib.CDLMATCHINGLOW
talib.CDLMATHOLD
talib.CDLMORNINGDOJISTAR
talib.CDLMORNINGSTAR
talib.CDLONNECK
talib.CDLPIERCING
talib.CDLRICKSHAWMAN
talib.CDLRISEFALL3METHODS
talib.CDLSEPARATINGLINES
talib.CDLSHOOTINGSTAR
talib.CDLSHORTLINE
talib.CDLSPINNINGTOP
talib.CDLSTALLEDPATTERN
talib.CDLSTICKSANDWICH
talib.CDLTAKURI
talib.CDLTASUKIGAP
talib.CDLTHRUSTING
talib.CDLTRISTAR
talib.CDLUNIQUE3RIVER
talib.CDLUPSIDEGAP2CROWS
talib.CDLXSIDEGAP3METHODS
talib.AD
talib.ADOSC
talib.OBV
talib.ACOS
talib.ASIN
talib.ATAN
talib.CEIL
talib.COS
talib.COSH
talib.EXP
talib.FLOOR
talib.LN
talib.LOG10
talib.SIN
talib.SINH
talib.SQRT
talib.TAN
talib.TANH
talib.MAX
talib.MAXINDEX
talib.MIN
talib.MININDEX
talib.MINMAX
talib.MINMAXINDEX
talib.SUM
talib.HT_DCPERIOD
talib.HT_DCPHASE
talib.HT_PHASOR
talib.HT_SINE
talib.HT_TRENDMODE
talib.ATR
talib.NATR
talib.TRANGE
talib.BBANDS
talib.DEMA
talib.EMA
talib.HT_TRENDLINE
talib.KAMA
talib.MA
talib.MAMA
talib.MIDPOINT
talib.MIDPRICE
talib.SAR
talib.SAREXT
talib.SMA
talib.T3
talib.TEMA
talib.TRIMA
talib.WMA
talib.LINEARREG
talib.LINEARREG_ANGLE
talib.LINEARREG_INTERCEPT
talib.LINEARREG_SLOPE
talib.STDDEV
talib.TSF
talib.VAR
talib.ADX
talib.ADXR
talib.APO
talib.AROON
talib.AROONOSC
talib.BOP
talib.CCI
talib.CMO
talib.DX
talib.MACD
talib.MACDEXT
talib.MACDFIX
talib.MFI
talib.MINUS_DI
talib.MINUS_DM
talib.MOM
talib.PLUS_DI
talib.PLUS_DM
talib.PPO
talib.ROC
talib.ROCP
talib.ROCR
talib.ROCR100
talib.RSI
talib.STOCH
talib.STOCHF
talib.STOCHRSI
talib.TRIX
talib.ULTOSC
talib.WILLR
talib.AVGPRICE
talib.MEDPRICE
talib.TYPPRICE
talib.WCLPRICE
OS
结构体
内置变量

该函数用于采用类似Pine语言的绘图方式,在策略运行时进行自定义绘图。

KLineChart(options)

示例

  • 若需在策略的自定义画图区域进行绘图,必须先创建图表控制对象,使用KLineChart()函数创建该对象。KLineChart()函数的参数为一个图表配置结构,参考代码中使用的图表配置结构非常简单:{overlay: true}

    该图表配置结构仅将绘图内容输出到图表的主图上。如果将overlay设置为假值(例如false),则图表内容将全部输出到副图上;如果需要指定某个画图函数在主图上绘制,也可以在该函数的调用中将参数overlay指定为真值(例如true)。

    javascript
    function main() { // 调用KLineChart函数创建图表控制对象c let c = KLineChart({ overlay: true }) while(true) { if (exchange.IO("status")) { break } Sleep(1000) } exchange.SetContractType("rb888") // 获取K线 let bars = exchange.GetRecords() if (!bars) { return } bars.forEach(function(bar, index) { c.begin(bar) c.barcolor(bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(0, 0, 0, 0.2)') if (bar.Close > bar.Open) { c.bgcolor('rgba(0, 255, 0, 0.5)') } let h = c.plot(bar.High, 'high') let l = c.plot(bar.Low, 'low') c.fill(h, l, { color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0.2)' }) c.hline(bar.High) c.plotarrow(bar.Close - bar.Open) c.plotshape(bar.Low, { style: 'diamond' }) c.plotchar(bar.Close, { char: 'X' }) c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9) if (bar.Close > bar.Open) { // long/short/closelong/closeshort c.signal("long", bar.High, 1.5) } else if (bar.Close < bar.Open) { c.signal("closelong", bar.Low, 1.5) } c.close(bar) }) }
    python
    def main(): # 调用KLineChart函数创建图表控制对象c c = KLineChart({ "overlay": True }) while True: if exchange.IO("status"): break Sleep(1000) exchange.SetContractType("rb888") # 获取K线 bars = exchange.GetRecords() if not bars: return for bar in bars: c.begin(bar) c.barcolor('rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(0, 0, 0, 0.2)') if bar.Close > bar.Open: c.bgcolor('rgba(0, 255, 0, 0.5)') h = c.plot(bar.High, 'high') l = c.plot(bar.Low, 'low') c.fill(h, l, 'rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(255, 0, 0, 0.2)') c.hline(bar.High) c.plotarrow(bar.Close - bar.Open) c.plotshape(bar.Low, style = 'diamond') c.plotchar(bar.Close, char = 'X') c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9) if bar.Close > bar.Open: # long/short/closelong/closeshort c.signal("long", bar.High, 1.5) elif bar.Close < bar.Open: c.signal("closelong", bar.Low, 1.5) c.close(bar)
    rust
    fn main() { // 调用KLineChart::new创建图表控制对象c let mut c = KLineChart::new(r#"{"overlay": true}"#); // 判断连接期货公司前置机是否成功 while exchange.IO("status").unwrap_or_default() != "true" { Sleep(1000); } exchange.SetContractType("rb888").unwrap(); // 获取K线 let bars = exchange.GetRecords(None, None, None).unwrap(); for bar in &bars { c.begin(bar); c.barcolor(if bar.Close > bar.Open { "rgba(255, 0, 0, 0.2)" } else { "rgba(0, 0, 0, 0.2)" }, "{}"); if bar.Close > bar.Open { c.bgcolor("rgba(0, 255, 0, 0.5)", "{}"); } let h = c.plot(bar.High, r#"{"title": "high"}"#); let l = c.plot(bar.Low, r#"{"title": "low"}"#); c.fill(h, l, if bar.Close > bar.Open { r#"{"color": "rgba(255, 0, 0, 0.2)"}"# } else { r#"{"color": "rgba(255, 0, 0, 0.2)"}"# }); c.hline(bar.High, "{}"); c.plotarrow(bar.Close - bar.Open, "{}"); c.plotshape(bar.Low > 0.0, r#"{"style": "diamond"}"#); c.plotchar(bar.Close > 0.0, r#"{"char": "X"}"#); c.plotcandle(bar.Open * 0.9, bar.High * 0.9, bar.Low * 0.9, bar.Close * 0.9, "{}"); if bar.Close > bar.Open { // long/short/closelong/closeshort c.signal("long", bar.High, 1.5, "long"); } else if bar.Close < bar.Open { c.signal("closelong", bar.Low, 1.5, "closelong"); } c.close(); } }
    c++
    // 暂不支持
  • 使用 pricePrecisionvolumePrecision 参数控制图表数据的显示精度。可根据实际需求设置价格与成交量的显示精度:例如,对于价格波动较大的品种,可将精度设置为 0 以显示整数;对于价格较为精细的品种,可设置为 2 或更高精度。

    javascript
    function main() { // 创建图表控制对象,设置价格精度为 0(整数)、成交量精度为 0(整数) let c = KLineChart({ overlay: true, pricePrecision: 0, // 价格数据精度,例如设置为 2 即保留 2 位小数 volumePrecision: 0 // 成交量数据精度 }) // 等待交易所连接就绪 while (true) { if (exchange.IO("status")) { break } Sleep(1000) } // 设置合约类型(以螺纹钢主力合约为例) exchange.SetContractType("rb888") Log("Test symbol: rb888") // 获取 K 线数据 let bars = exchange.GetRecords() if (!bars) { return } // 遍历 K 线数据并绘制图表 bars.forEach(function(bar, index) { c.begin(bar) c.barcolor(bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(0, 0, 0, 0.2)') c.plot(bar.High, 'high') c.plot(bar.Low, 'low') c.close(bar) }) }
    python
    def main(): # 创建图表控制对象,设置价格精度为 0(整数)、成交量精度为 0(整数) c = KLineChart({ "overlay": True, "pricePrecision": 0, # 价格数据精度,例如设置为 2 即保留 2 位小数 "volumePrecision": 0 # 成交量数据精度 }) # 等待交易所连接就绪 while True: if exchange.IO("status"): break Sleep(1000) # 设置合约类型(以螺纹钢主力合约为例) exchange.SetContractType("rb888") Log("Test symbol: rb888") # 获取 K 线数据 bars = exchange.GetRecords() if not bars: return # 遍历 K 线数据并绘制图表 for bar in bars: c.begin(bar) c.barcolor('rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(0, 0, 0, 0.2)') c.plot(bar.High, 'high') c.plot(bar.Low, 'low') c.close(bar)
    rust
    fn main() { // 创建图表控制对象,设置价格精度为 0(整数)、成交量精度为 0(整数) // pricePrecision 为价格数据精度,例如设置为 2 即保留 2 位小数;volumePrecision 为成交量数据精度 let mut c = KLineChart::new(r#"{"overlay": true, "pricePrecision": 0, "volumePrecision": 0}"#); // 等待交易所连接就绪 while exchange.IO("status").unwrap_or_default() != "true" { Sleep(1000); } // 设置合约类型(以螺纹钢主力合约为例) exchange.SetContractType("rb888").unwrap(); Log!("Test symbol: rb888"); // 获取 K 线数据 let bars = exchange.GetRecords(None, None, None).unwrap(); // 遍历 K 线数据并绘制图表 for bar in &bars { c.begin(bar); c.barcolor(if bar.Close > bar.Open { "rgba(255, 0, 0, 0.2)" } else { "rgba(0, 0, 0, 0.2)" }, "{}"); c.plot(bar.High, r#"{"title": "high"}"#); c.plot(bar.Low, r#"{"title": "low"}"#); c.close(); } }
    c++
    // 暂不支持
  • 画图操作中支持的Pine语言画图接口函数如下:

    barcolor,用于设置K线颜色。

    barcolor(color, offset, editable, show_last, title, display)

    display参数可选值:"none", "all"

    javascript
    c.barcolor(bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(0, 0, 0, 0.2)') // 使用本例中参考代码中的例子说明,不再赘述
    python
    c.barcolor('rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(0, 0, 0, 0.2)')
    rust
    c.barcolor(if bar.Close > bar.Open { "rgba(255, 0, 0, 0.2)" } else { "rgba(0, 0, 0, 0.2)" }, "{}"); // 使用本例中参考代码中的例子说明,不再赘述
    c++
    // 暂不支持
  • bgcolor,用于以指定颜色填充K线背景。

    bgcolor(color, offset, editable, show_last, title, display, overlay)

    display参数可选值:"none", "all"

    javascript
    c.bgcolor('rgba(0, 255, 0, 0.5)')
    python
    c.bgcolor('rgba(0, 255, 0, 0.5)')
    rust
    c.bgcolor("rgba(0, 255, 0, 0.5)", "{}");
    c++
    // 暂不支持
  • plot,用于在图表上绘制一系列数据。

    plot(series, title, color, linewidth, style, trackprice, histbase, offset, join, editable, show_last, display)

    style参数可选值:"stepline_diamond", "stepline", "cross", "areabr", "area", "circles", "columns", "histogram", "linebr", "line"

    display参数可选值:"none", "all"

    javascript
    c.plot(bar.High, 'high') c.plot(bar.Open < bar.Close ? NaN : bar.Close, "Close", {style: "linebr"}) // 支持绘制不连续的数据线
    python
    h = c.plot(bar.High, 'high') h = c.plot(None if bar.Open < bar.Close else bar.Close, "Close", style = "linebr") # 支持绘制不连续的数据线
    rust
    let h = c.plot(bar.High, r#"{"title": "high"}"#); c.plot(if bar.Open < bar.Close { f64::NAN } else { bar.Close }, r#"{"title": "Close", "style": "linebr"}"#); // 支持绘制不连续的数据线
    c++
    // 暂不支持
  • fill,使用指定的颜色填充两个绘图或hline之间的背景。

    fill(hline1, hline2, color, title, editable, fillgaps, display)

    display 参数可选:"none", "all"

    由于 JavaScript 语言无法通过函数形参名称来指定所传入的参数,为解决这一问题,可以使用 {key: value} 结构为指定的形参名称传入参数。例如,参考代码中使用 {color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0.2)'}fill 函数的 color 参数赋值。

    如需连续为多个形参名称指定参数,可以使用 {key1: value1, key2: value2, key3: value3}。例如,在本例中额外指定一个 title 参数:{color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0.2)', title: 'fill'}。颜色值既可以使用 'rgba(255, 0, 0, 0.2)' 的形式设置,也可以使用 '#FF0000' 的形式设置。

    javascript
    let h = c.plot(bar.High, 'high') let l = c.plot(bar.Low, 'low') c.fill(h, l, {color: bar.Close > bar.Open ? 'rgba(255, 0, 0, 0.2)' : 'rgba(255, 0, 0, 0.2)'})
    python
    h = c.plot(bar.High, 'high') l = c.plot(bar.Low, 'low') c.fill(h, l, color = 'rgba(255, 0, 0, 0.2)' if bar.Close > bar.Open else 'rgba(255, 0, 0, 0.2)')
    rust
    let h = c.plot(bar.High, r#"{"title": "high"}"#); let l = c.plot(bar.Low, r#"{"title": "low"}"#); c.fill(h, l, if bar.Close > bar.Open { r#"{"color": "rgba(255, 0, 0, 0.2)"}"# } else { r#"{"color": "rgba(255, 0, 0, 0.2)"}"# });
    c++
    // 暂不支持
  • hline,在给定的固定价格水平上绘制一条水平线。

    hline(price, title, color, linestyle, linewidth, editable, display)

    linestyle 参数可选:"dashed", "dotted", "solid"

    display 参数可选:"none", "all"

    javascript
    c.hline(bar.High)
    python
    c.hline(bar.High)
    rust
    c.hline(bar.High, "{}");
    c++
    // 暂不支持
  • plotarrow,在图表上绘制向上和向下的箭头。

    plotarrow(series, title, colorup, colordown, offset, minheight, maxheight, editable, show_last, display)

    display 参数可选:"none", "all"

    javascript
    c.plotarrow(bar.Close - bar.Open)
    python
    c.plotarrow(bar.Close - bar.Open)
    rust
    c.plotarrow(bar.Close - bar.Open, "{}");
    c++
    // 暂不支持
  • plotshape,在图表上绘制可视化形状。

    plotshape(series, title, style, location, color, offset, text, textcolor, editable, size, show_last, display)

    style参数可选值包括:"diamond", "square", "label_down", "label_up", "arrow_down", "arrow_up", "circle", "flag", "triangle_down", "triangle_up", "cross", "xcross"

    location参数可选值包括:"abovebar", "belowbar", "top", "bottom", "absolute"

    size参数可选值包括:"10px", "14px", "20px", "40px", "80px",分别对应Pine语言中的size.tiny、size.small、size.normal、size.large、size.huge

    size.auto等同于size.small。

    display参数可选值包括:"none", "all"

    javascript
    c.plotshape(bar.Low, {style: 'diamond'})
    python
    c.plotshape(bar.Low, style = 'diamond')
    rust
    c.plotshape(bar.Low > 0.0, r#"{"style": "diamond"}"#);
    c++
    // 暂不支持
  • plotchar,在图表上使用任意给定的Unicode字符绘制可视化形状。

    plotchar(series, title, char, location, color, offset, text, textcolor, editable, size, show_last, display)

    location参数可选值包括:"abovebar", "belowbar", "top", "bottom", "absolute"

    size参数可选值包括:"10px", "14px", "20px", "40px", "80px",分别对应Pine语言中的size.tiny、size.small、size.normal、size.large、size.huge

    size.auto等同于size.small。

    display参数可选值包括:"none", "all"

    javascript
    c.plotchar(bar.Close, {char: 'X'})
    python
    c.plotchar(bar.Close, char = 'X')
    rust
    c.plotchar(bar.Close > 0.0, r#"{"char": "X"}"#);
    c++
    // 暂不支持
  • plotcandle,在图表上绘制K线图。

    plotcandle(open, high, low, close, title, color, wickcolor, editable, show_last, bordercolor, display)

    display参数可选值包括:"none", "all"

    javascript
    c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)
    python
    c.plotcandle(bar.Open*0.9, bar.High*0.9, bar.Low*0.9, bar.Close*0.9)
    rust
    c.plotcandle(bar.Open * 0.9, bar.High * 0.9, bar.Low * 0.9, bar.Close * 0.9, "{}");
    c++
    // 暂不支持
  • signal是Pine语言中没有的函数,此处用于绘制买卖信号。

    signal(direction, price, qty, id)

    参数"long"表示交易方向,可选值包括"long"、"closelong"、"short"、"closeshort"。参数bar.High用于标记信号在Y轴上的位置。

    参数1.5表示信号的交易数量。可传入第四个参数以替换默认绘制的文本内容,信号标记的默认文本为交易方向,例如:"closelong"。

    javascript
    c.signal("long", bar.High, 1.5)
    python
    c.signal("long", bar.High, 1.5)
    rust
    c.signal("long", bar.High, 1.5, "long");
    c++
    // 暂不支持
  • reset是Pine语言中没有的函数,用于清空图表数据。

    reset(remain)

    reset()方法可接受一个参数remain,用于指定需要保留的数据条数。若不传入remain参数,则表示清除全部数据。

    javascript
    c.reset()
    python
    c.reset()
    rust
    c.reset(0);
    c++
    // 暂不支持

返回值

类型描述

object

图表对象。

KLineChart()函数返回的图表对象包含多个方法,其中需要特别注意begin(bar)close(bar)。在K线数据上遍历执行绘图操作时,绘图操作必须以begin(bar)函数调用作为起始,以close(bar)函数调用作为结束。

参数

名称类型必填描述

options

object / object数组

options参数为图表配置对象,支持以下属性:

  • overlay:布尔值,用于设置绘图内容的输出位置。设置为true时在主图显示,设置为false时在副图显示。

  • pricePrecision:数字,价格数据精度,用于控制图表中价格数据的小数位数。例如,设置为2表示保留2位小数,设置为0表示不保留小数(四舍五入为整数)。

  • volumePrecision:数字,成交量数据精度,用于控制图表中成交量数据的小数位数。例如,设置为2表示保留2位小数,设置为0表示不保留小数(四舍五入为整数)。

参考

备注

策略自定义绘图只能采用KLineChart()函数或Chart()函数两种方式中的一种。有关KLineChart()函数调用时所用的颜色、样式等设置,请参阅使用KLineChart函数画图的专题文章

pricePrecisionvolumePrecision参数用于控制图表中数据的显示精度。若不设置这些参数,图表将以默认精度显示数据。设置精度参数后,图表中的价格和成交量数据将按照指定的小数位数进行四舍五入显示,这有助于简化图表显示、提高可读性。