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)
例子
// 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
创建一个代码标识符请求平滑平均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.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(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
如果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
如果source
字符串以str
中指定的子字符串结尾,则返回true,否则返回false。
str.endswith(source, str)
返回值
如果source
字符串以str
中指定的子字符串结尾,则为true,否则为false。
参数
source
(series string) 来源字符串str
(series string) 要搜索的子字符串。另见
str.startswith
如果source
字符串以str
中指定的子字符串开头,则返回true,否则返回false。
str.startswith(source, str)
返回值
如果source
字符串以str
中指定的子字符串开头,则为true,否则为false。
参数
source
(series string) 来源字符串str
(series string) 要搜索的子字符串。另见
str.endswith
返回一个新字符串,它是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(string)
返回值 如果包含有效数字,为字符串的浮点型,否则为na。
参数
string
(series string) int或float的字符串表现形式。将格式字符串和值转换为格式化字符串。格式字符串可以包含文字文本和每个要格式化的值的大括号{}中的一个占位符。每个占位符包括将替换它的必需参数的指数(从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(string)
返回值 源字符串中的字符数。
参数
string
(series string) 来源字符串返回一个所有字母都转换为小写的新字符串。
str.lower(source)
返回值 所有字母都转换为小写的新字符串。
参数
source
(series string) 要转换的字符串。另见
str.upper
返回一个所有字母都转换为大写的新字符串。
str.upper(source)
返回值 所有字母都转换为大写的新字符串。
参数
source
(series string) 要转换的字符串。另见
str.lower
如果匹配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
返回source
字符串中第一次出现str
字符串的位置,否则返回’na’。
str.pos(source, str)
返回值
str
字符串在source
字符串中的位置。
参数
source
(series string) 来源字符串str
(series string) 要搜索的子字符串。备注 字符串索引从0开始。
另见
str.contains
str.match
str.substring
返回一个新字符串,其中第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(source, target, replacement)
返回值 已处理字符串
参数
source
(series string) 来源字符串target
(series string) 被替换字符串replacement
(series string) 每次出现的目标字串都将替换的字串将字符串划分为子字符串阵列,并返回其阵列ID。
str.split(string, separator)
返回值 字符串阵列的ID。
参数
string
(series string) 来源字符串separator
(series string) 分隔每个子字符串的字符串。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.new(color, transp)
例子
plot(close, color=color.new(color.red, 50))
返回值 有特定透明度的颜色。
参数
color
(series color)transp
(series int/float) 可用的值是从0(不透明)到100(不可见)备注 使用非常数的参数(例如,“simple”、“input”或“series”)将对脚本“设置/样式”标签页中显示的颜色产生影响。请参阅用户手册了解更多信息。
使用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”)将对脚本“设置/样式”标签页中显示的颜色产生影响。请参阅用户手册了解更多信息。
在控制台打印变量信息。
FMZ PINE语言特有函数,runtime.debug(value)
,只有一个参数。
在日志输出内容。
FMZ PINE语言特有函数,runtime.log(1, 2, 3, close, high, ...)
,可以传多个参数。
调用时,会导致运行时错误,并带有在message
参数中指定的错误消息。
runtime.error(message)
参数 message (series string) 错误消息。
将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) 确定脚本的“设置/输入”标签页中建议的输入变量的默认值,脚本用户可以从中更改它。源类型内置函数是指定计算源的内置系列浮点变量:close
、hlc3
等。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添加到脚本设置的输入标签页,它允许您向脚本用户提供配置选项。此功能添加了一个下拉菜单,允许用户选择计算源,例如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添加到脚本设置的输入选项卡,它允许您向脚本用户提供配置选项。此函数将字符串输入字段添加到脚本的输入中。
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添加到脚本设置的输入标签页,它允许您向脚本用户提供配置选项。此函数为脚本的输入添加复选标记。
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添加到脚本设置的输入标签页,它允许您向脚本用户提供配置选项。此函数将整数输入字段添加到脚本的输入中。
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, …]。使用该参数时,不能使用minval
、maxval
和step
参数。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添加到脚本设置的输入标签页,它允许您向脚本用户提供配置选项。此函数将浮点输入字段添加到脚本的输入中。
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, …]。使用该参数时,不能使用minval
、maxval
和step
参数。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添加到脚本设置的输入标签页,它允许您向脚本用户提供配置选项。此函数添加了一个颜色选择器,允许用户从调色板或十六进制值中选择颜色和透明度。
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
将价格输入添加到脚本的“设置/输入”标签页。使用 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添加到脚本设置的输入标签页,它允许您向脚本用户提供配置选项。此函数添加一个下拉列表,允许用户通过时间周期选择器选择特定时间周期并将其作为字符串返回。选择器包括用户可能使用图表的时间周期下拉菜单添加的自定义时间周期。
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
暂无
暂无
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
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))
返回值
length
K线返回的source
的简单移动平均线。
参数
source
(series int/float) 待执行的系列值。length
(series int) K线数量(长度).另见
ta.ema
ta.rma
ta.wma
ta.vwma
ta.swma
ta.alma
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.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))
返回值
length
K线返回的source
偏差。
参数
source
(series int/float) 待执行的系列值。length
(series int) K线数量(长度).另见
ta.variance
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
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
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))
返回值
length
K线返回的source
加权移动平均线。
参数
source
(series int/float) 待执行的系列值。length
(series int) K线数量(长度).另见
ta.sma
ta.ema
ta.rma
ta.vwma
ta.swma
ta.alma
具有固定长度的对称加权移动平均线: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
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
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
相对强度指数。它是使用在最后一个 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(source, short_length, long_length)
返回值 真实强弱指数。范围[-1,1]中的值。
参数
source
(series int/float) 源系列。short_length
(simple int) 短的长度。long_length
(simple int) 长线长度。函数 roc(变化率)显示 source
的当前值与 source
几天前的 length
值之间的差异。
由以下公式计算:100 * change(src, length) / src[length]。
ta.roc(source, length)
返回值
length
K线返回的source
的变化率。
参数
source
(series int/float) 待执行的系列值。length
(series int) K线数量(长度).返回序列中最小值和最大值之间的差。
ta.range(source, length)
返回值 序列中最小值和最大值之间的差。
参数
source
(series int/float) 待执行的系列值。length
(series int) K线数量(长度).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(source, length)
返回值 序列的模式。
参数
source
(series int/float) 待执行的系列值。length
(series int) K线数量(长度).返回序列的中位数。
ta.median(source, length)
返回值 序列的中位数。
参数
source
(series int/float) 待执行的系列值。length
(series int) K线数量(长度).线性回归曲线。一条最符合用户定义时间段内指定价格的线。它是使用最小二乘法计算的。此函数的结果使用以下公式计算:linreg = intercept + slope * (length - 1 - offset),其中 intercept 和 slope 是使用 source
系列的最小二乘法计算的值。
ta.linreg(source, length, offset)
返回值 线性回归曲线
参数
source
(series int/float) 源系列。length
(series int)offset
(simple int) 偏移布林带。布林带是一种技术分析工具,由一组线定义,这些线与证券价格的简单移动平均线(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) 待执行的系wuhuoyan 想要币安u合约多个交易对同时运行怎么搞
轻轻的云 请教下,pine能多交易对吗? 也是和JS一样遍历交易对吗??谢谢。
lisa20231 謝謝提供詳細的文檔
artistry 大佬!这 pine script 怎么在平台上使用 okex 的模拟盘?
artistry 这等于是 tradingview平台的策略直接copy到发明者平台就可以使用了吧!
发明者量化-小小梦 PINE语言只能做单品种策略,多品种策略最好还是用python , javascript , c++编写设计。
发明者量化-小小梦 嗯,是的,OKX比较特殊,他们的模拟环境和实盘环境是一样的地址,只是在其它地方做了区别。所以没办法用切换基地址,去切换到模拟盘。
轻轻的云 用不了okx模拟盘。。。。。[捂脸]
发明者量化-小小梦 这个多品种的架构问题不好解决,因为每个交易所接口不一样,对接口频率限定也不一样,会产生很多问题。
发明者量化-小小梦 好的,感谢云总提出建议,这边报下这个需求。
轻轻的云 感觉最好能和JS混编,JS可以更好的适应各种交易方式。
趋势猎手 以后会考虑多品种吗?收盘价每个品种遍历就行
发明者量化-小小梦 不客气。
轻轻的云 好的,谢谢梦大。
发明者量化-小小梦 您好,暂时PINE语言策略只能做单品种。
发明者量化-小小梦 不客气,感谢您的支持。文档还会继续完善。
发明者量化-小小梦 是的。
发明者量化-小小梦 PINE模版类库,参数上可以设置切换交易所基地址。文档开头的:PINE语言交易类库模版参数。