AICoin Script
# AICoin函数库
# 文档说明
此文档基于AICoin官方函数库镜像而来,对于一些函数用法做了示例说明,如有错误、建议请到知识库首页联系方式反馈。因为文档更新会有延迟,会存在本文档与官方文档不一致的情况,此时应以官方文档说明为准。
# 行情数据
# open
序列数据,当前K线的开盘价
open
# high
序列数据,当前k线的最高价
high
# low
序列数据,当前k线的最低价
low
# close
序列数据,当前k线的收盘价
# hl2
序列数据,hl2是(最高价 + 最低价)/ 2 的快捷运算
hl2
# hlc3
序列数据,hlc3是(最高价 + 最低价 + 收盘价)/3 的快捷运算
hlc3
# ohlc4
序列数据,ohlc4是(开盘价 + 最高价 + 最低价 +收盘价)/4 的快捷运算
ohlc4
# volume
序列数据,当前k线的成交量
volume
# time
序列数据,当前k线的开盘时间
time
# 指标函数
# macd
说明:
macd(指数平滑异同移动平均线),利用长周期EMA和短周期EMA之间的差异状况,来判断中长期趋势的技术指标
macd(source, N1,N2,M,maType1, maType2)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
N1 | 数值 | 短周期 |
N2 | 数值 | 长周期 |
M | 数值 | DEA周期 |
maType1 | 字符串 | 均值的方式,支持MA/EMA/SMMA |
maType2 | 字符串 | 均值的方式,支持MA/EMA/SMMA |
返回值:
dif, dea, macd
例子:
[dif, dea, macd] = macd(close, 12, 26, 9, 'EMA', 'EMA');
// 内部实现的代码
N1 = 12;
N2 = 26;
M = 9;
// maType1 配置的均值方式作用于 dif 的计算
dif = ema(close, N1) - ema(close, N2);
// maType2 配置的均值方式作用于 dea 的计算
dea = ema(dif, M);
macd = (dif - dea) * 2;
2
3
4
5
6
7
8
9
10
11
# ma
说明:
ma(移动平均线),返回简单移动平均值(即算术平均值)
ma(source, length)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
length | 数值 | 周期 |
返回值:
返回序列数据series在周期length下的简单移动平均值
例子:
ma10 = ma(close,10);
func_ma(x,y) {
sum = 0.0
for (i = 0; i < y; i++){
sum := sum + x[i]/y
}
return sum
}
func_ma10 = func_ma(close, 10)
2
3
4
5
6
7
8
9
# ema
说明: ema(指数平滑移动平均线),返回系数alpha为2/N+1的指数移动平均值
ema(source, length)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
length | 数值 | 周期 |
返回值:
返回序列数据series在周期length下的指数平均值
例子:
ema10 = ema(close, 10);
# boll
说明:
boll(布林线指标),通过计算价格的标准差,再求价格的信赖区间,是路径型指标,该指标在图形上画出三条线,上下两条线可以分别看成价格的压力线和支撑线,中间为价格平均线。
boll(source, N, M)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
N | 数值 | 中轨线周期 |
M | 数值 | 标准差倍数 |
返回值:
boll、 ub、lb
例子:
[boll, ub, lb] = boll(close, 20, 2);
// 内部实现 N = 20;
M = 2;
boll = ma(close, N);
ub = boll + sd(close, N) * M;
lb = boll - sd(close, N) * M;
2
3
4
5
6
# kdj
说明:
kdj(随机指标),用于市场中短期趋势分析,在计算过程中主要研究高低价位与收盘价的关系,反映价格走势的强弱和超买超卖现象
kdj(source, length, mac1, mac2, maType)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
length | 数值 | 周期 |
mac1 | 数值 | K线均值周期 |
mac2 | 数值 | D线均值周期 |
maType | 字符串 | 均值的方式,支持MA/EMA/SMMA |
返回值:
k、d、j
例子:
[k, d, j] = kdj(close, 9, 3, 3, 'smma');
// 内部实现
length = 9;
mac1 = 3;
mac2 = 3;
h = highest(high, length);
l = lowest(low, length);
rsv = 100 * ((close - l) / (h - l));
// maType配置的均值方式作用于 k 和 d 的计算
k=smma(rsv, mac1, 1);
d=smma(k, mac2, 1);
j=3 * k - 2 * d;
2
3
4
5
6
7
8
9
10
11
12
# rsi
说明:
rsi(相对强度指数),根据指数加权移动平均线的向上和向下变化数组来计算相对强度指数。
rsi(source, length)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
length | 数值 | 周期 |
返回值:
返回数值,表示相对强弱指标
例子:
rsi14 = rsi(close, 14);
// 内部实现
length=14;
u = smma(max(close-close[1], 0), length);
d = smma(-min(close-close[1], 0), length);
rsi14 = d == 0 ? 100 : (u == 0 ? 0 : 100 * (u / (u + length)));
2
3
4
5
6
# td
说明:
td(狄马克序列),用于推算趋势衰竭的时机,识别市场趋势或盘整过程中的潜在转折点
td(source)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
返回值:
td
例子:
[td]=td(close);
# obv
说明:
obv(能量潮指标),将市场的成交量与价格的关系数字化、直观化以市场的成交量来衡量市场的推动力,从而研判价格的走势。
obv(length, maType)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
length | 数值 | 移动平均周期 |
maType | 字符串 | 均值的方式,支持MA/EMA/SMMA |
返回值:
obv、maobv
例子:
[obv, maobv]=obv(10, 'MA');
// 内部实现
change = close - close[1];
obv = cum((change > 0 ? 1 : change < 0 ? -1 : 0 ) * volume);
maobv = ma(obv, 10);
2
3
4
5
6
# stochrsi
说明:
stochrsi(随机相对强弱指数),结合了随机指标和相对强弱指标两种非常流行的技术分析指标。
stochrsi(source, rsilength, stochlength, fast, slow, maType)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
rsilength | 数值 | rsi的均值周期 |
stochlength | 数值 | stoch的均值周期 |
fast | 数值 | stochrsi的均值周期 |
slow | 数值 | mastochrsi的均值周期 |
maType | 字符串 | 均值的方式,支持MA/EMA/SMMA |
返回值:
stochrsi、mastochrsi
例子:
[stochrsi, mastochrsi] = stochrsi(close, 14, 14, 3, 3, 'MA');
// 内部实现
rsilength=14;
stochlength=14;
rsi14 = rsi(close, rsilength);
stoch = 100 * (rsi14 - lowest(rsi14, stochlength)) / (highest(rsi14, stochlength) - lowest(rsi14, stochlength));
stochrsi = ma(stoch, 3);
mastochrsi = ma(k, 3);
2
3
4
5
6
7
8
9
# cci
说明:
cci(商品路径指标),计算方法是商品的典型价格与其简单移动平均线之间的差值除以典型价格的平均绝对偏差。该指数按0.015的倒数进行缩放,以提供更多可读的数字。
cci(source, length, maType)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
length | 数值 | 周期 |
maType | 字符串 | 均值的方式,支持MA/EMA/SMMA |
返回值:
顺势指标关于周期回溯K线。
例子:
cci = cci(close,20,'MA');
// 内部实现
length=20;
// maType配置的均值方式作用于 matp 的计算
matp = ma(close, length);
md = dev(close, length);
cci=(close-matp) / (0.015 * md);
2
3
4
5
6
7
8
9
# skdj
说明:
skdj(慢速随机指标),skdj指标优化了kdj指标,通过差值平均过滤了短期的波动。
skdj(source, length, mac1, mac2, maType1, maType2)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
length | 数值 | 周期 |
mac1 | 数值 | k均值周期 |
mac2 | 数值 | d均值周期 |
maType1 | 字符串 | 均值的方式,支持MA/EMA/SMMA |
maType2 | 字符串 | 均值的方式,支持MA/EMA/SMMA |
返回值:
k、d
例子:
[k,d] = skdj(close, 9, 3, 3, 'EMA', 'EMA');
// 内部实现
length = 9;
mac1 = 3;
mac2 = 3;
h = highest(high, length);
l = lowest(low, length);
rsv =100*((close-l)/(h-l));
k = ema(rsv, mac2);
d = ema(k, mac2);
2
3
4
5
6
7
8
9
10
11
# bbi
说明:
bbi(多空指数),将不同周期移动平均线加权后的综合指标,一般选用3、6、12、24等4个参数
bbi(source, N1,N2, N3, N4, maType)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
N1 | 数值 | BBI周期1 |
N2 | 数值 | BBI周期2 |
N3 | 数值 | BBI周期3 |
N4 | 数值 | BBI周期4 |
maType1 | 字符串 | 均值的方式,支持MA/EMA/SMMA |
返回值:
bbi
例子:
bbi = bbi(close, 3, 6, 12, 24, 'MA');
// 内部实现
N1=3;
N2=6;
N3=12;
N4=24;
bbi = (ma(close, N1) + ma(close, N2) + ma(close, N3) + ma(close, N4)) / 4;
2
3
4
5
6
7
8
# supertrend
说明:
超级趋势指标。超级趋势指标是一个跟随趋势的指标
supertrend(factor, atrPeriod)
语法版本需要 // @version=2
2
3
参数说明:
名称 | 类型 | 说明 |
---|---|---|
factor | 数值 | atr的乘数 |
atrPeriod | 数值 | atr的计算周期 |
返回值:
supertrend, direction
例子:
[supertrend, direction] = supertrend(3,10)
// 内部实现
indicator(precision = 8)
src = hl2
factor = 3
atr = atr(close, 10, 1, "SMMA")
upperBand = src + factor * atr
lowerBand = src - factor * atr
prevLowerBand = nz(lowerBand[1])
prevUpperBand = nz(upperBand[1])
lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand
upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand
int direction = nan
float superTrend = nan
prevSuperTrend = superTrend[1]
if na(atr[1]) {
direction := 1
} else if (prevSuperTrend == prevUpperBand) {
direction := close > upperBand ? -1 : 1
} else {
direction := close < lowerBand ? 1 : -1
}
superTrend := direction == -1 ? lowerBand : upperBand
plot(direction < 0 ? superTrend : nan, title = 'Up direction')
plot(direction > 0 ? superTrend : nan, title = 'Down direction')
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 计算函数
# highest
说明:
用于计算序列数据在周期内的最高值。
highest(source, length)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
length | 数值 | 周期 |
返回值:
返回最高值的序列数据
例子:
// 最近十根k线收盘价的最高值
hhv=highest(close, 10);
2
# lowest
说明:
用于计算序列数据在周期内的最低值。
lowest(source, length)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
length | 数值 | 周期 |
返回值:
返回最低值的序列数据
例子:
// 最近十根k线收盘价的最低值
hhv=lowest(close, 10);
2
# max
说明:
用于获取多个值中的最大值
max(source, source1, source2...)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
返回值:
返回最大值的序列数据
例子:
// 返回多个数值中的最大值
max0 = max(open, close, high, hl2);
// 支持数值
max1 = max(close - open, 0);
2
3
4
5
# min
说明:
用于获取多个值中的最小值
min(source, source1, source2, source3...)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
返回值:
返回最小值的序列数据
例子:
// 返回多个数值中的最小值
min0 = min(open, close, high, hl2);
// 支持数值
min1 = min(close - open, 0);
2
3
4
5
# cum
说明:
用于计算序列数据的数值的总和
cum(source)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
返回值:
返回序列数据,返回传入参数的序列数据的所有数值的总和
例子:
// 计算成交量累计值
volumeCum = cum(volume);
2
# sum
说明:
用于计算序列数据的周期的总和
sum(source, length)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
length | 数值 | 周期 |
返回值:
返回序列数据,返回周期内的序列数据的总和
例子:
// 最近十根k线收盘价的总和值
summation = sum(close, 10);
2
# abs
说明:
用于计算数据的绝对值
abs(source)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
返回值:
返回序列数据,返回参数的绝对值
例子:
// 计算柱子的高度
barHeight = abs(close - open);
2
3
# sd
说明:
用于计算有偏估计标准偏差,即估算标准差
sd(source, length)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
length | 数值 | 周期 |
返回值:
返回序列数据,标准差
例子:
// 最近十根k线收盘价的标准差
sta = sd(close, 10);
2
# dev
说明:
用于计算指定周期序列数据与当前ma指标函数之间的平均偏差
dev(source, length)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
length | 数值 | 周期 |
返回值:
返回平均偏差的序列数据
例子:
// 最近十根k线收盘价与当前ma指标函数之间的平均偏差
dev0 = dev(close, 10);
2
# na
说明:
用于判断数值是否为非有效数字
na(source)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
返回值:
返回布尔序列数据,如果不是有效数字,则为true,否则为false
例子:
isna = na(close);
# nz
说明:
使用序列数据中的指定数(或零)替换掉NaN值
nz(source, source1)
nz(source)
2
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
返回值
两个参数时:如果是有效数字,则返回source,否则返回source1
一个参数时:如果是有效数字,则返回source,否则返回0
例子:
v = nz(close, open);
# cross
说明:
判断是否交叉(即上穿或者下穿)
cross(source, source1)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
返回值:
返回布尔序列数据,交叉则为返回true,否则为false
例子:
// 判断收盘价是否会和27000交叉
v = cross(close, 27000);
2
# crossup
说明:
判断序列数据是否上穿另一个序列数据
crossup(source, source1)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
返回值:
返回布尔序列数据,上穿则为返回true,否则为false
例子:
// 判断收盘价是否会上穿27000
v = crossup(close, 27000);
2
# crossdown
说明:
判断序列数据是否上穿另一个序列数据
crossdown(source, source1)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
返回值:
返回布尔序列数据,下穿则为返回true,否则为false
例子:
// 判断收盘价是否会下穿27000
v = crossdown(close, 27000);
2
# ref
说明:
引用周期前的序列数据和引用操作符[]等价,需要注意最多只能引用最近500个数据点
ref(source, length)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 序列数据 | 如close,更多取值见行情数据 |
length | 数值 | 周期 |
返回值:
返回序列数据
例子:
// v 等于第前十根的k线收盘价,等价于
v = close[10]; v = ref(close, 10);
2
# parse_time
说明:
转换时间字符串为时间戳,秒级
parse_time(source, format, timezone)
参数说明:
名称 | 类型 | 说明 |
---|---|---|
source | 字符串 | 需要转换的时间字符串,如"2019-01-01 00:00:00" |
format | 字符串 | 可选参数,默认为yyyy-MM-dd HH:mm:ss 需要符合该格式,如'yy-MM-dd mm:ss' |
timezone | 字符串 | 可选参数,默认为'UTC+8'填写格式为'UTC+n'或'UTC-n' |
返回值:
返回序列数据
例子:
a = parse_time('2019-01-01 00:00:00');
tz = "yy-MM-dd HH:mm:ss";
b = parse_time('19-01-01 00:00:00',tz);
c = parse_time('19-01-01 00:00:00',tz,'UTC+0');
2
3
4
# len
说明:
获取数组长度
len(ary)
语法版本需要 // @version=2
2
3
参数说明:
名称 | 类型 | 说明 |
---|---|---|
ary | 数组 | 仅支持数组或字典类型,其它类型返回0 |
返回值:
返回序列数据
例子:
int[] a = [1, 2, 3];
ary_len = len(a); // 3
2
# log
说明:
计算自然对数,任何number' >0的自然对数是唯一y,使得e^y='number'
log(number)
语法版本需要 // @version=2
2
3
参数说明:
名称 | 类型 | 说明 |
---|---|---|
number | 正数 | 任何大于0的数值 |
返回值:
'number'的自然对数
例子:
log(10) // 2.3
# log10
说明:
'number'的常用(或以10为底)对数是必须乘以10才能获得'number'的幂。10^y = 'number'
log10(number)
语法版本需要 // @version=2
2
3
参数说明:
名称 | 类型 | 说明 |
---|---|---|
number | 正数 | 任何大于0的数值 |
返回值:
'number'的以10为底的对数
例子:
log10(10) // 1
# sqrt
说明:
任何'number' >= 0的平方根是唯一 y>=0,使得y^2 ='number'
sqrt(number)
语法版本需要 // @version=2
2
3
参数说明:
名称 | 类型 | 说明 |
---|---|---|
number | 正数 | 任何大于0的数值 |
返回值:
'number'的平方根
例子:
sqrt(4) // 2
# 画图函数
# plot
说明:
将系列数据绘制在K线图表上(线图)
plot(series, title, color linewidth, lineDash, display)
参数说明:
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
series | 序列数据 | (必要参数) | 要绘制的数据系列 |
title | 字符串 | (必要参数) | 绘图标题 |
color | 字符串 | rgba(255,255,255,1) | 绘图的颜色,支持rgba,十六进制,以及常用颜色,rgb取值0-255,不透明度a取值0-1(1为完全不透明) |
linewidth | 数值 | 1 | 绘制线的宽度 |
lineDash | 数值数组 | [0] | 虚线;[1,2]1是虚线长度,2紧跟着的间隔 |
display | 布尔值 | true | 是否展示 |
返回值:
返回绘图
例子:
plot(dif, title='DIF', color='rgba(47,210,178,1)', lineWidth=1, lineDash=[0], display=true); plot(dif, title='DIF');
# fill
说明:
使用提供的颜色填充两个绘图之间的背景
fill(series1, series2, color, display)
参数说明:
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
series1 | 序列数据 | (必要参数) | 第一个数据序列 |
series2 | 序列数据 | (必要参数) | 第二个数据序列 |
color | 字符串 | rgba(255,255,255,1) | 绘图的颜色,支持rgba,十六进制,以及常用颜色 |
display | 布尔值 | true | 是否展示 |
返回值:
返回绘图
例子:
fill(ma3, ma7, color='red');
# plotColumn
说明:
将系列数据绘制在K线图表上(柱状图)
plotColumn(series, title, color, fill, display)
参数说明:
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
series | 序列数据 | (必要参数) | 要绘制的数据系列 |
title | 字符串 | (必要参数) | 绘图标题 |
color | 字符串 | rgba(255,255,255,1) | 绘图的颜色,支持rgba,十六进制,以及常用颜色,rgb取值0-255,不透明度a取值0-1(1为完全不透明) |
fill | 布尔值 | true | 颜色是否填充整个柱子 |
display | 布尔值 | true | 是否展示 |
返回值:
返回绘图
例子:
plotColumn(ma3, title='柱状图', color='blue', fill=true, display=true); plotColumn(dif, title='DIF');
# plotText
说明:
将文字绘制在K线图表上
plotText(cond, title, text, refSeries, bgColor, color, fontSize, placement, display)
语法版本需要 // @version=2
PC端需要 2.7.4 及以上
2
3
4
参数说明:
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
cond | 序列数据 | (必要参数) | 是否进行文字绘制的bool系列 |
title | 字符串 | (必要参数) | 绘图标题 |
text | 字符串 | (必要参数) | 绘图文字 |
refSeries | 序列数据 | (必要参数) | 绘制引用的序列数据 |
bgColor | 字符串 | rgba(255,255,255,1) | 文字背景的颜色,支持rgba,十六进制,以及常用颜色,rgb取值0-255,不透明度a取值0-1(1为完全不透明) |
color | 字符串 | rgba(255,255,255,1) | 文字的颜色,支持rgba,十六进制,以及常用颜色,rgb取值0-255,不透明度a取值0-1(1为完全不透明) |
fontSize | 数值 | 14 | 文字大小 |
placement | 字符串 | 'top' | 文字位置,支持类型:top(绘制在k线上方)bottom(绘制在k线下方) |
display | 布尔值 | true | 是否展示 |
返回值:
返回绘图
例子:
plotText(close < open, title = 'plotText',text = 'UP',refSeries = close,bgColor='blue',color='red',fontSize=14,placement='bottom',display=true);
# plotShape
待更新
# 预警函数
# alertcondition
说明:
创建预警条件,在创建预警对话框中可用。请注意,alertcondition不会创建预警,它只会在创建预警对话框中为您提供预警条件选项。此外,alertcondition效果在图表上是看不见的。
alertcondition(source, title,direction)
参数说明:
名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
source | 布尔值 | (必要参数) | 布尔类型的序列数据 |
title | 字符串 | (必要参数) | 警报条件的标题 |
direction | 字符串 | (非必要参数) | 警报条件的方向,取值为buy或sell.buy为看涨,sell为看跌(PC2.7.4及以上版本才有效) |
例子:
[dif, dea, macd] = macd(close, 12, 26, 9, ‘EMA’, ‘EMA’);
cross_down_zero = crossdown(dea, 0);
alertcondition(cross_down_zero, title='MACD(12,26,9)下穿零轴',direction = 'sell');
2
3
# 条件表达式
# ?:
说明:
二元运算(如果...那么..否则...),适用于判断选择
condition ? expr1 : expr2
例子:
// 如果是阳柱,赋值 1 否则赋值 -1
a = close > open ? 1 : -1 ;
2
# if
说明:
判断分支,(如果...否则...),适用于判断选择
if(condition){
expr1 ;
} else{
expr2 ;
}
2
3
4
5
例子:
// 如果是阳柱,赋值 1 否则赋值 -1
if(close > open) {
a=1;
}else{
a=-1;
}
2
3
4
5
6
# for
说明:
循环结构,限制循环数量为500次,若单次循环超过500则报错
- init:一般为赋值表达式,给控制变量赋初值;
- condition:关系表达式或逻辑表达式,循环控制条件;
- post:一般为赋值表达式,给控制变量增量或减量
for (init; condition; post) {
statement;
}
for (condition){
statement;
}
语法版本需要 // @version=2
2
3
4
5
6
7
8
例子:
b = nan; for(i=0;i<10;i++){ b := i; }
# range
说明:
用于遍历数组或dict类结构
for key, value = range dict
例子:
a = {"key1":10,'key2':20}
any b, c
for key,value = range a {
b := key
c := value
}
2
3
4
5
6
# 其他符号
# '
说明:
单引号,用来表示字符串
'string'
例子:
a = '警报提示内容';
# "
说明:
双引号,同单引号一样可用来表示字符串
“string”
例子:
a = "警报提示内容";
# //
说明:
注释,双斜杠右侧的内容不会被编译,用于代码说明
//
例子:
// ohlc4是 (开盘价 + 最高价 + 最低价 + 收盘价) / 4 的快捷运算 a = ohlc4;
# /* */
说明:
注释,符号中间的内容不会被编译,用于代码说明
/* */
语法版本需要 // @version=2
2
3
例子:
/* ohlc4是 (开盘价 + 最高价 + 最低价 + 收盘价) / 4 的快捷运算 */ a = ohlc4;
# 引用运算符
# []
说明:
历史数据引用,适用于序列数据,需要注意最多只能引用最近500个数据点
series[1]
例子:
// 假设当前是2020年3月12日,以下是附近的日线k线数据
// 2020年3月12日, close: 40
// 2020年3月11日, close: 30
// 2020年3月10日, close: 20
// 2020年3月9日, close: 10
close // 取值40
close[1] // 取值30
close[2] // 取值20
close[3] // 取值10
2
3
4
5
6
7
8
9
10
# {}
说明:
引用数组中的数据,下标从0开始,数组最大长度为1000
ary{0}
语法版本需要 // @version=2
2
3
例子:
ary = [1,2,3]
a = ary{0} // 1
a := ary{1} // 2
2
3
# 算术运算符
# +
说明:
加法,适用于数值表达式
expr1 + expr2
例子:
hlc = (high+open+close) / 3;
# -
说明:
减法或负号,适用于数值表达式
expr1 - expr2
-expr
例子:
h = close - open;
# *
说明:
乘法,适用于数值表达式
expr1 * expr2
例子:
// 将收盘价放大三倍
v = close * 3;
2
# /
说明:
除法,适用于数值表达式
expr1 / expr2
例子:
hlc = (high+open+close) / 3;
# %
说明:
余数,适用于数值表达式
expr1 % expr2
例子:
// v 的值是1
v = 10 % 3;
2
# ^
说明:
次方运算,适用于数值表达式,如2次方、3次方
expr1 ^ expr2
例子:
// v 的值是8
v = 2^3;
2
# ++
说明:
自增运算;适用于数值表达式,每次执行语句后加1
expr++
例子:
b = 2;
b++;
c = b; // c的值等于3
2
3
# --
说明:
自减运算;适用于数值表达式,每次执行语句后减1
expr--
例子:
b = 2;
b--;
c = b; // c的值等于1
2
3
# 关系运算符
# <
说明:
小于号,判断左侧数值是否小于右侧数值
expr1 < expr2
例子:
// 阴柱
c = close < open;
2
3
# >
说明:
大于号,判断左侧数值是否大于右侧数值
expr1 > expr2
例子:
// 阳柱
c = close > open;
2
# ==
说明:
全等于,判断左侧数值是否等于右侧数值
expr1 == expr2
例子:
// k线无实体 c = close == open;
# !=
说明:
不等于,判断左侧数值是否不等于右侧数值
expr1 != expr2
例子:
// k线有实体
c = close != open;
2
# >=
说明:
大于等于,判断左侧数值是否大于或等于右侧数值
expr1 >= expr2
例子:
// 阳柱或k线无实体
c = close >= open;
2
# <=
说明:
小于等于,判断左侧数值是否小于或等于右侧数值
expr1 <= expr2
例子:
// 阴柱或k线无实体
c = close <= open;
2
# 逻辑运算符
# &&
说明:
逻辑“与”判断;当&&左右均为true时,则返回结果则为true。否则为flase
expr1 && expr2
例子:
// K线两连阳
condition=close > open && close[1] > open[1];
2
# ||
说明:
逻辑“或”判断;当||左右至少有一个为true时,则返回结果为true,否则为flase
expr1 || expr2
例子:
// 最近两根k线最少有一根阳线
condition=close > open || close[1] > open[1];
2
# !
说明:
逻辑“非”判断;若数值为true,运算后则为false;若数值为false,运算后则为 true
! expr
例子:
// 当前k线不是阳线(阴线或者是横线),等价于 condition=close <= open
condition = !(close > open);
2
# not
说明:
和! 等价
not expr
例子:
// 当前k线不是阳线(阴线或者是横线),等价于 condition=close <= open
condition=not (close > open);
2
# and
说明:
与&&用法一致
expr1 and expr2
例子:
// K线两连阳
condition=close > open and close[1] > open[1];
2
# or
说明:
与||用法一致
expr1 or expr2
例子:
// 最近两根k线最少有一根阳线
condition=close > open or close[1] > open[1];
2
# 赋值运算符
# =
说明:
适用于数值表达式,将等号右侧的数值赋值给左侧
例子:
// 计算收盘价与开盘价的差价,将差价值保存到change中
change = close - open;
2
# :=
说明:
适用于数值表达式,对变量重新赋值
例子:
change = nan ;
// 计算收盘价与开盘价的差价,将差价值保存到change中
change := close - open ;
2
3
# +=
说明:
适用于数值表达式,将两个变量的值相加后,将得到的值保存在变量中
例子:
// 等价于 a=a+b
a += b;
2
# -=
说明:
适用于数值表达式,将两个变量的值相减后,将得到的值保存在变量中
例子:
// 等价于 a=a-b
a -= b;
2
# *=
说明:
适用于数值表达式,将两个变量的值相乘后,将得到的值保存在变量中
例子:
// 等价于 a=a*b
a *= b;
2
# /=
说明:
适用于数值表达式,将两个变量的值相除后,将得到的值保存在变量中
例子:
// 等价于 a=a/b
a /= b;
2
# %=
说明:
适用于数值表达式,将两个变量的值求余数后,将得到的值保存在变量中
例子:
// 等价于 a=a%b
a %= b;
2
# ^=
说明:
适用于数值表达式,将两个变量的值进行次方运算后,将得到的值保存到变量中
例子:
// 等价于 a=a^b
a ^= b;
2
3
# 函数定义
# func
说明:
自定义函数结构
例子:
ma10 = ma(close,10)
func_ma(x,y) {
sum = 0.0 ;
for (i = 0; i < y; i++){
sum := sum + x[i]/y ;
}
return sum ;
}
func_ma10 = func_ma(close, 10) ;
2
3
4
5
6
7
8
9
# 数据类型
# nan
说明:
表示“不可用”的关键字,表示变量没有赋值。
语法版本需要 // @version=2
例子:
int a = nan;
b = na(a); // true
2
# var
说明:
var是用于分配和一次性初始化变量的关键字。
语法版本需要 // @version=2
例子:
var int a = 4;
var b = nan;
var c; // c 无值,无法进行计算
2
3
# varip
说明:
varip是用于分配和一次性初始化变量的关键字,使用varip声明的变量和字段在同一根K线上的脚本执行之间保留其值,在实时k线上会进行更新
语法版本需要 // @version=2
例子:
varip int a = 4;
varip b = nan; // any 类型
varip c; // c 无值,无法进行计算
2
3
# int
说明:
整数类型
语法版本需要 // @version=2
例子:
int a = 4;
a = 4; // 判断为int类型
2
# float
说明:
浮点数类型
语法版本需要 // @version=2
例子:
float a = 4.0;
a = 4.0; // 判断为float类型
2
# string
说明:
字符串类型
语法版本需要 // @version=2
例子:
string a = '4';
# bool
说明:
布尔值类型,其布尔值有true和false两种
语法版本需要 // @version=2
例子:
bool a = true;
a = true;
bool b = false;
b = false;
2
3
4
# 多数据源函数
# security
说明:
从另外一个数据源中获取数据
security(symbol, period, expr)
语法版本需要 // @version=2
参数说明:
名称 | 类型 | 说明 |
---|---|---|
symbol | 字符串 | 请求的数据标识,使用syminfo.tickerid可获取当前窗口的标识 如何获取其他数据的symbol (opens new window) |
period | 字符串 | 请求的数据周期 支持的周期 (opens new window) |
expr | 表达式 | 需要计算和返回的表达式 不同数据支持的表达式 (opens new window) |
例子:
// 获取对应交易对的close数据
security('ethswapusdt:okcoinfutures', '5m', close) ;
// 获取对应交易对的ma数据
security('ethswapusdt:okcoinfutures', '5m', ma(close,10)) ;
// 获取当前主图的close数据
security(syminfo.tickerid,'1m',close) ;
// 获取OKX-BTC多空持仓人数比指数的close数据
security('i:lsprbtc:okex', '5m', close)
// 获取ethusdt永续的持仓量
security("interest:ethswapusdt:okcoinfutures", '5m', close)
// 获取ethusdt永续的资金费率
f = security('fundrate:ethswapusdt:okcoinfutures', '5m', fundingRate)
// 获取当前主图的当期资金费率
symbol = syminfo.tickerid
name = 'fundrate:' + symbol
security(name, '5m', fundingRate)
// 获取当前主图的下一期预测资金费率
security(name, '5m', estimatedRate)
// 获取eth的多空持仓数据
security('lspr:ethswapusdt:okcoinfutures', '5m', ratios)
// 获取精英持仓数据
security('elite:mkrswapusdt:binance', '5m', buyAccount)
// 获取合约持仓总量及交易量
security('oiav:ethswapusdt:okcoinfutures','5m',volume)
// 获取主动买入卖出数据
security('ttv:ethswapusdt:okcoinfutures','5m',buyVolume)
security('ttv:ethswapusdt:okcoinfutures','5m',sellVolume)
// 获取杠杆多空比数据
security('loanratio:ethswapusdt:okcoinfutures','5m',time)
security('loanratio:ethswapusdt:okcoinfutures','5m',ratios)
// 获取ethusdt永续的合约基差
security('basis:ethswapusdt:okcoinfutures', '5m', basis)
// 获取ethusdt永续的合约基差率
security('basis:ethswapusdt:okcoinfutures', '5m', basisRate)
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34