资源加载中... loading...

FMZ PINE Script 文档

Author: 发明者量化-小小梦, Created: 2022-05-06 14:27:06, Updated: 2024-10-12 15:27:04

ceArray = array.new<float>(samplesInput) method maintainQueue(array<float> srcArray, float value, bool takeSample = true) => if takeSample srcArray.push(value) srcArray.shift() srcArray

method calcBB(array<float> srcArray, float mult, bool calculate = true) => var float mean = na var float dev = na if calculate mean := srcArray.avg() dev := srcArray.stdev() * mult [mean, mean + dev, mean - dev]

bool newSample = bar_index % n == 0

[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)

plot(sampleMean, “Basis”, color.orange) plot(highBand, “Upper”, color.lime) plot(lowBand, “Lower”, color.red)


可以看到使用关键字method声明的用户自定义方法:maintainQueue、calcBB的参数列表中第一个参数都是```array<float>```类型。表示该method是```array<float>```类型变量的方法,所以可以看到调用以下代码来计算布林指标。

```pine
[sampleMean, highBand, lowBand] = sourceArray.maintainQueue(sourceInput, newSample).calcBB(multiplier, newSample)

Methods重载

用户定义的方法可以覆盖和重载具有相同标识符的现有内置方法和用户定义的方法。此功能允许用户在同一方法名称下定义与不同参数签名关联的多个例程。作为一个简单的例子,假设我们想要定义一个方法来识别变量的类型。由于我们必须显式指定与用户定义方法关联的对象类型,因此我们需要为我们希望它识别的每种类型定义重载。下面,我们定义了一个getType()方法,该方法返回变量类型的字符串表示形式,并具有五种基本类型的重载:

//@version=5
indicator("Type Inspection")

// @function   Identifies an object's type.
// @param this Object to inspect.
// @returns    (string) A string representation of the type.
method getType(int this) =>
    na(this) ? "int(na)" : "int"

method getType(float this) =>
    na(this) ? "float(na)" : "float"

method getType(bool this) =>
    na(this) ? "bool(na)" : "bool"

method getType(color this) =>
    na(this) ? "color(na)" : "color"

method getType(string this) =>
    na(this) ? "string(na)" : "string"

a = 1             // a.getType(): float
b = 1.0           // b.getType(): float
c = true          // c.getType(): bool
d = color.white   // d.getType(): string(na)
e = "1"           // e.getType(): string

runtime.log("a.getType():", a.getType())
runtime.log("b.getType():", b.getType())
runtime.log("c.getType():", c.getType())
runtime.log("d.getType():", d.getType())
runtime.log("e.getType():", e.getType())
runtime.error("stop")

每个变量的基础类型决定getType()将使用哪种重载。在FMZ平台因为PINE脚本底层实现为Javascript语言,所以数值类型都会判断为浮点型数据(float)。

内置函数

调用函数时传参数,可以指定参数名赋值,可以在对应的参数位置直接传入变量,也支持混合使用。例如:

plot(close, title="test plot")     // 直接传参数 close ;指定参数 title ,赋值字符串"test plot"

指定参数名赋值之后,就不能再直接传变量作为参数了,之后的传参都必须写成参数名赋值的形式。

// plot(close, title="test", color.red)    // 虽然plot第三个参数是颜色值,但是这样写就会报错
plot(close, title="test", color=color.red) // 正确写法
plot(close, "test", color.red)             // 正确写法

timeframe

timeframe.in_seconds

将传递给 timeframe 参数的时间周期转换为秒。

timeframe.in_seconds(timeframe)

例子

// Get chart timeframe:
i_tf = input.timeframe("1D")

// Convert timeframe to the int value (number of seconds in 1 Day):
tf = timeframe.in_seconds(i_tf)

plot(tf)

返回值 timeframe 的一根K线中的秒数的 int 表示形式。

参数

  • timeframe (simple string) 时间周期。可选。默认值为timeframe.period。

备注 对于 timeframe >= ‘1M’ 函数根据一个月中的 30.4167 (365/12) 天计算秒数。

另见 input.timeframe timeframe.period

ticker

ticker.heikinashi

创建一个代码标识符请求平滑平均K线值。

ticker.heikinashi(symbol)

例子

heikinashi_close = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close)

heikinashi_aapl_60_close = request.security(ticker.heikinashi(syminfo.tickerid), "60", close)
plot(heikinashi_close)
plot(heikinashi_aapl_60_close)

返回值 股票代码的字符串值,可以提供给request.security函数。

参数

  • symbol (simple string) 商品代码标识符。

另见 syminfo.tickerid syminfo.ticker request.security

request

request.data

请求外部数据。

request.data(url, attribute)

例子

/*backtest
start: 2024-09-01 16:00:00
end: 2024-10-10 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["RunMode",1,358374],["ZPrecision",0,358374]]
*/

var chart_data = "https://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/data"
spotPrice = request.data(chart_data, "$.spot_close_price")
futuresPrice = request.data(chart_data, "$.future_close_price")
diff = futuresPrice - spotPrice

plot(diff, "永续-现货差价")
plot(futuresPrice, "期货价格", overlay=true)
plot(spotPrice, "现货价格", overlay=true)

if diff > 80 and strategy.position_size >= 0
    runtime.log("diff > 80")
    strategy.entry("Enter Short", strategy.short)
if diff < 60 and strategy.position_size <= 0
    runtime.log("diff < 60")
    strategy.entry("Enter Short", strategy.long)

返回值 参数attribute指定的数据系列。

参数

  • url (simple string) 请求的数据源url,数据源应答的数据格式需要符合要求(至少包含time、data属性):{"data": [], "schema": ["time", "data"]}。可以参考例子中的数据格式:

    {
        "data": [
            [1720051200000, "{\"spot_close_price\" : 57050.01, \"future_close_price\" : 57045.9}"],
            [1720137600000, "{\"spot_close_price\" : 56628.79, \"future_close_price\" : 56604.9}"],
            // ...
        ],
        "schema": ["time", "data"]
    }
    
  • attribute (simple string) 指定属性名,返回所需的数据。例如:"$.spot_close_price",使用$.作为前缀,属性名与请求数据源时应答的数据中data字段中的属性保持一致

如果提示错误,需要检查request.data请求的时间范围是否和回测设置时间范围一致,在回测时间序列上查询不到数据会报错。

本例中的data-data数据查询SQL语句:

WITH latest_data AS (
    SELECT 
        klines.spot_1d.Time AS time,
        CONCAT('{\"spot_close_price\" : ', klines.spot_1d.Close, ', \"future_close_price\" : ', klines.future_1d.Close, '}') AS data
    FROM 
        klines.spot_1d
    JOIN 
        klines.future_1d
    ON 
        klines.spot_1d.Time = klines.future_1d.Time
    WHERE
        klines.spot_1d.Symbol = 'btc_usdt'
    AND 
        klines.future_1d.Symbol = 'btc_usdt.swap'
    AND 
        klines.spot_1d.Exchange = 'Binance'
    AND 
        klines.future_1d.Exchange = 'Binance'
    ORDER BY 
        klines.spot_1d.Time DESC
    LIMIT 100
)
SELECT * FROM latest_data
ORDER BY time ASC;

可以在FMZ平台的数据探索页面查询、创建数据链接,即例子中用到的https://www.datadata.com/api/v1/query/ebe46218-c5c6-4366-8c72-413694417976/data

request.security

要求另一个品种/解析度。

request.security(symbol, timeframe, expression, gaps, lookahead, ignore_invalid_symbol, currency) 

例子

s = request.security(syminfo.tickerid, "D", close)   // 1 Day
plot(s)

expr = ta.sma(close, 10)
s1 = request.security(syminfo.tickerid, "240", expr) // 240 Minutes
plot(s1)

// To avoid difference in calculation on history/realtime you can request not latest values and use merge strategy flags as follows:
s2 = request.security(syminfo.tickerid, "D", close[1], barmerge.gaps_off, barmerge.lookahead_on)
plot(s2)
f() => [open, high]
[o, h] = request.security(syminfo.tickerid, "D", f())
[l, c] = request.security(syminfo.tickerid, "D", [low, close])
plot((o + h + l + c) / 4)

返回值 要求系列

参数

  • symbol (simple string) 商品代码。
  • timeframe (simple string) 时间周期。空字符串将被解释为图表的当前时间周期。
  • expression (series int/float/bool/color) 可以从request.security调用计算并返回一个表达式。它可以是一个系列或一个包含可以转换为系列的元素的元组。
  • gaps (barmerge_gaps) 给所请求的数据合并策略(要求数据自动与主要系列OHLC数据合并)。 可能的值:barmerge.gaps_on,barmerge.gaps_off。 barmerge.gaps_on - 请求的数据与可能差距合并(na值)。 barmerge.gaps_off - 请求的数据连续不间断地合并,所有的差距都填满了之前最近的现有值。 默认值为barmerge.gaps_off。
  • lookahead (barmerge_lookahead) 给所请求的数据合并策略。可能的值:barmerge.lookahead_on,barmerge.lookahead_off。 从版本3开始,默认值为barmerge.lookahead_off。请注意,行为与实时相同,仅在历史上不同。
  • ignore_invalid_symbol (const bool) 一个可选参数。如果未找到指定的商品,则确定函数的行为:如果为 false,脚本将停止并返回运行时错误; 如果为true,函数将返回na并继续执行。默认值为false。
  • currency (simple string) 将商品的货币相关值(例如 OHLC)转换成的货币。然后根据转换后的值计算“expression”。使用的转换率基于FX_IDC对的前一天的每日汇率(相对于进行计算的K线)。可选。默认值为syminfo.currency。可能的值:带有 ISO 4217格式的货币代码(例如“USD”)的三字母字符串或 currency.* 命名空间中的常量之一,例如currency.USD。

备注 使用此功能的PineScript代码可以对历史记录和实时数据进行不同的计算。 如果您想为请求的商品指定附加参数,例如交易时段或调整类型,您可以使用ticker.new()函数。 无法使用’ticker’变量将点差传递给此函数。您可以使用’ticker.new’变量或股票代码的字符串表示形式,例如“AAPL+MSFT*TSLA”。 目前,一个脚本中最多可以有40个request.security调用。 请注意,使用此变量/函数可能会导致指标重新绘制。 分辨率参数允许值为: 1S,5S,15S,30S - 秒间隔(图表周期应小于或等于请求的周期) 从1到1440分钟 从1D到365D天 从1W到52W几周 从1M到12M几个月

另见 syminfo.ticker syminfo.tickerid timeframe.period ta.correlation barmerge.lookahead_off barmerge.lookahead_on

str

str.contains

如果source字符串包含str子字符串,则返回true,否则返回false。

str.contains(source, str)

例子

// If the current chart is a continuous futures chart, e.g “BTC1!”, then the function will return true, false otherwise.
var isFutures = str.contains(syminfo.tickerid, "!")
plot(isFutures ? 1 : 0)

返回值 如果在source字符串中找到 str,则为true ,否则为false。

参数

  • source (series string) 来源字符串
  • str (series string) 要搜索的子字符串。

另见 str.pos str.match

str.endswith

如果source字符串以str中指定的子字符串结尾,则返回true,否则返回false。

str.endswith(source, str)

返回值 如果source字符串以str中指定的子字符串结尾,则为true,否则为false。

参数

  • source (series string) 来源字符串
  • str (series string) 要搜索的子字符串。

另见 str.startswith

str.startswith

如果source字符串以str中指定的子字符串开头,则返回true,否则返回false。

str.startswith(source, str)

返回值 如果source字符串以str中指定的子字符串开头,则为true,否则为false。

参数

  • source (series string) 来源字符串
  • str (series string) 要搜索的子字符串。

另见 str.endswith

str.substring

返回一个新字符串,它是source字符串的子字符串。子字符串以begin_pos 指定的索引处的字符开始,并扩展到source 字符串的’end_pos - 1’。

str.substring(source, begin_pos)
str.substring(source, begin_pos, end_pos)

例子

sym= "EXCHANGE_NAME:SYMBOL_NAME"
pos = str.pos(sym, ":")        // Get position of ":" character
tkr= str.substring(sym, pos+1) // "SYMBOL_NAME"
if barstate.islastconfirmedhistory
    runtime.log(tkr)

返回值 从源字符串中提取的子字符串。

参数

  • source (series string) 从中提取子字符串的源字符串。
  • begin_pos (series int) 提取的子串的起始位置。它是独占的(提取的子字符串包括该位置的字符)。
  • end_pos (series int) 结束位置。它是独占的(提取的字符串不包括该位置的字符)。可选。默认值为source字符串的长度。

备注 字符串索引从0开始。如果begin_pos等于end_pos,函数返回一个空字符串。

另见 str.contains str.pos str.match

str.tonumber

str.tonumber(string)

返回值 如果包含有效数字,为字符串的浮点型,否则为na。

参数

  • string (series string) int或float的字符串表现形式。

str.format

将格式字符串和值转换为格式化字符串。格式字符串可以包含文字文本和每个要格式化的值的大括号{}中的一个占位符。每个占位符包括将替换它的必需参数的指数(从0开始) ,以及一个可选的格式说明符。索引表示该参数在str.format参数列表中的位置。

str.format(formatString, arg0, arg1, ...)

例子

// The format specifier inside the curly braces accepts certain modifiers:
// - Specify the number of decimals to display:
s1 = str.format("{0,number,#.#}", 1.34) // returns: 1.3
runtime.log(s1)

// - Round a float value to an integer:
s2 = str.format("{0,number,integer}", 1.34) // returns: 1
runtime.log(s2)

// - Display a number in currency:
s3 = str.format("{0,number,currency}", 1.34) // returns: $1.34
runtime.log(s3)

// - Display a number as a percentage:
s4 = str.format("{0,number,percent}", 0.5) // returns: 50%
runtime.log(s4)

// EXAMPLES WITH SEVERAL ARGUMENTS
// returns: Number 1 is not equal to 4
s5 = str.format("Number {0} is not {1} to {2}", 1, "equal", 4)
runtime.log(s5)

// returns: 1.34 != 1.3
s6 = str.format("{0} != {0, number, #.#}", 1.34)
runtime.log(s6)

// returns: 1 is equal to 1, but 2 is equal to 2
s7 = str.format("{0, number, integer} is equal to 1, but {1, number, integer} is equal to 2", 1.34, 1.52)
runtime.log(s7)

// returns: The cash turnover amounted to $1,340,000.00
s8 = str.format("The cash turnover amounted to {0, number, currency}", 1340000)
runtime.log(s8)

// returns: Expected return is 10% - 20%
s9 = str.format("Expected return is {0, number, percent} - {1, number, percent}", 0.1, 0.2)
runtime.log(s9)

返回值 格式化的字符串。

参数

  • formatString (series string) 格式字符串。
  • arg0, arg1, ... (series int/float/bool/string/na/int[]/float[]/bool[]/string[]) 要格式化的值。

备注 未引用样式中的所有花括号必须保持平衡。例如,“ab {0} de"和"ab ‘}’ de"是有效的样式 ,但是"ab {0’}’ de”, “ab } de"和”’’{’’"不是有效样式。

str.length

返回与该字符串中的字符数相对应的整数。

str.length(string)

返回值 源字符串中的字符数。

参数

  • string (series string) 来源字符串

str.lower

返回一个所有字母都转换为小写的新字符串。

str.lower(source)

返回值 所有字母都转换为小写的新字符串。

参数

  • source (series string) 要转换的字符串。

另见 str.upper

str.upper

返回一个所有字母都转换为大写的新字符串。

str.upper(source)

返回值 所有字母都转换为大写的新字符串。

参数

  • source (series string) 要转换的字符串。

另见 str.lower

str.match

如果匹配regex正则表达式,则返回source字符串的新子字符串,否则返回’na’。

str.match(source, regex) 

例子

s = input.string("It's time to sell some EXCHANGE_NAME:SYMBOL_NAME!")

// finding first substring that matches regular expression "[\w]+:[\w]+"
var string tickerid = str.match(s, "[\\w]+:[\\w]+")

if barstate.islastconfirmedhistory
    runtime.log(tickerid) // "EXCHANGE_NAME:SYMBOL_NAME"

返回值 source字符串的新子字符串,如果它匹配一个regex正则表达式,否则为’na’。

参数

  • source (series string) 来源字符串
  • regex (series string) 与此字符串匹配的正则表达式。

备注 函数返回source字符串中第一次出现的正则表达式。 regex字符串中的反斜杠“\”符号需要使用额外的反斜杠进行转义,例如“\d”代表正则表达式“\d”。

另见 str.contains str.substring

str.pos

返回source字符串中第一次出现str字符串的位置,否则返回’na’。

str.pos(source, str)

返回值 str字符串在source字符串中的位置。

参数

  • source (series string) 来源字符串
  • str (series string) 要搜索的子字符串。

备注 字符串索引从0开始。

另见 str.contains str.match str.substring

str.replace

返回一个新字符串,其中第N+1次出现的target字符串以及以前出现的target字符串替换为replacement字符串,其中N在occurrence中指定。N为要替换的目标字符串在来源字符串中出现的匹配索引。

str.replace(source, target, replacement, occurrence)

例子

var source = "EXCHANGE1:SYMBOL1 / EXCHANGE1:SYMBOL2"

// Replace first occurrence of "EXCHANGE1" with "EXCHANGE2" replacement string
var newSource = str.replace(source, "EXCHANGE1",  "EXCHANGE2", 0)

if barstate.islastconfirmedhistory
    // Display "EXCHANGE2:SYMBOL1 / EXCHANGE1:SYMBOL2"
    runtime.log(newSource)

返回值 已处理字符串

参数

  • source (series string) 来源字符串
  • target (series string) 被替换字符串
  • replacement (series string) 要插入的字符串而不是目标字符串。
  • occurrence (series int) 要替换的目标字符串在来源字符串中出现的匹配索引。第一个匹配的索引从0开始。可选。默认值为0。

另见 str.replace_all str.match

str.replace_all

用替换字符串,替换源字符串中每次出现的目标字符串。

str.replace_all(source, target, replacement)

返回值 已处理字符串

参数

  • source (series string) 来源字符串
  • target (series string) 被替换字符串
  • replacement (series string) 每次出现的目标字串都将替换的字串

str.split

将字符串划分为子字符串阵列,并返回其阵列ID。

str.split(string, separator)

返回值 字符串阵列的ID。

参数

  • string (series string) 来源字符串
  • separator (series string) 分隔每个子字符串的字符串。

str.tostring

str.tostring(value)
str.tostring(value, format)
str.tostring(value[])
str.tostring(value[], format)

返回值 value参数的字符串表示形式。 如果value参数是字符串,则按原样返回。 当value为na时,函数返回字符串“NaN”。

参数

  • value (series int/float/bool/string/int[]/float[]/bool[]/string[]) 其元素转换为字符串的值或数组ID。
  • format (series string) Format string. Accepts these format.* constants: format.mintick, format.percent, format.volume. Optional. The default value is ‘#.##########’.

备注 浮点值的格式也会在必要时四舍五入这些值,例如str.tostring(3.99, ‘#’) 将返回“4”。 要显示尾随零,请使用’0’而不是’#’。例如,’#.000’。 使用format.mintick时,该值将四舍五入到可以除以syminfo.mintick而没有余数的最接近的数字。返回的字符串带有尾随零。 如果x参数是字符串,则将返回相同的字符串值。 Bool类型参数返回“true”或“false”。 当x为na时,函数返回“NaN”。

color

color.new

功能颜色将指定透明度应用于给定的颜色。

color.new(color, transp)

例子

plot(close, color=color.new(color.red, 50))

返回值 有特定透明度的颜色。

参数

  • color (series color)
  • transp (series int/float) 可用的值是从0(不透明)到100(不可见)

备注 使用非常数的参数(例如,“simple”、“input”或“series”)将对脚本“设置/样式”标签页中显示的颜色产生影响。请参阅用户手册了解更多信息。

color.rgb

使用RGB颜色模型创建带有透明度的新颜色。

color.rgb(red, green, blue, transp)

例子

plot(close, color=color.rgb(255, 0, 0, 50))

返回值 有特定透明度的颜色。

参数

  • red (series int/float) 红色调。可能的值是从0到255。
  • green (series int/float) 绿色调。可能的值是从0到255。
  • blue (series int/float) 蓝色调。可能的值是从0到255。
  • transp (series int/float) 可选。颜色透明。可能的值从0(不透明)到100(透明)。默认值为0。

备注 使用非常数的参数(例如,“simple”、“input”或“series”)将对脚本“设置/样式”标签页中显示的颜色产生影响。请参阅用户手册了解更多信息。

runtime

runtime.debug

在控制台打印变量信息。

FMZ PINE语言特有函数,runtime.debug(value),只有一个参数。

runtime.log

在日志输出内容。

FMZ PINE语言特有函数,runtime.log(1, 2, 3, close, high, ...),可以传多个参数。

runtime.error

调用时,会导致运行时错误,并带有在message参数中指定的错误消息。

runtime.error(message)

参数 message (series string) 错误消息。

input

input

将input添加到脚本设置的输入标签页,它允许您向脚本用户提供配置选项。此函数自动检测用于“defval”的参数类型并使用相应的输入插件。

input(defval, title, tooltip, inline, group)
input(defval, title, inline, group, tooltip)

例子

i_switch = input(true, "On/Off")     // 设置true,默认勾选
plot(i_switch ? open : na)

i_len = input(7, "Length")
i_src = input(close, "Source")       // 下拉框,默认选择close
plot(ta.sma(i_src, i_len))

i_col = input(color.red, "Plot Color")
plot(close, color=i_col)

i_text = input("Hello!", "Message")
runtime.log(i_text)

返回值 输入变量值

参数

  • defval (const int/float/bool/string/color or source-type built-ins) 确定脚本的“设置/输入”标签页中建议的输入变量的默认值,脚本用户可以从中更改它。源类型内置函数是指定计算源的内置系列浮点变量:closehlc3 等。
  • title (const string) 输入的标题。如果未指定,则将变量名用作输入的标题。如果指定了标题,但标题为空,则名称将为空字符串。
  • tooltip (const string) 此字符串将在鼠标悬停在工具提示图标上时显示给用户。
  • inline (const string) 在一行中使用相同的参数合并所有输入调用。不显示用作参数的字符串。它仅用于辨识属于同一行的输入。
  • group (const string) 使用相同的组参数字符串在所有输入上方创建标头。该字符串也用作标头的文本。

备注 input函数的返回值应始终分配给变量。见上面的例子

另见 input.bool input.color input.int input.float input.string input.timeframe input.source

input.source

将input添加到脚本设置的输入标签页,它允许您向脚本用户提供配置选项。此功能添加了一个下拉菜单,允许用户选择计算源,例如close、hl2等。如果脚本只包含一个input.source()调用,用户还可以选择图表上另一个指标的输出作为源。

input.source(defval, title, tooltip, inline, group)

例子

i_src = input.source(close, "Source")
plot(i_src)

返回值 输入变量值

参数

  • defval (series int/float) 确定脚本的“设置/输入”标签页中建议的输入变量的默认值,用户可以从中更改它。
  • title (const string) 输入的标题。如果未指定,则将变量名用作输入的标题。如果指定了标题,但标题为空,则名称将为空字符串。
  • tooltip (const string) 此字符串将在鼠标悬停在工具提示图标上时显示给用户。
  • inline (const string) 在一行中使用相同的参数合并所有输入调用。不显示用作参数的字符串。它仅用于辨识属于同一行的输入。
  • group (const string) 使用相同的组参数字符串在所有输入上方创建标头。该字符串也用作标头的文本。

备注 input.source函数的结果总是应该分配给一个变量,见上面的例子。

另见 input.bool input.int input.float input.string input.timeframe input.color input

input.string

将input添加到脚本设置的输入选项卡,它允许您向脚本用户提供配置选项。此函数将字符串输入字段添加到脚本的输入中。

input.string(defval, title, options, tooltip, inline, group, confirm)

例子

i_text = input.string("Hello!", "Message")
runtime.log(i_text)

返回值 输入变量值

参数

  • defval (const string) 确定脚本的“设置/输入”标签页中建议的输入变量的默认值,用户可以从中更改它。当值列表与options参数一起使用时,该值必须是其中之一。
  • title (const string) 输入的标题。如果未指定,则将变量名用作输入的标题。如果指定了标题,但标题为空,则名称将为空字符串。
  • options (List of constants: [<type>…]) 可供选择的选项列表。
  • tooltip (const string) 此字符串将在鼠标悬停在工具提示图标上时显示给用户。
  • inline (const string) 在一行中使用相同的参数合并所有输入调用。不显示用作参数的字符串。它仅用于辨识属于同一行的输入。
  • group (const string) 使用相同的组参数字符串在所有输入上方创建标头。该字符串也用作标头的文本。
  • confirm (const bool) 如果为true,则在将指标添加到图表之前,将要求用户确认输入值。默认值为false。

备注 input.string函数的结果总是应该分配给一个变量,见上面的例子。

另见 input.bool input.int input.float input.timeframe input.source input.color input

input.bool

将input添加到脚本设置的输入标签页,它允许您向脚本用户提供配置选项。此函数为脚本的输入添加复选标记。

input.bool(defval, title, tooltip, inline, group, confirm)

例子

i_switch = input.bool(true, "On/Off")
plot(i_switch ? open : na)

返回值 输入变量值

参数

  • defval (const bool) 确定脚本的“设置/输入”标签页中建议的输入变量的默认值,用户可以从中更改它。
  • title (const string) 输入的标题。如果未指定,则将变量名用作输入的标题。如果指定了标题,但标题为空,则名称将为空字符串。
  • tooltip (const string) 此字符串将在鼠标悬停在工具提示图标上时显示给用户。
  • inline (const string) 在一行中使用相同的参数合并所有输入调用。不显示用作参数的字符串。它仅用于辨识属于同一行的输入。
  • group (const string) 使用相同的组参数字符串在所有输入上方创建标头。该字符串也用作标头的文本。
  • confirm (const bool) 如果为true,则在将指标添加到图表之前,将要求用户确认输入值。默认值为false。

备注 input.bool函数的结果总是应该分配给一个变量,见上面的例子。

另见 input.int input.float input.string input.timeframe input.source input.color input

input.int

将input添加到脚本设置的输入标签页,它允许您向脚本用户提供配置选项。此函数将整数输入字段添加到脚本的输入中。

input.int(defval, title, minval, maxval, step, tooltip, inline, group, confirm) 
input.int(defval, title, options, tooltip, inline, group, confirm)

例子

i_len1 = input.int(10, "Length 1", minval=5, maxval=21, step=1)
plot(ta.sma(close, i_len1))

i_len2 = input.int(10, "Length 2", options=[5, 10, 21])
plot(ta.sma(close, i_len2))

返回值 输入变量值

参数

  • defval (const int) 确定脚本的“设置/输入”标签页中建议的输入变量的默认值,脚本用户可以从中更改它。当值列表与 options 参数一起使用时,该值必须是其中之一。
  • title (const string) 输入的标题。如果未指定,则将变量名用作输入的标题。如果指定了标题,但标题为空,则名称将为空字符串。
  • minval (const int) 输入变量的最小可能值。可选。
  • maxval (const int) 输入变量的最大可能值。可选。
  • step (const int) 用于增加/减少输入的步长值。可选。默认值为1。
  • options (tuple of const int values: [val1, val2, …]) 从下拉菜单中选择的选项列表,以逗号分隔并用方括号括起来:[val1, val2, …]。使用该参数时,不能使用minvalmaxvalstep参数。
  • tooltip (const string) 此字符串将在鼠标悬停在工具提示图标上时显示给用户。
  • inline (const string) 在一行中使用相同的参数合并所有输入调用。不显示用作参数的字符串。它仅用于辨识属于同一行的输入。
  • group (const string) 使用相同的组参数字符串在所有输入上方创建标头。该字符串也用作标头的文本。
  • confirm (const bool) 如果为true,则在将指标添加到图表之前,将要求用户确认输入值。默认值为false。

备注 input.int函数的结果总是应该分配给一个变量,见上面的例子。

另见 input.bool input.float input.string input.timeframe input.source input.color input

input.float

将input添加到脚本设置的输入标签页,它允许您向脚本用户提供配置选项。此函数将浮点输入字段添加到脚本的输入中。

input.float(defval, title, minval, maxval, step, tooltip, inline, group, confirm)
input.float(defval, title, options, tooltip, inline, group, confirm)

例子

i_angle1 = input.float(0.5, "Sin Angle", minval=-3.14, maxval=3.14, step=0.02)
plot(math.sin(i_angle1) > 0 ? close : open, "sin", color=color.green)

i_angle2 = input.float(0, "Cos Angle", options=[-3.14, -1.57, 0, 1.57, 3.14])
plot(math.cos(i_angle2) > 0 ? close : open, "cos", color=color.red)

返回值 输入变量值

参数

  • defval (const int/float) 确定脚本的“设置/输入”标签页中建议的输入变量的默认值,脚本用户可以从中更改它。当值列表与 options 参数一起使用时,该值必须是其中之一。
  • title (const string) 输入的标题。如果未指定,则将变量名用作输入的标题。如果指定了标题,但标题为空,则名称将为空字符串。
  • minval (const int/float) 输入变量的最小可能值。可选。
  • maxval (const int/float) 输入变量的最大可能值。可选。
  • step (const int/float) 用于增加/减少输入的步长值。可选。默认值为1。
  • options (tuple of const int/float values: [val1, val2, …]) 从下拉菜单中选择的选项列表,以逗号分隔并用方括号括起来:[val1, val2, …]。使用该参数时,不能使用minvalmaxvalstep参数。
  • tooltip (const string) 此字符串将在鼠标悬停在工具提示图标上时显示给用户。
  • inline (const string) 在一行中使用相同的参数合并所有输入调用。不显示用作参数的字符串。它仅用于辨识属于同一行的输入。
  • group (const string) 使用相同的组参数字符串在所有输入上方创建标头。该字符串也用作标头的文本。
  • confirm (const bool) 如果为true,则在将指标添加到图表之前,将要求用户确认输入值。默认值为false。

备注 input.float函数的结果总是应该分配给一个变量,见上面的例子。

另见 input.bool input.int input.string input.timeframe input.source input.color input

input.color

将input添加到脚本设置的输入标签页,它允许您向脚本用户提供配置选项。此函数添加了一个颜色选择器,允许用户从调色板或十六进制值中选择颜色和透明度。

input.color(defval, title, tooltip, inline, group, confirm) 

例子

i_col = input.color(color.red, "Plot Color")
plot(close, color=i_col)

返回值 输入变量值

参数

  • defval (const color) 确定脚本的“设置/输入”标签页中建议的输入变量的默认值,用户可以从中更改它。
  • title (const string) 输入的标题。如果未指定,则将变量名用作输入的标题。如果指定了标题,但标题为空,则名称将为空字符串。
  • tooltip (const string) 此字符串将在鼠标悬停在工具提示图标上时显示给用户。
  • inline (const string) 在一行中使用相同的参数合并所有输入调用。不显示用作参数的字符串。它仅用于辨识属于同一行的输入。
  • group (const string) 使用相同的组参数字符串在所有输入上方创建标头。该字符串也用作标头的文本。
  • confirm (const bool) 如果为true,则在将指标添加到图表之前,将要求用户确认输入值。默认值为false。

备注 input.color函数的结果总是应该分配给一个变量,见上面的例子。

另见 input.bool input.int input.float input.string input.timeframe input.source input

input.price

将价格输入添加到脚本的“设置/输入”标签页。使用 confirm = true 激活交互式输入模式,通过点击图表选择价格。

input.price(defval, title, tooltip, inline, group, confirm) 

例子

price1 = input.price(title="Date", defval=42)
plot(price1)

price2 = input.price(54, title="Date")
plot(price2)

返回值 输入变量值

参数

  • defval (const int/float) 确定脚本的“设置/输入”标签页中建议的输入变量的默认值,用户可以从中更改它。
  • title (const string) 输入的标题。如果未指定,则将变量名用作输入的标题。如果指定了标题,但标题为空,则名称将为空字符串。
  • tooltip (const string) 此字符串将在鼠标悬停在工具提示图标上时显示给用户。
  • inline (const string) 在一行中使用相同的参数合并所有输入调用。不显示用作参数的字符串。它仅用于辨识属于同一行的输入。
  • group (const string) 使用相同的组参数字符串在所有输入上方创建标头。该字符串也用作标头的文本。
  • confirm (const bool) 如果为true,则启用交互式输入模式,并通过在将指标添加到图表时点击图表来完成选择,或者通过选择指标并在此之后移动选择来完成选择。可选。默认值为false。

备注 使用交互模式时,如果两个函数调用对其 inline 参数使用相同的参数,则可以将时间输入与价格输入结合使用。

另见 input.bool input.int input.float input.string input.resolution input.source input.color input

input.timeframe

将input添加到脚本设置的输入标签页,它允许您向脚本用户提供配置选项。此函数添加一个下拉列表,允许用户通过时间周期选择器选择特定时间周期并将其作为字符串返回。选择器包括用户可能使用图表的时间周期下拉菜单添加的自定义时间周期。

input.timeframe(defval, title, options, tooltip, inline, group, confirm)

例子

i_res = input.timeframe('D', "Resolution", options=['D', 'W', 'M'])
s = request.security(syminfo.tickerid, i_res, close)
plot(s)

返回值 输入变量值

参数

  • defval (const string) 确定脚本的“设置/输入”标签页中建议的输入变量的默认值,用户可以从中更改它。当值列表与options参数一起使用时,该值必须是其中之一。
  • title (const string) 输入的标题。如果未指定,则将变量名用作输入的标题。如果指定了标题,但标题为空,则名称将为空字符串。
  • options (tuple of const string values: [val1, val2, …]) 可供选择的选项列表。
  • tooltip (const string) 此字符串将在鼠标悬停在工具提示图标上时显示给用户。
  • inline (const string) 在一行中使用相同的参数合并所有输入调用。不显示用作参数的字符串。它仅用于辨识属于同一行的输入。
  • group (const string) 使用相同的组参数字符串在所有输入上方创建标头。该字符串也用作标头的文本。
  • confirm (const bool) 如果为true,则在将指标添加到图表之前,将要求用户确认输入值。默认值为false。

备注 input.timeframe函数的结果总是应该分配给一个变量,见上面的例子。

另见 input.bool input.int input.float input.string input.source input.color input

input.integer

暂无

input.resolution

暂无

ta

ta.alma

Arnaud Legoux移动平均线。 它使用高斯分布作为移动平均值的权重。

ta.alma(series, length, offset, sigma) 
ta.alma(series, length, offset, sigma, floor) 

例子

plot(ta.alma(close, 9, 0.85, 6))

// same on pine, but much less efficient
pine_alma(series, windowsize, offset, sigma) =>
    m = offset * (windowsize - 1)
    //m = math.floor(offset * (windowsize - 1)) // Used as m when math.floor=true
    s = windowsize / sigma
    norm = 0.0
    sum = 0.0
    for i = 0 to windowsize - 1
        weight = math.exp(-1 * math.pow(i - m, 2) / (2 * math.pow(s, 2)))
        norm := norm + weight
        sum := sum + series[windowsize - i - 1] * weight
    sum / norm
plot(pine_alma(close, 9, 0.85, 6))

返回值 Arnaud Legoux移动平均线

参数

  • series (series int/float) 待执行的系列值。
  • length (series int) K线数量(长度).
  • offset (simple int/float) 控制平滑度(更接近1)和响应性(更接近0)之间的权衡。
  • sigma (simple int/float) 改变ALMA的平滑度。Sigma越大,ALMA越平滑。
  • floor (simple bool) 可选参数。在计算ALMA之前,指定偏移量计算是否为下限。默认值为false。

另见 ta.sma ta.ema ta.rma ta.wma ta.vwma ta.swma

ta.sma

sma函数返回移动平均值,即x的最后y值,除以y。

ta.sma(source, length) 

例子

plot(ta.sma(close, 15))

// same on pine, but much less efficient
pine_sma(x, y) =>
    sum = 0.0
    for i = 0 to y - 1
        sum := sum + x[i] / y
    sum
plot(pine_sma(close, 15))

返回值 lengthK线返回的source的简单移动平均线。

参数

  • source (series int/float) 待执行的系列值。
  • length (series int) K线数量(长度).

另见 ta.ema ta.rma ta.wma ta.vwma ta.swma ta.alma

ta.cog

cog(重心点)是基于统计学和斐波那契黄金比例的指标。

ta.cog(source, length) 

例子

plot(ta.cog(close, 10))

// the same on pine
pine_cog(source, length) =>
    sum = math.sum(source, length)
    num = 0.0
    for i = 0 to length - 1
        price = source[i]
        num := num + price * (i + 1)
    -num / sum

plot(pine_cog(close, 10))

返回值 重心

参数

  • source (series int/float) 待执行的系列值。
  • length (series int) K线数量(长度).

另见 ta.stoch

ta.dev

衡量系列与其ta.sma之间的差异

ta.dev(source, length) 

例子

plot(ta.dev(close, 10))

// the same on pine
pine_dev(source, length) =>
    mean = ta.sma(source, length)
    sum = 0.0
    for i = 0 to length - 1
        val = source[i]
        sum := sum + math.abs(val - mean)
    dev = sum/length
plot(pine_dev(close, 10))

返回值 lengthK线返回的source偏差。

参数

  • source (series int/float) 待执行的系列值。
  • length (series int) K线数量(长度).

另见 ta.variance ta.stdev

ta.stdev

ta.stdev(source, length, biased) 

例子

plot(ta.stdev(close, 5))

//the same on pine
isZero(val, eps) => math.abs(val) <= eps

SUM(fst, snd) =>
    EPS = 1e-10
    res = fst + snd
    if isZero(res, EPS)
        res := 0
    else
        if not isZero(res, 1e-4)
            res := res
        else
            15

pine_stdev(src, length) =>
    avg = ta.sma(src, length)
    sumOfSquareDeviations = 0.0
    for i = 0 to length - 1
        sum = SUM(src[i], -avg)
        sumOfSquareDeviations := sumOfSquareDeviations + sum * sum

    stdev = math.sqrt(sumOfSquareDeviations / length)
plot(pine_stdev(close, 5))

返回值 标准差

参数

  • source (series int/float) 待执行的系列值。
  • length (series int) K线数量(长度).
  • biased (series bool) 确定应该使用哪个估计。可选。默认值为true。

备注 如果biased为true,函数将使用对整个总体的有偏估计进行计算,如果为false - 对样本的无偏估计。

另见 ta.dev ta.variance

ta.ema

ema 函数返回指数加权移动平均线。在 ema 中,加权因子呈指数下降。它使用以下公式计算:EMA = alpha * source + (1 - alpha) * EMA[1],其中 alpha = 2 / (length + 1)。

ta.ema(source, length) 

例子

plot(ta.ema(close, 15))

//the same on pine
pine_ema(src, length) =>
    alpha = 2 / (length + 1)
    sum = 0.0
    sum := na(sum[1]) ? src : alpha * src + (1 - alpha) * nz(sum[1])
plot(pine_ema(close,15))

返回值 source 的指数移动平均线,alpha = 2 / (长度 + 1)。

参数

  • source (series int/float) 待执行的系列值。
  • length (simple int) K线数量(长度).

备注 请注意,使用此变量/函数可能会导致指标重新绘制。

另见 ta.sma ta.rma ta.wma ta.vwma ta.swma ta.alma

ta.wma

wma 函数返回 length K线的 source 的加权移动平均值。在 wma 中,加权因子以算术级数递减。

ta.wma(source, length) 

例子

plot(ta.wma(close, 15))

// same on pine, but much less efficient
pine_wma(x, y) =>
    norm = 0.0
    sum = 0.0
    for i = 0 to y - 1
        weight = (y - i) * y
        norm := norm + weight
        sum := sum + x[i] * weight
    sum / norm
plot(pine_wma(close, 15))

返回值 lengthK线返回的source加权移动平均线。

参数

  • source (series int/float) 待执行的系列值。
  • length (series int) K线数量(长度).

另见 ta.sma ta.ema ta.rma ta.vwma ta.swma ta.alma

ta.swma

具有固定长度的对称加权移动平均线:4.权重:[1/6,2 / 6,2 / 6,1 / 6]。

ta.swma(source)

例子

plot(ta.swma(close))

// same on pine, but less efficient
pine_swma(x) =>
    x[3] * 1 / 6 + x[2] * 2 / 6 + x[1] * 2 / 6 + x[0] * 1 / 6
plot(pine_swma(close))

返回值 对称加权移动平均线。

参数

  • source (series int/float) 源系列。

另见 ta.sma ta.ema ta.rma ta.wma ta.vwma ta.alma

ta.hma

hma函数返回船体移动平均线HMA。

ta.hma(source, length)

例子

src = input(defval=close, title="Source")
length = input(defval=9, title="Length")
hmaBuildIn = ta.hma(src, length)
plot(hmaBuildIn, title="Hull MA", color=#674EA7)

返回值 返回 ‘​​length’ 柱的 ‘source’ 的船体移动平均线Hull Moving Average。

参数

  • source (series int/float) 待执行的系列值。
  • length (simple int) K线数量

另见 ta.ema ta.rma ta.wma ta.vwma ta.sma

ta.rma

RSI中使用的移动平均线。 它是指数加权移动平均线,alpha加权值 = 1 /长度。

ta.rma(source, length)

例子

plot(ta.rma(close, 15))

//the same on pine
pine_rma(src, length) =>
  alpha = 1/length
  sum = 0.0
  sum := na(sum[1]) ? ta.sma(src, length) : alpha * src + (1 - alpha) * nz(sum[1])
plot(pine_rma(close, 15))

返回值 source的指数移动平均线,alpha = 1 / length

参数

  • source (series int/float) 待执行的系列值。
  • length (simple int) K线数量(长度).

另见 ta.sma ta.ema ta.wma ta.vwma ta.swma ta.alma ta.rsi

ta.rsi

相对强度指数。它是使用在最后一个 length K线上source 的向上和向下变化的ta.rma() 计算的。

ta.rsi(source, length)

例子

plot(ta.rsi(close, 7))

// same on pine, but less efficient
pine_rsi(x, y) => 
    u = math.max(x - x[1], 0) // upward ta.change
    d = math.max(x[1] - x, 0) // downward ta.change
    rs = ta.rma(u, y) / ta.rma(d, y)
    res = 100 - 100 / (1 + rs)
    res

plot(pine_rsi(close, 7))

返回值 相对强弱指标(RSI)

参数

  • source (series int/float) 待执行的系列值。
  • length (simple int) K线数量(长度).

另见 ta.rma

ta.tsi

真实强弱指数。它使用金融工具潜在动量的移动平均线。

ta.tsi(source, short_length, long_length)

返回值 真实强弱指数。范围[-1,1]中的值。

参数

  • source (series int/float) 源系列。
  • short_length (simple int) 短的长度。
  • long_length (simple int) 长线长度。

ta.roc

函数 roc(变化率)显示 source 的当前值与 source 几天前的 length 值之间的差异。 由以下公式计算:100 * change(src, length) / src[length]。

ta.roc(source, length)

返回值 lengthK线返回的source的变化率。

参数

  • source (series int/float) 待执行的系列值。
  • length (series int) K线数量(长度).

ta.range

返回序列中最小值和最大值之间的差。

ta.range(source, length)

返回值 序列中最小值和最大值之间的差。

参数

  • source (series int/float) 待执行的系列值。
  • length (series int) K线数量(长度).

ta.macd

MACD(平滑异同平均线)。 它应该揭示股票价格趋势的实力、方向、动量和持续时间的变化。

ta.macd(source, fastlen, slowlen, siglen) 

例子

[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
plot(macdLine, color=color.blue)
plot(signalLine, color=color.orange)
plot(histLine, color=color.red, style=plot.style_histogram)

如果您只需要一个值,请使用像这样的占位符’_’:

例子

[_, signalLine, _] = ta.macd(close, 12, 26, 9)
plot(signalLine, color=color.orange)

返回值 三个MACD系列的元组:MACD线、信号线和直方图线。

参数

  • source (series int/float) 待执行的系列值。
  • fastlen (simple int) 快线参数
  • slowlen (simple int) 慢长度参数。
  • siglen (simple int) 信号长度参数。

另见 ta.sma ta.ema

ta.mode

返回序列的模式。如果有多个具有相同频率的值,则返回最小值。

ta.mode(source, length)

返回值 序列的模式。

参数

  • source (series int/float) 待执行的系列值。
  • length (series int) K线数量(长度).

ta.median

返回序列的中位数。

ta.median(source, length) 

返回值 序列的中位数。

参数

  • source (series int/float) 待执行的系列值。
  • length (series int) K线数量(长度).

ta.linreg

线性回归曲线。一条最符合用户定义时间段内指定价格的线。它是使用最小二乘法计算的。此函数的结果使用以下公式计算:linreg = intercept + slope * (length - 1 - offset),其中 intercept 和 slope 是使用 source 系列的最小二乘法计算的值。

ta.linreg(source, length, offset) 

返回值 线性回归曲线

参数

  • source (series int/float) 源系列。
  • length (series int)
  • offset (simple int) 偏移

ta.bb

布林带。布林带是一种技术分析工具,由一组线定义,这些线与证券价格的简单移动平均线(SMA)相距两个标准偏差(正向和负向),但可以根据用户偏好进行调整。

ta.bb(series, length, mult) 

例子

[middle, upper, lower] = ta.bb(close, 5, 4)
plot(middle, color=color.yellow)
plot(upper, color=color.yellow)
plot(lower, color=color.yellow)

// the same on pine
f_bb(src, length, mult) =>
    float basis = ta.sma(src, length)
    float dev = mult * ta.stdev(src, length)
    [basis, basis + dev, basis - dev]

[pineMiddle, pineUpper, pineLower] = f_bb(close, 5, 4)

plot(pineMiddle)
plot(pineUpper)
plot(pineLower)

返回值 布林带。

参数

  • series (series int/float) 待执行的系

More

wuhuoyan 想要币安u合约多个交易对同时运行怎么搞

轻轻的云 请教下,pine能多交易对吗? 也是和JS一样遍历交易对吗??谢谢。

lisa20231 謝謝提供詳細的文檔

artistry 大佬!这 pine script 怎么在平台上使用 okex 的模拟盘?

artistry 这等于是 tradingview平台的策略直接copy到发明者平台就可以使用了吧!

发明者量化-小小梦 PINE语言只能做单品种策略,多品种策略最好还是用python , javascript , c++编写设计。

发明者量化-小小梦 嗯,是的,OKX比较特殊,他们的模拟环境和实盘环境是一样的地址,只是在其它地方做了区别。所以没办法用切换基地址,去切换到模拟盘。

轻轻的云 用不了okx模拟盘。。。。。[捂脸]

发明者量化-小小梦 这个多品种的架构问题不好解决,因为每个交易所接口不一样,对接口频率限定也不一样,会产生很多问题。

发明者量化-小小梦 好的,感谢云总提出建议,这边报下这个需求。

轻轻的云 感觉最好能和JS混编,JS可以更好的适应各种交易方式。

趋势猎手 以后会考虑多品种吗?收盘价每个品种遍历就行

发明者量化-小小梦 不客气。

轻轻的云 好的,谢谢梦大。

发明者量化-小小梦 您好,暂时PINE语言策略只能做单品种。

发明者量化-小小梦 不客气,感谢您的支持。文档还会继续完善。

发明者量化-小小梦 是的。

发明者量化-小小梦 PINE模版类库,参数上可以设置切换交易所基地址。文档开头的:PINE语言交易类库模版参数。