GainLab Script 是在GainLab图表中执行的指标脚本。
脚本基于JavaScript,支持变量、函数、表达式与回调等。
建议具备JS或其它编程语言常识(如:变量/数组/对象/方法/回调等),也可借助 AI 辅助快速编写与校对。
示例:
// @name = MA
// @position = main
len = I.int(10, title='周期')
style = S.line('#5b8ff9', 1, 'solid')
ma = F.ma(dataList, len, 'close')
D.line(ma, style)
以上内容就可以在图表中绘制出一条均线。
并可以在设置面板中修改周期,均线样式,从而实现动态调整均线。
脚本由元数据、参数定义、样式定义、计算、绘图、输出几部分组成。
脚本中以//@x的方式定义元数据。
脚本中提供了以下方法与数据用于编写脚本:
input 方法定义可设置参数。可简写为大写I,(input.int与I.int功能是相同的,后面不再赘述简写功能)
style 方法定义可设置绘图样式。可简写为大写S
draw 方法绘制内容。可简写为大写D
output 方法输出结果。可简写为大写O
formula 公式库,用于计算指标。可简写为大写F
util 工具库,用于辅助脚本编写。可简写为大写U
Math 方法,用于数学计算。
以上内容详细说明与使用方法,请在脚本参考手册中相应内容中查看。
dataList,K线数据数组,为当前图表中所有k线数据。数组内容为对象格式:
visibleList,当前窗口内的可见K线数据数组。数组内容为对象格式与dataList相同。
ChartInfo,脚本所在图表信息对象。内容:
setPrecision(),用于设置显示内容值与Y轴坐标的精度。值有3种形式:
setMax(),副图方法,用于设置Y轴坐标的最大值。如不设置,则根据数据自动计算。
setMin(),副图方法,用于设置Y轴坐标的最小值。如不设置,则根据数据自动计算。
SOURCE,常量,用于设置数据源的取值常见方式,内容为数组:
//@name=MA
//@title=MovingAverage 移动平均线
//@desc = ## MovingAverage 移动平均线
//作为衡量主力成本重要的参照指标,用以观察价格变动趋势和起到测试压力和支撑的作用。
//当作为趋势判断的时候,周期越长、越有效。
//另一方面,需要注意的是,当均线形成多头排列后,短期均线才是作为持仓的依据。
//@position=main
//@version=1
period = I.int(5, title="周期", min=1)
source = I.select('close', title="数据源", tip='用来计算的数据', options=SOURCE)
maStyle = S.line('#F00',1, 'solid', title="MA样式")
ma = F.ma(dataList, period, source)
D.line(ma,maStyle)
setPrecision('price')
O.tools('MA'+period,ma,maStyle)
以上是一个比较完整的MA脚本示例。
脚本中用到的函数和方法,可以在脚本参考手册对应内容中查看。
脚本语法与JavaScript基本相同
支持变量、数组、对象等数据类型
支持if、for、foreach、while等判断循环语句
支持函数定义与调用
支持表达式与回调
支持常量
支持注释
支持模块化
支持数组、字符串等原生操作方法
支持三元运算符
支持箭头函数
支持解构赋值
支持模板字符串
如果有JS或其它编程基础,可以参考JS语法,快速上手脚本编写。
//@name=BBI
//@title=BBI 多空指数
//@desc=BBI(Bull and Bear Index)多空指数
//是一种将不同周期移动平均线加权平均之后的综合指标,属于均线型指标,一般选用3、6、12、24等4个参数。
//它是针对普通移动平均线MA指标的一种改进,既有短期移动平均线的灵敏,又有明显的中期趋势特征。
//@position=main
//@version=1
// 输入参数
N1 = I.int(3, title="N1", tip="第一个周期参数")
N2 = I.int(6, title="N2", tip="第二个周期参数")
N3 = I.int(12, title="N3", tip="第三个周期参数")
N4 = I.int(24, title="N4", tip="第四个周期参数")
// 样式设置
bbiStyle = S.line('#9933FF', 1, 'solid', title="BBI样式")
// 计算BBI
// BBI = (MA(CLOSE, N1) + MA(CLOSE, N2) + MA(CLOSE, N3) + MA(CLOSE, N4)) / 4
// 计算四个周期的移动平均线
ma1 = F.ma(dataList, N1, 'close')
ma2 = F.ma(dataList, N2, 'close')
ma3 = F.ma(dataList, N3, 'close')
ma4 = F.ma(dataList, N4, 'close')
// 计算BBI = (MA1 + MA2 + MA3 + MA4) / 4
bbi = ma1.map((value, index) => {
if (value !== null && ma2[index] !== null && ma3[index] !== null && ma4[index] !== null) {
return (value + ma2[index] + ma3[index] + ma4[index]) / 4
}
return null
})
// 绘制BBI线
D.line(bbi, bbiStyle)
// 添加工具提示
O.tools('BBI', bbi, bbiStyle)
// 设置精度
setPrecision('price')
元数据以注释方法(//)开头,@前缀来定义脚本的各种信息。
元数据用于描述脚本的基本信息,如:名称、标题、描述、显示位置等。
// @name = MA
// @title = MovingAverage
// @desc = MA(MovingAverage)作为衡量主力成本重要的参照指标,是主力成本的平均值。
// 第二行描述
// ...第N行描述
// @position = main
// @version = 1
@name(必填) 为脚本名称,在图表工具栏、脚本列表等位置显示。
@title 为脚本标题,在图表设置面板、脚本列表等位置显示。如省略则使用@name的内容。
@desc 为脚本描述内容,用来说明脚本用途、用法等详细信息。在图表设置面板中显示。
@position 为脚本显示位置,用来确定此脚本在图表中的显示位置,只有两个选项,main(主图)/vice(副图),如不设置则默认vice。
@version 为脚本引擎版本号,用来确定脚本解析与运行的版本号,目前只有1。
input 是定义可设置参数的方法。
以input方法定义的参数,会显示在设置面板,供用户修改参数,并把最终值注入变量。
input方法可直接简写为大写I,两个方法是相同的
period1 = I.int(10, title='周期1', min=1, max=500)
period2 = input.int(20, title='周期2', min=1, max=500)
以上示例中,len变量会显示在设置面板,显示为周期设置。修改面板的值后,最新值会自动注入到len中。
input方法中设置的初始值为默认值,用户修改后再点击恢复默认,会恢复为此值
如果不想参数显示在面板中调整,用普通变量定义即可。如:
period = 14
将不会显示在设置面板
因为是直接关联到设置面板,所以设置时值不能为变量
I方法中必须先设置为变量。不可以直接在其它方法中使用
//以下先定义了period变量,再I方法中使用period变量是错误的
period = 16
maPeriod = I.int(period,title='MA周期')
//正确写法,在I方法中直接写值
maPeriod = I.int(16,title='MA周期')
//以下直接在其它方法中设置I方法是错误的
ma = F.ma(dataList, I.int(16,title='MA周期'),'close')
//正确写法,先定义为变量,再在绘图中使用
maPeriod = I.int(16,title='MA周期')
ma = F.ma(dataList, maPeriod,'close')
定义整数可设置变量。
val = I.int(default, title, min, max, tip)
整数。如:14
len = I.int(14, title='周期', min=1, max=500)
定义小数可设置变量。
val = I.float(default, title, min, max, tip)
小数。如:0.5
ratio = I.float(0.5, title='系数', min=0, max=5, )
定义布尔可设置变量。
val = I.bool(default, title, tip)
布尔值。如:true
smooth = I.bool(true, title='是否平滑计算')
定义下拉选择可设置变量。
val = I.select(default, options, title, tip)
SOURCE (常量,内置数据中有说明)['MA','SMA']字符串。如:'close'
src = I.select('close', options=SOURCE, title='数据源')
maType = I.select('MA', options=['MA','EMA','SMA','WMA'], title='均线计算方式')
说明:暂不支持对象数组选项。
style 是定义可设置样式的方法。
以style方法定义的参数,会显示在设置面板,供用户修改样式,并把最终值注入变量。
style方法可直接简写为大写S,两个方法是相同的
color1 = S.color('#5b8ff9', title='颜色1')
color2 = style.color('rgb(255,0,0)', title='颜色2')
以上示例中,变量会显示在设置面板,显示为颜色设置。修改面板的值后,最新值会自动注入到对应的变量中。
style方法中设置的初始值为默认值,用户修改后再点击恢复默认,会恢复为此值
如果不想样式显示在面板中调整,用普通变量定义即可。如:
color = '#5b8ff9'
将不会显示在设置面板
因为是直接关联到设置面板,所以设置时值不能为变量
S方法中必须先设置为变量。不可以直接在其它方法中使用
//以下先定义了color变量,再S方法中使用color变量是错误的
color = '#5b8ff9'
mainLine = S.line(color,1,'solid',title='主线')
//正确写法,在S方法中直接写值
mainLine = S.line('#5b8ff9',1,'solid',title='主线')
//以下直接在绘图方法中设置S方法是错误的
D.line(dataList, S.line('#5b8ff9',1,'solid',title='主线'))
//正确写法,先定义为变量,再在绘图中使用
mainLineStyle = S.line('#5b8ff9',1,'solid',title='主线')
D.line(F.attr(dataList,'close'), mainLineStyle)
color = S.color('#5b8ff9', title='颜色')
lineStyle = S.line('#5b8ff9', 1, 'solid',title='主线')
上面示例中,
"颜色":显示为一个颜色选择器
"主线:"显示为颜色选择器、线宽选择器、线型选择器组合。
定义颜色可设置变量。
在设置面板中表现为一个颜色选择器。
val = S.color(default, title, tip)
**支持 #RRGGBB、rgb()、rgba()等网页标准颜色。
color = S.color('#00F',title='颜色')
示例中返回值为:
color = '#00F';
定义线宽可设置变量。
在设置面板中表现为一个线宽选择器。
width = S.width(default, title, tip)
width = S.width(2,title='线宽')
示例中返回值为:
width = 2;
定义尺寸可设置变量。
在设置面板中表现为一个数字选择器。
size = S.size(default, title, tip)
size = S.size(20,title='尺寸')
示例中返回值为:
size = 20;
定义线型可设置变量。
在设置面板中表现为一个线型选择器。
style = S.style(default, title, tip)
style = S.style('solid',title='线型')
示例中返回值为:
style = 'solid';
定义填充/描边可设置变量。
在设置面板中表现为一个填充类型选择器。
full = S.full(default, title, tip)
full = S.full('fill',title='填充')
示例中返回值为:
full = 'fill';
定义图形可设置变量。
在设置面板中表现为一个图形选择器。
icon = S.icon(default, title, tip)
icon = S.icon('arrowDown',title='图形')
示例中返回值为:
icon = 'arrowDown';
定义线条样式可设置变量。
在设置面板中表现为:显示选择器,颜色选择器、线宽选择器、线型选择器。
style = S.line(color, size, style, show, title, tip)
线型样式对象。可直接用于绘图方法中
ln1 = S.line('#5b8ff9', 1, 'solid', title='线条1', tip='线条样式')
ln2 = S.line('rgb(255,255,255)',title='线条2')
示例中返回值为:
ln1 = {"color":"#5b8ff9","size":1,"style":"solid","show":true};
ln2 = {"color":"rgb(255,255,255)","size":1,"style":"solid","show":true};
定义柱状样式可设置变量。
在设置面板中表现为:显示选择器,颜色选择器、填充选择器、边框线宽选择器、边框线型选择器。
style = S.bar(color, full, size, style, show, title, tip)
柱状样式对象。可直接用于绘图方法中
buyStyle = S.bar('#2DC08E', 'stroke', title="多柱",tip="多柱显示样式")
sellStyle = S.bar('#F92855', 'fill', title="空柱",tip="空柱显示样式")
示例中返回值为:
buyStyle = {"color":"#2DC08E","size":1,"style":"solid","full":"stroke","show":true};
sellStyle = {"color":"#F92855","size":1,"style":"solid","full":"fill","show":true};
定义标签/文字样式可设置变量。
在设置面板中表现为:显示选择器,颜色选择器、字号选择器、对齐选择器、位置选择器、加粗选择器、斜体选择器。
可与style.labelbg()配合使用,设置标签背景
style = S.label(color, size, align,position, bold, italic, show, title, tip)
标签样式对象。可直接用于绘图方法中
avg = S.label('#fff', 14, 'right','bold', title='平均价')
price = S.label('#fff','bottom', title='成交量')
示例中返回值为:
avg = {color:"#fff",size:14,align:"right",bold:true,italic:false,position:"value",show:true};
price = {color:"#fff",size:12,align:"left",bold:false,italic:false,position:"bottom",show:true};
定义标签背景样式可设置变量。
在设置面板中表现为:显示选择器,颜色选择器、填充选择器、边框线宽选择器、边框线型选择器。
style = S.labelbg(color, full, size, style, show, title, tip)
标签背景样式对象。可与标签样式直接用于绘制标签方法中
bg = S.labelbg('rgba(0, 0, 0,0.6)','fill',title='标签背景')
示例中返回值为:
bg = {"color":"rgba(0, 0, 0,0.6)","full":"fill","size":1,"style":"solid","padding":4,"radius":0,"show":true};
* 关于padding、radius在设置中没有显示的属性,在绘图中介绍。
定义图形样式可设置变量。
在设置面板中表现为:显示选择器,颜色选择器、图形选择器、位置选择器、尺寸选择器、填充选择器。
style = S.shape(icon, color, size, position, full, show, title, tip)
注意:在脚本中还可以设置 x 和 y 偏移参数来微调图形位置。
图形样式对象。可直接用于绘制图形方法中
buySignal = S.shape('arrowUp','#00FF00',12,'fill','lowDown',title='买入信号')
sellSignal = S.shape('arrowDown','#FF0000',12,'fill','highUp',title='卖出信号')
示例中返回值为:
buySignal = {"icon":"arrowUp","color":"#00FF00","size":12,"full":"fill","position":"lowDown","show":true};
sellSignal = {"icon":"arrowDown","color":"#FF0000","size":12,"full":"fill","position":"highUp","show":true};
定义矩形样式可设置变量。
在设置面板中表现为:显示选择器,颜色选择器、填充选择器、边框线宽选择器、边框线型选择器。
style = S.rect(color, full, size, style, show, title, tip)
图形样式对象。可直接用于绘制图形方法中
bullishFVG = S.rect('rgba(0, 255, 0, 0.3)','fill',title='看涨FVG')
bearishFVG = S.rect('rgba(255, 0, 0, 0.3)',1,'fill','solid',title='看跌FVG')
示例中返回值为:
bullishFVG = {"color":"rgba(0, 255, 0, 0.3)","size":1,"style":"solid","full":"fill","show":true};
bearishFVG = {"color":"rgba(255, 0, 0, 0.3)","size":1,"style":"solid","full":"fill","show":true};
定义区域填充样式可设置变量。
在设置面板中表现为:显示选择器,颜色选择器。
style = S.area(color, show, title, tip)
区域填充样式对象。可直接用于绘制图形方法中
trendUpFill = S.area('rgba(0, 255, 0, 0.1)', title="上涨趋势填充")
trendDownFill = S.area('rgba(255, 0, 0, 0.1)', title="下跌趋势填充")
示例中返回值为:
trendUpFill = {"color":"rgba(0, 255, 0, 0.1)","show":true};
trendDownFill = {"color":"rgba(255, 0, 0, 0.1)","show":true};
定义蜡烛图样式可设置变量。
在设置面板中表现为:显示选择器,颜色选择器、填充选择器、线宽选择器。
style = S.candle(color, full, size, show, title, tip)
蜡烛图样式对象。可直接用于绘制图形方法中
upCandle = S.candle('#00FF41', 'stroke', 1, title="上升")
downCandle = S.candle('#FF3333', 'fill', 1, title="下降")
示例中返回值为:
upCandle = {"color":"#00FF41","size":1,"style":"solid","full":"stroke","show":true};
downCandle = {"color":"#FF3333","size":1,"style":"solid","full":"fill","show":true};
定义屏幕相对标签/文字样式可设置变量。
与style.label()基本一致,但没有 position属性,针对于draw.slabel()方法的样式对象。
可与style.labelbg()配合使用,设置标签背景
在设置面板中表现为:显示选择器,颜色选择器、字号选择器、对齐选择器、加粗选择器、斜体选择器。
style = S.slabel(color, size, align, bold, italic, show, title, tip)
标签样式对象。可直接用于绘图方法中
样式对象创建后,可在脚本中手动添加以下属性:
labelStyle = S.slabel('#fff', 14, 'left', title='标签样式')
labelStyle.text = '提示文本'
labelStyle.x = 10
labelStyle.y = -5
示例中返回值为:
labelStyle = {"color":"#fff","size":14,"align":"left","bold":false,"italic":false,"show":true};
定义屏幕相对多边形/区域样式可设置变量。
与style.area()基本一致,但添加 border等属性,针对于draw.sarea()方法的样式对象。
在设置面板中表现为:显示选择器、颜色选择器、边框颜色选择器、边框线宽选择器、边框线型选择器。
style = S.sarea(color, border, size, style, show, title, tip)
** sarea中的color为填充颜色,不设置为不显示填充,只显示边框
** sarea中的border设置格式为border = 颜色值,如不设置为不显示边框
标签样式对象。可直接用于绘图方法中
sarea1 = S.sarea('rgba(255,0,0,0.1)', 1, title='多边形1')
sarea2 = S.sarea('rgba(255,0,0,0.1)', border='#F00',1, title='多边形2')
sarea3 = S.sarea(border='#F00', 1, title='多边形3')
示例中返回值为:
sarea1 = {"color":"rgba(255,0,0,0.1)","border":null,"size":1,"style":"solid","show":true};
sarea2 = {"color":"rgba(255,0,0,0.1)","border":"#F00","size":1,"style":"solid","show":true};
sarea3 = {"color":null,"border":"#F00","size":1,"style":"solid","show":true};
定义屏幕相对矩形样式可设置变量。
与style.rect()基本一致,但添加 border等属性,针对于draw.srect()方法的样式对象。
在设置面板中表现为:显示选择器、颜色选择器、边框颜色选择器、边框线宽选择器、边框线型选择器。
style = S.srect(color, border, size, style, show, title, tip)
** srect中的color为填充颜色,不设置为不显示填充,只显示边框
** srect中的border设置格式为border = 颜色值,如不设置为不显示边框
标签样式对象。可直接用于绘图方法中
srect1 = S.srect('rgba(255,0,0,0.1)', 1, title='矩形1')
srect2 = S.srect('rgba(255,0,0,0.1)', border='#F00',1, title='矩形2')
srect3 = S.srect(border='#F00', 1, title='矩形3')
示例中返回值为:
srect1 = {"color":"rgba(255,0,0,0.1)","border":null,"size":1,"style":"solid","show":true};
srect2 = {"color":"rgba(255,0,0,0.1)","border":"#F00","size":1,"style":"solid","show":true};
srect3 = {"color":null,"border":"#F00","size":1,"style":"solid","show":true};
定义屏幕相对圆形样式可设置变量。
在设置面板中表现为:显示选择器、颜色选择器。
style = S.scircle(color, border, size, style, show, title, tip)
** scircle中的color为填充颜色,不设置为不显示填充,只显示边框
** scircle中的border设置格式为border = 颜色值,如不设置为不显示边框
标签样式对象。可直接用于绘图方法中
scircle1 = S.scircle('rgba(255,0,0,0.1)', 1, title='圆形1')
scircle2 = S.scircle('rgba(255,0,0,0.1)', border='#F00',1, title='圆形2')
scircle3 = S.scircle(border='#F00', 1, title='圆形3')
示例中返回值为:
scircle1 = {"color":"rgba(255,0,0,0.1)","border":null,"size":1,"style":"solid","show":true};
scircle2 = {"color":"rgba(255,0,0,0.1)","border":"#F00","size":1,"style":"solid","show":true};
scircle3 = {"color":null,"border":"#F00","size":1,"style":"solid","show":true};
定义屏幕相对图形样式可设置变量。
与style.shape()基本一致,但减少 position属性,针对于draw.sshape()方法的样式对象。
在设置面板中表现为:显示选择器,颜色选择器、图形选择器、尺寸选择器、填充选择器。
style = S.sshape(icon, color, size, full, show, title, tip)
图形样式对象。可直接用于绘制图形方法中
buySignal = S.sshape('arrowUp','#00FF00',12,'fill',title='支撑区')
sellSignal = S.sshape('arrowDown','#FF0000',12,'fill',title='压力区')
示例中返回值为:
buySignal = {"icon":"arrowUp","color":"#00FF00","size":12,"full":"fill","show":true};
sellSignal = {"icon":"arrowDown","color":"#FF0000","size":12,"full":"fill","show":true};
draw 绘制图形的方法。
draw方法可直接简写为大写D,两个方法是相同的
rsiPeriod = I.int(14, title="RSI周期", min=1)
maPperiod = I.int(10, title="MA周期", min=1)
buyLine = I.int(70, title="超买线")
sellLine = I.int(30, title="超卖线")
rsiStyle = S.line('#FF6D00',title='RSI')
maStyle = S.line('#F00',title='MA')
buyLineStyle = S.line('#888','dotted',title='超买线')
sellLineStyle = S.line('#888','dotted',title='超卖线')
zero = S.line('#888','dashed',title='中轴线')
full = S.area('rgba(129, 29, 160, 0.1)',title='填充')
rsiData = F.rsi(dataList, rsiPeriod)
maData = F.ma(rsiData, maPperiod)
D.line(rsiData,rsiStyle)
D.line(maData,maStyle)
D.hline(50, zero)
D.hline(buyLine, buyLineStyle)
D.hline(sellLine, sellLineStyle)
D.srect({x1:'left',y1:buyLine,x2:'right',y2:sellLine},full)
以上示例中:
图表坐标系的x与y轴均支持多种设置方法。
所有绘制方法都需要传递样式
k线坐标系绘制方法的样式分为样式对象与样式回调函数两种方式。
({ value, index, prev }),value为当前值,index为当前索引,prev为前一个值D.line(ma, ({ value, index, prev }) => {
return value >= prev ? style1 : style2
})
以上示例中,使用了样式回调函数,根据ma线的值与前一个值的大小关系,来判断绘制线的不同样式。
{color:['#FF0000', '#00FF00', '#0000FF']}在K线坐标系中绘制一条线。
D.line(array, style)
样式对象:{color, size, style, show, continuous}
默认若数据为非有效数据 null/undefined/NaN 时将跳过该点绘制(形成断点)。
即只有相邻的两个数据都有效时才会绘制。
period = I.int(5, title="周期", min=1)
source = I.select('close', title="数据源", tip='用来计算的数据', options=SOURCE)
emaStyle = S.line('#F00',1, 'solid', title="EMA样式")
ema = F.ema(dataList, period, source)
D.line(ema,emaStyle)
以上示例为普通ema线绘制,样式可直接使用style.line()方法返回的样式对象。
period = I.int(5, title="周期", min=1)
source = I.select('close', title="数据源", tip='用来计算的数据', options=SOURCE)
maStyle1 = S.line('#F00',2, 'solid', title="MA样式1")
maStyle2 = S.line('#0FF',1, 'solid', title="MA样式2")
ma = F.ma(dataList, period, source)
D.line(ma,({value,index}){
return value >= dataList[index].close ? maStyle1 : maStyle2
})
以上示例为如果ma的值大于等于对应k线数据的收盘价,则使用MA样式1,否则使用MA样式2。
如需绘制连续线,需设置continuous:true,此时会在前后两个有效值之间绘制。
如continuous:true时,样式回调时会添加prevValid(上一有效值),提供使用。
buyStyle = S.line('#00FF00', 2, 'solid', true, title="多头样式")
sellStyle = S.line('#FF0000', 2, 'solid', true, title="空头样式")
buyStyle.continuous = true
sellStyle.continuous = true
D.line(zigzagData, ({ value, prevValid }) => {
if (prevValid !== null) {
if (value > prevValid) {
return buyStyle
} else if (value < prevValid) {
return sellStyle
}
}
return buyStyle
})
在K线坐标系中绘制柱状图。
D.bar(array, baseline, style)
0,所有柱体都以此值为基线[0, 10, 20, ...],每个数据点使用对应的基线值'top':使用Y轴最大值作为基线'bottom':使用Y轴最小值作为基线'center':使用Y轴中间值作为基线样式对象:{color, full, size, style, show}
// 基础柱状图,基线为0
barStyle = S.bar('#5B8FF9', 'fill', 1, 'solid', title="柱状图样式")
D.bar(volume, 0, barStyle)
// 使用数组基线,每个柱体有不同的基线
baselineArray = [10, 20, 15, 25, 30]
D.bar(data, baselineArray, barStyle)
// 使用关键字基线
D.bar(data, 'center', barStyle) // 以Y轴中心为基线
D.bar(data, 'bottom', barStyle) // 以Y轴底部为基线
// 根据数据值动态调整柱状图颜色
D.bar(data, 0, ({value, index}) => {
return {
color: value > 0 ? '#00FF00' : '#FF0000',
full: 'fill',
size: Math.abs(value) / 10,
show: value !== 0
}
})
// 结合数组基线的回调样式
baselineArray = [0, 10, 20, 30]
D.bar(data, baselineArray, ({value, index}) => {
return {
color: value > baselineArray[index] ? '#00FF00' : '#FF0000',
full: 'stroke',
size: 2,
style: 'dashed'
}
})
柱状图会根据数据值与基线值的差异,从基线向上或向下延伸绘制。正值向上延伸,负值向下延伸。
在K线坐标系中填充两条数据曲线围成的区域。
D.area(dataArray1, dataArray2, style)
样式对象:{color, border, size, style, show}
回调函数中回传参数有{value,value2,index,prev,prev2}提供选择
// 基础区域填充
areaStyle = S.area('#5B8FF9', title="区域样式")
D.area(F.ma(dataList, 20), F.ma(dataList, 60), areaStyle)
// 使用回调样式与自定义样式对象
D.area(data1, data2, ({value,value2}) => {
return {
color: value > value2 ? 'rgba(0,255,0,0.2)' : 'rgba(255,0,0,0.2)'
}
})
若两边界在某些索引无效(null/undefined/NaN),该段不填充。
绘制蜡烛K线。
D.candle(klineArray, style?)
样式对象:{color, size, style, full, show}
upCandle = S.candle('#00FF41', 'fill', 1, title="上升")
downCandle = S.candle('#FF3333', 'fill', 1, title="下降")
D.candle(dataList, ({value})=>{
return value.close < value.open ? downCandle : upCandle
})
以上示例为根据收盘价与开盘价判断上升或下降,使用回调样式设置蜡烛颜色。
绘制K线相对矩形,内部会根据可见区间优化渲染。
D.rect(rectData, style)
{ start, end, startIndex, endIndex }样式对象:{color, full, size, style, show}
rectStyle = S.rect('#5B8FF9', 'fill', title="矩形样式")
rectData = dataList.map((kData,index)=>{
if(kData.close < kData.open) return null
return {
start: kData.open,
end : kData.close,
startIndex: index,
endIndex:index + 1
}
})
D.rect(rectData, rectStyle)
在K线坐标系中绘制图形标记(点状)。
D.shape(dataArray, style)
有效值,非null、undefined、NAN、''(空字符串)、{}(空对象)的元素样式对象:{color, icon, size, position, full, show, x, y}
position:100 表示距离顶部100pxposition:-100 表示距离底部100pxposition:'highUp' 表示最高价上方position:'lowDown' 表示最低价下方x:10 表示向右偏移10pxx:-10 表示向左偏移10pxy:10 表示向下偏移10pxy:-10 表示向上偏移10pxupStyle = S.shape('circle','#339933',6,title='多方')
downStyle = S.shape('circle','#FF0033',6,title='空方')
sar = F.sar(dataList,startAf,step,maxAf)
D.shape(sar,({value,index})=>{
return (value < (dataList[index].high + dataList[index].low) / 2) ? downStyle : upStyle
})
以上示例为根据SAR值判断上升或下降,使用回调样式设置图形颜色。
在K线坐标系中绘制文本标签。
D.label(dataArray, style, backgroundStyle?)
有效值,非null、undefined、NAN、''(空字符串)、{}(空对象)的元素标签样式对象:{color,size,align,bold,italic,text,position,x,y,show}
position:100 表示距离顶部100pxposition:-100 表示距离底部100pxposition:'highUp' 表示最高价上方position:'lowDown' 表示最低价下方x:10 表示向右偏移10pxx:-10 表示向左偏移10pxy:10 表示向下偏移10pxy:-10 表示向上偏移10px背景样式对象:{color,full,size,style,padding,radius,show}
padding:10 表示内边距为10pxradius:2 表示圆角为2pxlabelStyle1 = S.label('rgb(0, 255, 255)',12,'left','lowDown',title='看多')
labelStyle1.y = -10
labelStyle1.x = 5
labelStyle2 = S.label('rgb(255, 0, 0)',12,'left','highUp',title='看空')
labelStyle2.y = 10
labelStyle2.x = -5
labelBg = S.labelbg('rgba(0, 0, 0,0.6)','fill',title='标签背景')
labelBg.padding = 5
labelBg.radius = 2
textData = dataList.map(item=>{
if(item.close > item.open){
return {text:'涨'}
}else{
return {text:'跌'}
}
})
D.label(textData,({value})=>{
return value.text === '涨'?labelStyle1:labelStyle2
},labelBg)
labelStyle1 = S.label('rgb(0, 255, 255)',12,'left','lowDown',title='看多')
labelStyle1.y = -10
labelStyle1.x = 5
labelStyle1.text = '✔️'
labelStyle2 = S.label('rgb(255, 0, 0)',12,'left','highUp',title='看空')
labelStyle2.y = 10
labelStyle2.x = -5
labelStyle2.text = '❌'
D.label(dataList,({value})=>{
return value.open > value.close ?labelStyle1:labelStyle2
})
绘制屏幕坐标系水平线。
D.hline(y, style, x1, x2)
样式对象:{color, size, style, show}
// 基础水平线
lineStyle = S.line('#5B8FF9', 1, 'solid', title="水平线样式")
D.hline('center', lineStyle)
// 多条水平线
D.hline(['30%', '80%'], lineStyle)
// 指定起止位置
D.hline(100, lineStyle, 'index:-10', 'index:end')
// 使用Y轴对应值
D.hline(50, lineStyle, 'left', 'right')
绘制屏幕坐标系垂直线。
D.vline(x, style, y1, y2)
样式对象:{color, size, style, show}
// 基础垂直线
lineStyle = S.line('#F5222D', 1, 'solid', title="垂直线样式")
D.vline('center', lineStyle)
// 多条垂直线
D.vline(['index:-20', 'index:-10', 'index:-5'], lineStyle)
// 指定起止位置
D.vline('index:end', lineStyle, 0, '100px')
// 使用像素坐标
D.vline('30%', lineStyle, 'top', 'bottom')
绘制屏坐标系直线段。
根据任意两点(x1,y1)与(x2,y2)绘制直线
D.sline(data, style)
{x1, y1, x2, y2}[{x1, y1, x2, y2}, ...] 绘制多条线段样式对象:{color, size, style, show}
// 基础直线段
lineStyle = S.line('#5B8FF9', 1, 'solid', title="直线样式")
D.sline({x1: 'center', y1: 'center', x2: 'right', y2: 'center'}, lineStyle)
// 多条直线段
D.sline([
{x1: 100, y1: '100px', x2: 200, y2: '200px'},
{x1: 'index:-10', y1: '30%', x2: 'index:end', y2: '70%'}
], lineStyle)
绘制屏幕坐标系多边形。
D.sarea(data, style)
[{x:x1, y:y1}, {x:x2, y:y2},{x:x3, y:y3}, ...]:对象形式[[x1,y1],[x2,y2],[x3,y3],...]:数组形式[[{x:x1, y:y1}, {x:x2, y:y2}, ...], [{x:x1, y:y1}, {x:x2, y:y2}, ...]]:对象形式
[[[x1,y1],[x2,y2],...], [[x1,y1],[x2,y2],...]]:数组形式样式对象:{color, border, size, style, show}
//带边框的多边形
areaStyle1 = S.sarea('#5B8FF9',border='#F00',1,'solid', title="多边形样式1")
//不带边框的多边形
areaStyle2 = S.sarea('#5B8FF9', title="多边形样式2")
//不带填充
areaStyle3 = S.sarea(border='#F00', title="多边形样式3")
D.sarea([
{x: 100, y: '100px'},
{x: 300, y: '100px'},
{x: 300, y: '500px'}
], areaStyle2)
D.sarea([
{x: 200, y: '200px'},
{x: 300, y: '300px'},
{x: 300, y: '200px'}
], areaStyle3)
// 多个多边形
D.sarea([
[{x: 'left', y: 'top'}, {x: 'center', y: 'center'}, {x: 'right', y: 'top'}],
[{x: 'index:-10', y: '100px'}, {x: 'index:end', y: 200}, {x: 'index:end', y: '-100px'}]
], areaStyle1)
绘制屏幕坐标系矩形。
D.srect(data, style)
{x1, y1, x2, y2}[{x1, y1, x2, y2}, ...]样式对象:{color, border, size, style, show}
// 基础矩形
rectStyle = S.srect('#5B8FF9', border='#5B8FF9', 1, 'solid', title="矩形样式")
D.srect({x1: 100, y1: '100px', x2: 200, y2: '200px'}, rectStyle)
// 多个矩形
D.srect([
{x1: 'left', y1: 'top', x2: 100, y2: '100px'},
{x1: 'index:-10', y1: '100px', x2: 'index:end', y2: '200px'}
], rectStyle)
绘制屏幕坐标系圆形。
D.scircle(data, style)
{x1, y1, x2, y2}(两点确定直径)[{x1, y1, x2, y2}, ...]样式对象:{color, border, size, style, show}
// 基础圆形
circleStyle = S.scircle('rgba(255,0,0,0.1)', border='#F5222D', 1, 'solid', title="圆形样式")
D.scircle({x1: 200, y1: '150px', x2: 300, y2: '200px'}, circleStyle)
// 多个圆形
D.scircle([
{x1: 50, y1: 'center', x2: 80, y2: '60%'},
{x1: 'index:-10', y1: '100px', x2: 'index:end', y2: '120px'}
], circleStyle)
绘制屏幕坐标系图形标记。
D.sshape({x,y}, shapeStyle)
{x, y}[{x, y}, ...]样式对象:{color, icon, size, full, show, x, y}
x:10 表示向右偏移10pxx:-10 表示向左偏移10pxy:10 表示向下偏移10pxy:-10 表示向上偏移10pxshape = S.sshape('star','#52c41a', 12,title='图形1')
// 单个图形
D.sshape({x:'right',y:'bottom'}, shape)
// 多个图形
D.sshape([{x:'index:-10',y:'center'},{x:'index:end',y:'top'}], shape)
绘制屏幕坐标系文本标签。
D.slabel({x,y,text?} | array, labelStyle, backgroundStyle?)
{x, y, text?}[{x, y, text?}, ...]样式对象:{color, size, align, bold, italic, show, text, x, y}
x:10 表示向右偏移10pxx:-10 表示向左偏移10pxy:10 表示向下偏移10pxy:-10 表示向上偏移10px样式对象:{color, full, size, style, padding, radius, show}
padding:10 表示内边距为10pxradius:2 表示圆角为2pxlabelStyle = S.slabel('#fff', 14, 'left', title='标签样式')
labelStyle.text = '提示文本'
backgroundStyle = S.labelbg('rgba(255, 0, 0, 0.6)', 'fill', title='标签背景')
backgroundStyle.padding = 8
backgroundStyle.radius = 2
D.slabel({x:'right',y:'top',text:'提示'}, labelStyle, backgroundStyle)
以上示例为在图表右上角显示"提示文本",因style和数据中都有text内容,style中text显示的优先级大于数据中的text,所以显示为"提示文本"。
副图指标在主图绘制图形的方法。
maindraw方法可直接简写为大写MD,两个方法是相同的。
与draw内支持的方法相同。
脚本为副图位置://@position: 'vice'
n = I.int(12, title="快线周期", tip="计算的快线周期", min=1)
k = I.int(26, title="慢线周期", tip="计算的慢线周期", min=1)
m = I.int(9, title="DEA周期", tip="计算的DEA周期", min=1)
// 定义可设置样式
difStyle = S.line('#FF9900', 1, 'solid', title="DIF样式")
deaStyle = S.line('#0066CC', 1, 'solid', title="DEA样式")
zeroStyle = S.line('#999', 1, 'solid', title="0轴样式")
buyMacdUp=S.bar('#2DC08E','stroke',title='多头增加')
buyMacdDown=S.bar('#2DC08E','fill',title='多头减少')
sellMacdUp=S.bar('#F92855','stroke',title='多头增加')
sellMacdDown=S.bar('#F92855','fill',title='多头减少')
buyStyle = S.shape('arrowup', 12, '#00ff00', 'lowDown',title='买入信号')
sellStyle = S.shape('arrowdown', 12, '#ff0000', 'highUp',title='卖出信号')
// 计算数据
macdResult = F.macd(dataList, n, k, m)
difData = F.attr(macdResult,'dif')
deaData = F.attr(macdResult,'dea')
macdData = F.attr(macdResult,'macd')
// 绘制0轴
D.hline(0, zeroStyle)
// 绘制MACD柱状图(动态颜色)
D.bar(macdData, 0, ({value, prev}) => {
if (value >= 0) {
// 多头
return prev < value ? buyMacdUp : buyMacdDown
} else {
// 空头
return prev < value ? sellMacdUp : sellMacdDown
}
})
// 绘制DIF线
D.line(difData, difStyle)
// 绘制DEA线
D.line(deaData, deaStyle)
// 主图绘制买入信号
buySignals = F.throughUp(difData, deaData)
MD.shape(buySignals,buyStyle)
// 主图绘制卖出信号
sellSignals = F.throughDown(difData, deaData)
MD.shape(sellSignals,sellStyle )
// 设置精度
setPrecision(4)
// 输出工具栏提示数据
O.tools('DIF',difData,difStyle)
O.tools('DEA',deaData,deaStyle)
O.tools('MACD',macdData,{color: '#666666'})
以上示例为,MACD在副图显示,同时会在主图绘制信号图形。
output 输出的方法。
output方法可直接简写为大写O,两个方法是相同的
output方法可以将指定数据输出
输出到工具栏。
显示在脚本左上角名称与操作按钮后
O.tools(name, data, style)
样式对象:{color}
*注 output.tools()中没有样式回调方法
无返回。
style1 = S.line('#F00',1,title='ma1样式')
ma2Color = S.color('#00F',title='ma2颜色')
ma1 = F.ma(dataList, 20)
ma2 = F.ma(dataList, 50)
setPrecision('price')
O.tools('MA20', ma1, style1)
O.tools('MA50', ma2, {color:ma2Color})
// 显示字符串或数值
O.tools('POC', '123.45', pocTextStyle)
O.tools('Status', 'Active', statusStyle)
O.tools('Price', 100.50, priceStyle)
以上示例为在工具栏中依次显示MA20和MA50内容以及对应的值。
显示格式为:MA20:值 MA50:值 POC:123.45 Status:Active Price:100.50
可以自己设置样式对象也可直接用S方法设置的样式对象
输出到调试面板。
O.print(message)
无返回。
ma = F.ma(dataList, 20)
O.print('第一个ma的值:' + ma[0])
O.print('脚本已加载')
以上示例为在调试面板中依次显示第一个ma的值和脚本已加载。
输出到调试面板。
O.warn(message)
无返回。
O.warn('警告信息')
以上示例为在调试面板中显示警告信息。
输出到调试面板。
O.error(message)
无返回。
O.error('错误信息')
以上示例为在调试面板中显示错误信息。
输出到信号提醒。
O.signal(dataArray, callback?)
ma1 = F.ma(dataList, 5, 'close')
ma2 = F.ma(dataList, 20, 'close')
buys = F.throughUp(ma1, ma2)
sells = F.throughDown(ma1, ma2)
O.signal(buys, (value) => ({type: 'buy', name: 'ma5上穿ma20'}))
O.signal(sells, (value) => ({type: 'sell', name: 'ma5下破ma20'}))
无返回。
ma1 = F.ma(dataList, 5, 'close')
ma2 = F.ma(dataList, 20, 'close')
buys = F.throughUp(ma1, ma2)
sells = F.throughDown(ma1, ma2)
O.signal(buys, (value) => {
return {type: 'buy', name: 'ma5上穿ma20'}
})
O.signal(sells, (value) => {
return {type: 'sell', name: 'ma5下破ma20'}
})
GainLab Script 提供大量常用公式算法,可在脚本中直接使用。
formula方法可直接简写为大写F,两个方法是相同的
// 获取所有k线的收盘价数组
closeArr = formula.attr(dataList, 'close')
// 获取收盘价为基准的MA20的值
ma20 = F.ma(dataList, 20,'close')
// 获取k线的macd值
macd = F.macd(dataList, 12,26,9)
功能:获取对象数组属性值。
数组,无效值处返回 null或NaN。
// 获取所有k线的收盘价数组
closeArr = F.attr(dataList, 'close')
// 获取所有k线的涨跌幅%数组
percentageArr = F.attr(dataList, 'percentage')
// 获取所有k线的最高价和最低价的平均值
hl2Arr = F.attr(dataList, 'hl2')
// 获取k线的macd值
macdArr = F.attr(F.macd(dataList, 12,26,9),'macd')
简单移动平均线,计算指定周期内数值的算术平均值。
F.ma(list, period, attr)
返回数组,表示每个时间点的移动平均线值。不足周期处返回 null。
指数移动平均线,比简单移动平均线更敏感。它通过给予近期数据更大权重来减少滞后,同时保持对价格变化的敏感性。
F.ema(list, period, attr)
返回数组,表示每个时间点的EMA值。不足周期处返回 null。
加权移动平均线,权重线性递增,最近的数据具有最重的权重。
F.wma(list, period, attr)
返回数组,表示每个时间点的WMA值。不足周期处返回 null。
斐波那契加权移动平均线,基于斐波那契数列的权重。
F.fwma(list, period, attr)
返回数组,表示每个时间点的FWMA值。不足周期处返回 null。
简单移动平均线,计算指定周期内数值的算术平均值。
F.sma(list, period, attr)
返回数组,表示每个时间点的移动平均线值。不足周期处返回 null。
平滑因子rma。
F.rmaWithAlpha(list, period,alpha, attr)
数组,不足周期或无效值处返回NAN。
三角移动平均线(TRIMA)是一种加权移动平均线,其中权重形状为三角形,最大权重在周期中间。它通过双重简单移动平均线计算,提供平滑的价格曲线。
F.trima(list, period, attr)
返回数组,表示每个时间点的TRIMA值。不足周期处返回 null。
Kaufman's Adaptive Moving Average 考夫曼自适应移动平均线(KAMA)
由Perry Kaufman开发,是一种移动平均线,旨在考虑市场噪音或波动性。当价格波动相对较小且噪音较低时,KAMA将紧密跟随价格。当价格波动扩大时,KAMA将调整并与价格保持更大距离。这个趋势跟踪指标可用于识别整体趋势、时间转折点和过滤价格运动。
F.kama(list, period, fast, slow, drift, attr)
返回数组,表示每个时间点的KAMA值。不足周期处返回 null。
Tim Tillson's T3 Moving Average T3移动平均线(T3)
被认为比其他移动平均线更平滑和响应更快。它通过6层EMA(指数移动平均线)的加权组合来减少滞后性,同时保持平滑性。
F.t3(list, period, a, attr)
返回数组,表示每个时间点的T3值。不足周期处返回 null。
Double Exponential Moving Average 双重指数移动平均线(DEMA)
比普通EMA更平滑且滞后更少。它通过双重平滑来减少滞后,同时保持对价格变化的敏感性。
F.dema(list, period, attr)
返回数组,表示每个时间点的DEMA值。不足周期处返回 null。
Triple Exponential Moving Average 三重指数移动平均线(TEMA)
比普通EMA更平滑且滞后更少。它通过三重平滑来减少滞后,同时保持对价格变化的敏感性。
F.tema(list, period, attr)
返回数组,表示每个时间点的TEMA值。不足周期处返回 null。
Variable Index Dynamic Average 可变指数动态平均线(VIDYA)
由Tushar Chande开发,类似于指数移动平均线,但具有动态调整的回看周期,依赖于相对价格波动性,通过Chande动量振荡器(CMO)测量。当波动性高时,VIDYA对价格变化反应更快。
F.vidya(list, period, drift, attr)
返回数组,表示每个时间点的VIDYA值。不足周期处返回 null。
成交量加权平均价格(VWAP)通过成交量加权的平均价格来测量平均典型价格。它通常用于日内图表以识别总体方向。
F.vwap(list, anchor)
返回数组,表示每个时间点的VWAP值。不足周期处返回 null。
加权收盘价(WCP)通过high、low和2倍close的加权计算,提供更准确的价格表示。
F.wcp(list)
返回数组,表示每个时间点的WCP值。
成交量加权移动平均线(VWMA)通过成交量加权的移动平均线,结合价格和成交量信息提供更准确的移动平均线。
F.vwma(list, period)
返回数组,表示每个时间点的VWMA值。不足周期处返回 null。
零滞后移动平均线(ZLMA)尝试消除移动平均线的滞后。这是由John Ehler和Ric Way创建的改进版本。
F.zlma(list, length, mamode, attr)
返回数组,表示每个时间点的ZLMA值。不足周期处返回 null。
回撤指标衡量特定时期内的峰值到谷值的下降幅度。它通常以峰值与后续谷值之间的百分比表示。
F.drawdown(dataList)
返回对象,包含三个数组:
对数收益率指标,计算价格序列的对数收益率。对数收益率在金融分析中具有重要地位,因为它具有可加性,便于多期收益率的计算。
F.log_return(dataList, length, cumulative)
返回数组,表示每个时间点的对数收益率值。不足周期处返回 null。
百分比收益率指标,计算价格序列的百分比变化。百分比收益率是金融分析中最直观的收益率表示方法,直接显示价格变化的百分比。
F.percent_return(dataList, period, cumulative)
返回数组,表示每个时间点的百分比收益率值。不足周期处返回 null。
趋势收益率指标,计算基于趋势序列的收益率和累积收益率,包括趋势、交易、入场和出场信号。这是量化交易和回测分析中非常重要的指标。
F.trend_return(dataList, trend, log, asbool, trend_reset, trade_offset)
返回对象,包含以下属性:
信息熵指标衡量数据的不确定性和信息量,基于香农信息论。熵值越高,数据越不可预测,信息量越大。熵值越低,数据越可预测,信息量越小。
F.entropy(dataList, length, base)
返回数组,表示每个时间点的信息熵值。不足周期处返回 null。
峰度指标衡量数据分布的尖峭程度,基于统计学原理。峰度值越高,分布越尖峭;峰度值越低,分布越平坦。正态分布的峰度值为0。
F.kurtosis(dataList, length, min_periods)
返回数组,表示每个时间点的峰度值。不足周期处返回 null。
平均绝对偏差指标衡量数据相对于均值的平均绝对偏差,基于统计学原理。MAD值越高,数据的离散程度越大;MAD值越低,数据的集中程度越高。
F.mad(dataList, length, min_periods)
返回数组,表示每个时间点的MAD值。不足周期处返回 null。
中位数指标计算滚动中位数,是简单移动平均线的姊妹指标。中位数对异常值不敏感,提供更稳健的中心趋势测量。
F.median(dataList, length, min_periods)
返回数组,表示每个时间点的中位数。不足周期处返回 null。
分位数指标计算滚动分位数,用于分析数据的分布特征。分位数是统计学中重要的概念,可以用于理解数据的分布情况和识别异常值。
F.quantile(dataList, length, q, min_periods)
返回数组,表示每个时间点的分位数。不足周期处返回 null。
偏度指标计算滚动偏度,用于衡量数据分布的偏斜程度。偏度是统计学中重要的概念,可以用于理解数据分布的不对称性和识别分布特征。
F.skew(dataList, length, min_periods)
返回数组,表示每个时间点的偏度。不足周期处返回 null。
Hull Moving Average(HMA)赫尔移动平均线,试图减少或消除移动平均线中的滞后。它通过使用加权移动平均线的组合来创建更平滑、更快速的移动平均线。
F.hma(dataList, period, attr)
返回数组,表示每个时间点的HMA值。不足周期处返回 null。
最小二乘移动平均(线性回归预测)。
F.lsma(list, period, attr)
数组,不足周期或无效值处返回NAN。
Jurik 移动平均。
F.jma(list, period, phase=0, attr)
数组,不足周期或无效值处返回NAN。
McGinley Dynamic 动态平均。
F.mcginley(list, period, attr)
数组,不足周期或无效值处返回NAN。
Ehlers 动态平滑移动平均。
F.edsma(list, period, attr)
数组,不足周期或无效值处返回NAN。
成交量加权的平均(Volume Adjusted MA)。
F.vama(list, period, attr)
数组,不足周期或无效值处返回null。
标准差指标计算滚动标准差,用于衡量数据的离散程度。标准差是统计学中重要的概念,可以用于理解数据的波动性和识别异常值。
F.stdev(dataList, period, ddof,attr)
返回数组,表示每个时间点的标准差。不足周期处返回 null。
方差指标计算滚动方差,用于衡量数据的离散程度。方差是统计学中重要的概念,是标准差的基础,可以用于理解数据的波动性和识别异常值。
F.variance(dataList, period, ddof, min_periods)
返回数组,表示每个时间点的方差。不足周期处返回 null。
Z分数指标计算滚动Z分数,用于衡量数据点相对于均值的标准化距离。Z分数是统计学中重要的概念,可以用于识别异常值、评估相对位置和进行标准化分析。
F.zscore(dataList, period, std)
返回数组,表示每个时间点的Z分数。不足周期处返回 null。
平均方向指数(ADX)用于衡量趋势强度,包含ADX、+DI和-DI三个指标。ADX是衡量市场趋势强度的重要指标,可以用于判断市场是否处于趋势状态以及趋势的强度。
F.adx(dataList, period, scalar, mamode, drift)
包含三个数组对象
Archer移动平均趋势(AMAT)指标用于识别移动平均线的长期和短期趋势。该指标通过比较快速和慢速移动平均线的位置关系,提供趋势状态的量化分析。
F.amat(dataList, fast, slow, mamode, lookback)
包含两个数组对象
Aroon指标用于识别趋势的强度和方向,包含Aroon Up、Aroon Down和Aroon Oscillator三个组成部分。该指标通过测量价格距离最高点和最低点的周期数来评估趋势的强度。
F.aroon(dataList, period, scalar)
包含三个数组对象
Choppiness Index(震荡指数)用于判断市场是震荡(横向交易)还是趋势(单向交易)。该指标由澳大利亚商品交易员E.W. Dreiss创建,通过比较价格范围和真实波幅来评估市场的震荡程度。
F.chop(dataList, period, atr_length, scalar, drift)
返回数组,表示每个时间点的Choppiness Index值。不足周期处返回 null。
Chande Kroll Stop(CKSP)是一个趋势跟踪指标,通过计算平均真实波幅来识别止损点。该指标由Tushar Chande和Stanley Kroll在他们的著作《The New Technical Trader》中提出,用于识别趋势并设置动态止损。
F.cksp(dataList, p, x, q, tvmode)
包含两个数组对象
Decay(衰减)指标用于从先前的信号(如交叉)向前创建衰减。该指标支持线性和指数两种衰减模式,用于分析信号的持续性和衰减特性。
F.decay(dataList, period, mode)
返回数组,表示每个时间点的衰减值。不足周期处返回 null。
Decreasing(递减)指标用于判断价格序列是否在指定周期内递减。该指标支持严格递减和非严格递减两种模式,可以返回布尔值或整数值,用于趋势分析和信号识别。
F.decreasing(dataList, period, strict)
返回数组,表示每个时间点的递减状态。返回1/0,不足周期处返回 null。
Detrend Price Oscillator(DPO)是一个去趋势价格振荡器指标,用于去除价格趋势,使周期更容易识别。该指标通过计算价格与移动平均线的差值来识别价格的周期性波动。
F.dpo(dataList, period, centered)
返回数组,表示每个时间点的DPO值。不足周期处返回 null。
Increasing(递增)指标用于判断价格序列是否在指定周期内递增。该指标支持严格递增和非严格递增两种模式,可以返回布尔值或整数值,用于趋势分析和信号识别。与decreasing指标相对应,是递增趋势的识别工具。
F.increasing(dataList, period, strict)
返回数组,表示每个时间点的递增状态。返回1/0,不足周期处返回 null。
Long Run(长跑)指标基于快速和慢速移动平均线的趋势分析,识别潜在的底部和上升趋势。该指标通过组合快速移动平均线的递增状态和慢速移动平均线的递减/递增状态,生成买入信号和趋势确认。
F.long_run(fast, slow, period)
返回数组,表示每个时间点的长跑信号。返回1/0,不足周期处返回 null。
Parabolic Stop and Reverse(抛物线止损反转)指标是一个重要的趋势跟踪和止损工具。它通过抛物线轨迹来跟踪价格趋势,并在趋势反转时提供止损信号。
F.psar(dataList, af, maxAf)
返回对象,包含以下属性:
Q Stick指标由Tushar Chande开发,用于量化和识别K线图中的趋势。它基于开盘价和收盘价之差,并使用不同类型的移动平均线进行平滑,提供趋势方向和强度的量化分析。
F.qstick(dataList, period, ma)
返回数组,表示每个时间点的Q Stick值。不足周期处返回 null。
Short Run指标基于快速和慢速移动平均线的趋势分析,识别潜在的顶部和下降趋势。它与Long Run指标相对应,用于识别市场可能的顶部和下降趋势。
F.short_run(fast, slow, period)
返回数组,表示每个时间点的Short Run值。不足周期处返回 null。
TTM Trend指标来自John Carter的《Mastering the Trade》一书,用于绘制绿色或红色K线。它检查价格是否高于或低于前几个周期的平均价格。该指标应该帮助您保持在交易中,直到颜色改变。两个相反颜色的K线是进入或退出的信号。
F.ttm_trend(dataList, period)
返回数组,表示每个时间点的TTM Trend值。不足周期处返回 null。1表示绿色(上升),-1表示红色(下降)。
Vortex指标包含两个振荡器,用于捕获正向和负向趋势运动。VIP(Vortex Indicator Positive)捕获正向趋势运动,VIM(Vortex Indicator Minus)捕获负向趋势运动。
F.vortex(dataList, period, drift)
返回包含两个数组。
Aberration指标是一个类似于Keltner Channels的波动性指标,用于识别价格的异常波动和潜在的支撑阻力位。它基于典型价格(HLC3)的移动平均线和平均真实波幅(ATR)计算。
F.aberration(dataList, period, atrLength)
返回包含四个数组。
Acceleration Bands(加速带)指标由Price Headley创建,在简单移动平均线周围绘制上下包络带。它基于价格的高低范围与高低总和的比值来计算动态的支撑和阻力位。
F.accbands(dataList, period, c, drift, mamode)
返回包含三个数组。
返回长度为n的序列的斜率。可以将斜率转换为角度。
F.slope(dataList, period, as_angle, to_degrees)
返回数组,表示每个时间点的斜率值。不足周期处返回 null。
线性回归移动平均线(LINREG)。这是一个简化版的标准线性回归。LINREG是一个变量的滚动回归。标准线性回归是在两个或多个变量之间进行的。
F.linreg(dataList, period, angle, intercept, degrees, r, slope, tsf,attr)
返回数组,表示每个时间点的线性回归值。不足周期处返回 null。
Midpoint 中点指标,计算指定周期内最高价和最低价的中点。
F.midpoint(dataList, period, minPeriods, attr)
返回数组,表示每个时间点的中间点值。不足周期处返回 null。
计算指定周期内最高价和最低价的中点,专门用于处理high和low数据。这是一个专门为K线数据设计的中间价格指标。
F.midprice(dataList, period, minPeriods)
返回数组,表示每个时间点的中间价格值。不足周期处返回 null。
帕斯卡加权移动平均线(PWMA)类似于对称三角窗口,但PWMA的权重基于帕斯卡三角形。这是一个数学上优雅的加权移动平均线。
F.pwma(dataList, period, asc, attr)
返回数组,表示每个时间点的帕斯卡加权移动平均线值。不足周期处返回 null。
正弦加权移动平均线(SINWMA)使用正弦周期作为权重。平均线的中间项具有最高权重,这是由Everget在TradingView上开发的指标。
F.sinwma(dataList, period, attr)
返回数组,表示每个时间点的正弦加权移动平均线值。不足周期处返回 null。
Supertrend是一个重叠指标,用于帮助识别趋势方向、设置止损、识别支撑阻力以及生成买卖信号。它基于ATR(平均真实波幅)和价格中位数计算。
F.supertrend(dataList, period, multiplier)
返回一个对象,包含四个数组:
对称加权移动平均线(SWMA)是一种基于对称三角形权重的移动平均线。权重分布呈对称三角形,中心点权重最大,两端权重递减。例如:n=3时权重为[1, 2, 1],n=4时权重为[1, 2, 2, 1]。
F.swma(dataList, period, asc, attr)
返回数组,表示每个时间点的对称加权移动平均线值。不足周期处返回 null。
年化波动率(%)。
F.calcVolatility(list, period)
数组,不足周期或无效值处返回null。
计算数组的平均值。
F.avg(list, attr, precision)
数值,数组的平均值;不足周期或无效值处返回null。
计算周期内最高值。
F.hhv(list, period, attr)
数组,不足周期或无效值处返回 null。
计算周期内最低值。
F.llv(list, period, attr)
数组,不足周期或无效值处返回 null。
检测两条线的交叉。
F.cross(list1, list2 | number, attr)
数组,长度与 list1 相同;交叉时返回对象 {val1, val2, type('up'/'down')},否则返回 null。
ma = F.ma(dataList, 5, 'close')
// 获取ma5与收盘价的交叉
cross1 = F.cross(dataList, ma, 'close')
macdArr = F.attr(F.macd(dataList, 12,26,9),'macd')
// 获取macd与0值的交叉
cross2 = F.cross(macdArr, 0)
以上示例会返回与dataList长度相同的数组,如果有交叉会返回对象 {val1, val2, type('up'/'down')},否则返回 null。
检测数据上穿另一条数据。
F.throughUp(list1, list2, attr)
数组,长度与 list1 相同;上穿时返回对象 {val1, val2},否则返回 null。
ma1 = F.ma(dataList, 5, 'close')
ma2 = F.ma(dataList, 20, 'close')
// ma5上穿ma20的信号
through1 = F.throughUp(ma1, ma2)
rsi = F.rsi(dataList, 12)
// 获取rsi上穿20的信号
through2 = F.throughUp(rsi, 20)
以上示例会返回与dataList长度相同的数组,返回对象上穿时 {val1, val2},否则返回 null。
检测下破信号。
F.throughDown(list1, list2, attr)
数组,长度与 list1 相同;下穿时返回对象 {val1, val2},否则返回 null。
rsi = F.rsi(dataList, 12)
// 获取rsi下破80的信号
through = F.throughDown(rsi, 80)
以上示例会返回与dataList长度相同的数组,返回对象下破时 {val1, val2},否则返回 null。
KDJ指标实际上是慢速随机指标的派生形式,唯一的区别是增加了一条J线。J线表示%D值与%K值的背离,J值可以超出[0, 100]范围。
F.kdj(dataList, period, signal)
对象,包含三个数组:k、d、j
布林带是一个流行的波动性指标,基于移动平均线和标准差计算。按照 pandas_ta 标准实现。
F.boll(dataList, period, std, attr)
对象数组,对象包含三个属性:{lb,mid,ub}
MACD指标是一种趋势跟踪指标,用于识别价格趋势的变化。基于快速和慢速指数移动平均线的差值计算。
F.macd(dataList, fast, slow, signal)
对象,包含三个数组:macd、histogram、signal
真实波幅 TR。
F.tr(list)
数组,不足周期或无效值处返回 null。
平均真实波动幅度(ATR)用于衡量波动性,特别是由缺口或限制性移动引起的波动性。按照 pandas_ta 标准实现。
F.atr(dataList, period, mamode, drift, attr)
数组,表示每个时间点的ATR值。不足周期或无效值处返回 null。
使用 RMA 平滑的 ATR。
F.atrWithRMA(list, period)
数组,不足周期或无效值处返回 null。
使用 RMA 平滑的 ATR。
F.atrWithRMA(list, period)
数组,不足周期或无效值处返回 null。
平均方向性指数 ADX(基于 RMA)。
F.adxWithRMA(list, period)
数组,不足周期或无效值处返回 null。
相对强弱指数是一个流行的动量振荡器,用于测量价格运动的速度和幅度。按照 pandas_ta 标准实现,使用 RMA (Wilder's Smoothing) 计算。
F.rsi(dataList, period, scalar, drift, attr)
数组,表示每个时间点的RSI值。不足周期或无效值处返回 null。
顺势指标(Commodity Channel Index)。
F.cci(list, period)
数组,不足周期或无效值处返回 null。
动量指标用于衡量价格变化的速度和强度,通过计算当前价格与指定周期前价格的差值来反映价格动量。
F.mom(dataList, period, attr)
返回数组,表示每个时间点的动量值。不足周期或无效值处返回 null。
Pretty Good Oscillator是一个由Mark Johnson创建的指标,用于衡量当前收盘价与其N日简单移动平均线的距离,以类似期间的平均真实波幅表示。Johnson的方法是将其用作长期交易的突破系统。
F.pgo(dataList, period, attr)
数组,表示每个时间点的PGO值。不足周期或无效值处返回 null。
百分比价格振荡器与MACD类似,用于衡量动量。它计算快速和慢速简单移动平均线之间的百分比差值,提供标准化的动量指标。
F.ppo(dataList, fast, slow, signal, scalar)
返回对象,包含三个数组
心理线是一个振荡器类型的指标,比较上升期间的数量与总期间数量的比例。换句话说,它是在给定期间内收盘价高于前一根K线的K线百分比。
F.psl(dataList, period, scalar, drift)
数组,表示每个时间点的PSL值。不足周期或无效值处返回 null。
百分比成交量振荡器是一个基于成交量的动量振荡器指标,通过比较快速和慢速成交量移动平均线的差异来衡量成交量的动量变化。
F.pvo(dataList, fast, slow, signal, scalar)
返回对象,包含三个数组
定量定性估计(QQE)是一个类似SuperTrend的指标,使用平滑的RSI和上下轨道。轨道宽度是平滑RSI的单周期真实波幅的组合,使用Wilder平滑长度进行双重平滑,并乘以默认因子4.236。
F.qqe(dataList, period, smooth, factor, mamode, drift)
返回对象,包含四个数组
相对强度增强版(RSX)基于流行的RSI指标,受Jurik Research启发。这个增强版的RSI减少了噪音,提供了更清晰、延迟更小的动量和价格运动速度洞察。
F.rsx(dataList, period, drift)
数组,表示每个时间点的RSX值。不足周期或无效值处返回 null。
相对活力指数试图测量趋势相对于其收盘价到交易范围的强度。它基于这样的信念:在上升趋势中,价格倾向于收盘价高于开盘价;在下降趋势中,价格倾向于收盘价低于开盘价。
F.rvgi(dataList, period, swma_length)
返回对象,包含两个数组
SMI遍历指标与William Blau开发的真实强度指数(TSI)相同,但SMI包含一条信号线。SMI使用两个时间框架内价格减去前一个价格的双重移动平均线。信号线是SMI的EMA,用于帮助触发交易信号。当穿越零轴上方时趋势看涨,穿越零轴下方时趋势看跌。
F.smi(dataList, fast, slow, signal, scalar)
返回对象,包含三个数组:
挤压动量指标基于John Carter的"TTM Squeeze"指标,试图捕捉布林带和Keltner通道之间的关系。当波动性增加时,带之间的距离也会增加;当波动性下降时,距离也会减少。它找到布林带研究落在Keltner通道内的部分。
F.squeeze(dataList, bb_length, bb_std, kc_length, kc_scalar, mom_length, mom_smooth, mamode)
返回对象,包含四个数组:
随机RSI振荡器由Tushar Chande和Stanley Kroll创建,发表在Stock & Commodities V.11:5 (189-199)。它是一个范围限制的振荡器,两条线在0到100之间移动。第一条线(%K)显示当前RSI相对于周期高低范围的关系。第二条线(%D)是%K线的简单移动平均线。
F.stochrsi(dataList, period, rsi_length, k, d)
返回对象,包含两个数组:
Tom DeMark的Sequential指标试图识别一个价格点,在这个点上,上升趋势或下降趋势会耗尽自身并反转。它通过比较当前收盘价与4天前的价格,最多13天,来识别连续的上升或下降价格序列。
F.td_seq(dataList, asint, show_all)
返回对象,包含两个数组:
真实强度指数是一个动量指标,用于识别趋势方向内的短期波动,以及确定超买和超卖条件。它通过双重指数移动平均线来平滑价格变化,提供更清晰的动量信号。
F.tsi(dataList, fast, slow, scalar, drift)
数组,表示每个时间点的TSI值。不足周期或无效值处返回 null。
终极振荡器是一个基于三个不同周期的动量指标。它试图纠正虚假背离交易信号,通过加权平均的方式提供更准确的动量分析。
F.uo(dataList, fast, medium, slow, fast_w, medium_w, slow_w, drift, offset)
数组,表示每个时间点的UO值。不足周期或无效值处返回 null。
威廉指标是一个动量振荡器,类似于RSI,用于识别超买和超卖条件。它基于价格在指定周期内的最高价和最低价之间的位置来计算。
F.willr(dataList, period)
数组,表示每个时间点的WILLR值。不足周期或无效值处返回 null。
ALMA移动平均线使用正态(高斯)分布曲线,可以通过偏移参数调节平滑度和灵敏度。这种移动平均线在减少数据滞后的同时保持平滑性,减少噪音。
F.alma(dataList, period, sigma, distribution_offset)
数组,表示每个时间点的ALMA值。不足周期或无效值处返回 null。
变动率指标是一个纯动量振荡器,测量当前价格与n个周期前价格的百分比变化。按照 pandas_ta 标准实现。
F.roc(dataList, period)
数组,表示每个时间点的ROC值。不足周期或无效值处返回 null。
改进版基准线(一目均衡表变体)。
F.kijunV2(list, period, factor)
数组,不足周期或无效值处返回 null。
TRIX是一个动量振荡器,用于识别背离。它通过三重指数移动平均线来减少噪音,提供更清晰的趋势信号。
F.trix(dataList, period, signal, scalar, drift)
返回对象,包含两个数组:
BRAR指标包含两个子指标:AR(人气指标)和BR(意愿指标)。AR反映市场人气,BR反映市场意愿。
F.brar(dataList, period, scalar, drift)
返回对象数组,每个元素包含:
成交量变异率。
F.vr(list, period)
数组,不足周期或无效值处返回 null。
能量潮指标,累积指标,用于测量买卖压力。按照 pandas_ta 标准实现。
F.obv(dataList)
数组,包含OBV值。第一个值返回 0,其他值根据价格变化累积计算。
简易波动指标。
F.emv(list, period)
数组,不足周期或无效值处返回 null。
量价指标(短长周期上涨占比差)。
F.vo(list, short, long)
对象数组,对象结构:{ up, down, val }。不足周期或无效值处返回 null。
动向指数 DMI。
F.dmi(list, period, adxPeriod)
返回对象数组,长度与 list 相同。对象格式{pdi, mdi, adx, adxr};不足周期或无效值处返回 null。
平均线差(DMA)。
F.dma(list, fast, slow)
数组,不足周期或无效值处返回 null。
振动升降指标(Accumulation Swing Index)。
F.asi(list, period)
数组,不足周期或无效值处返回 null。
随机振荡器由George Lane在1950年代开发。他相信这个指标是衡量动量的好方法,因为动量的变化先于价格的变化。它是一个范围限制的振荡器,两条线在0到100之间移动。第一条线(%K)显示当前收盘价相对于周期高低范围的关系。第二条线(%D)是%K线的简单移动平均线。
F.stochastic(dataList, k, d, smooth_k)
返回对象,包含两个数组:
Donchian Channels 用于衡量波动性,类似于布林带和Keltner通道。按照 pandas_ta 标准实现。
F.donchianChannel(dataList, lower_length, upper_length, lower_min_periods, upper_min_periods)
返回对象,包含三个数组
基于HWMA的三参数移动平均线,使用Holt-Winters方法计算的通道指标。按照 pandas_ta 标准实现。
F.hwc(list, na, nb, nc, nd, scalar, attr)
返回对象,包含以下数组:
流行的波动性指标,类似于布林带和唐奇安通道。按照 pandas_ta 标准实现。
F.kc(dataList, period, scalar, mamode, useTr)
返回对象,包含三个数组:
质量指数是一个非方向性波动性指标,利用高低范围来识别基于范围扩张的趋势反转。按照 pandas_ta 标准实现。
F.massi(dataList, fast, slow)
返回数组,包含MASSI值。
标准化平均真实范围,尝试标准化平均真实范围。按照 pandas_ta 标准实现。
F.natr(dataList, period, mamode, scalar, drift, attr)
返回数组,包含NATR值。
衡量价格运动所覆盖的"距离"。按照 pandas_ta 标准实现。
F.pdist(dataList, drift)
返回数组,包含PDIST值。不足周期或无效值处返回 null。
相对波动性指数,基于价格方向的标准差累加,而不是像RSI那样基于价格方向累加价格变化。按照 pandas_ta 标准实现。
F.rvi(dataList, period, scalar, refined, thirds, mamode, drift)
返回数组,包含RVI值。不足周期或无效值处返回 null。
Elder的温度计指标,用于衡量价格波动性。按照 pandas_ta 标准实现。
F.thermo(dataList, period, long, short, mamode, drift)
返回对象,包含四个数组:
真实范围指标,扩展经典范围(最高价减去最低价)以包含可能的跳空情况。按照 pandas_ta 标准实现。
F.trueRange(dataList, drift)
返回数组,包含True Range值。不足周期或无效值处返回 null。
Peter Martin的溃疡指数,使用二次均值测量下行波动性,强调大幅回撤。按照 pandas_ta 标准实现。
F.ui(dataList, period, scalar, everget)
返回数组,包含UI值。不足周期或无效值处返回 null。
累积/分布指标,利用收盘价相对于高低范围的位置与成交量,然后进行累积。按照 pandas_ta 标准实现。
F.ad(dataList)
返回数组,包含累积的AD值。不足周期或无效值处返回 null。
累积/分布震荡指标,利用AD指标并像MACD或APO一样处理。按照 pandas_ta 标准实现。
F.adosc(dataList, fast, slow)
返回数组,包含ADOSC值。不足周期或无效值处返回 null。
Archer平衡成交量指标,结合OBV和移动平均线进行趋势分析。按照 pandas_ta 标准实现。
F.aobv(dataList, fast, slow, mamode, maxLookback, minLookback, runLength)
返回对象,包含以下数组:
Chaikin资金流量指标,测量特定时期内与累积/分布相结合的资金流量。按照 pandas_ta 标准实现。
F.cmf(dataList, period)
返回数组,包含CMF值。不足周期或无效值处返回 null。
Elder力量指数,使用价格和成交量测量价格运动背后的力量。按照 pandas_ta 标准实现。
F.efi(dataList, period, drift, mamode)
返回数组,包含EFI值。不足周期或无效值处返回 null。
移动便利性指标,基于成交量的震荡指标,测量价格和成交量在零线附近波动的关系。按照 pandas_ta 标准实现。
F.eom(dataList, period, divisor, drift)
返回数组,包含EOM值。不足周期或无效值处返回 null。
负成交量指数,累积指标,使用成交量变化来识别聪明资金活跃的地方。按照 pandas_ta 标准实现。
F.nvi(dataList, period, initial)
返回数组,包含NVI值。不足周期或无效值处返回 null。
正成交量指数,累积指标,使用成交量变化来识别聪明资金活跃的地方。按照 pandas_ta 标准实现。
F.pvi(dataList, period, initial)
返回数组,包含PVI值。不足周期或无效值处返回 null。
价格成交量指标,返回价格和成交量的乘积。按照 pandas_ta 标准实现。
F.pvol(dataList, signed)
返回数组,包含PVOL值。无效值处返回 null。
价格成交量排名指标,由Anthony J. Macek开发,用于识别买卖时机。按照 pandas_ta 标准实现。
F.pvr(dataList)
返回数组,包含PVR值。第一个值返回 null,其他值根据价格和成交量变化返回1-4的排名。
价格成交量趋势指标,利用价格变化率与成交量的累积值来确定资金流向。按照 pandas_ta 标准实现。
F.pvt(dataList, drift)
返回数组,包含PVT值。不足drift周期或无效值处返回 null。
成交量分布图,通过将价格分割成范围来计算成交量分布。按照 pandas_ta 标准实现。
F.vp(dataList, width, sortClose)
返回数组,每个元素包含价格范围和成交量信息:
资金流量指标,震荡指标,用于通过价格和成交量测量买卖压力。按照 pandas_ta 标准实现。
F.mfi(dataList, period, drift)
返回数组,包含MFI值。不足周期或无效值处返回 null。
资金流量(Money Flow)。
F.moneyFlow(list)
数组,无效值处返回 null。
斐波那契回调位序列。
F.fibonacciRetracement(high, low)
数组,对象结构:{ level, price, percentage }。
抛物线转向(Parabolic SAR)。
F.sar(list, acceleration, maximum, period)
数组,不足周期或无效值处返回 null。
获取数组中的最高值。
F.high(list, attr)
对象 {index, val},包含最高值的索引和数值。
获取数组中的最低值。
F.low(list, attr)
对象 {index, val},包含最高值的索引和数值。
乖离率指标测量价格与移动平均线之间的偏离程度。BIAS = (close / MA(close, length)) - 1
F.bias(dataList, period, mamode)
返回数组,乖离率值,表示价格相对于移动平均线的偏离程度。
识别Doji蜡烛图形态,当K线实体小于前N个K线高低范围平均值的指定百分比时,判定为Doji。
F.cdl_doji(dataList, period, factor, scalar)
返回数组,Doji位置为scalar值,非Doji位置为0。
识别Inside Bar形态,当前K线的高点低于前一个K线的高点,且低点高于前一个K线的低点。
F.cdl_inside(dataList)
返回数组,内容为[0,1,-1]
Heikin Ashi技术通过平均价格数据创建日本蜡烛图,过滤市场噪音。由Munehisa Homma在1700年代开发。
F.ha(dataList)
返回对象数组,每个元素包含:
Even Better SineWave指标测量市场周期并使用低通滤波器去除噪音。输出信号限制在-1到1之间,检测到的趋势最大长度受其length输入限制。
F.ebsw(dataList, period, bars)
返回数组,EBSW信号值,范围在-1到1之间。
Awesome Oscillator是一个用于测量证券动量的指标。AO通常用于确认趋势或预测可能的反转。
F.ao(dataList, fast, slow)
返回数组,AO振荡器值。
Absolute Price Oscillator是一个用于测量证券动量的指标。它是两个不同周期简单移动平均线的差值。注意:APO和MACD线是等价的。
F.apo(dataList, fast, slow)
返回数组,APO振荡器值。
Balance of Power指标衡量买方相对于卖方的市场强度。通过收盘价与开盘价的差值相对于最高价与最低价差值的比例来衡量。
F.bop(dataList, scalar)
返回数组,BOP值,范围通常在-1到1之间。
Chande Forcast Oscillator计算实际价格与时间序列预测(线性回归线的端点)之间的百分比差异。
F.cfo(dataList, period, scalar, drift)
返回数组,CFO振荡器值,表示价格与预测值的偏离程度。
Center of Gravity指标由John Ehlers开发,试图识别转折点,同时表现出零滞后和平滑特性。
F.cg(dataList, period)
返回数组,CG重心指标值,用于识别转折点。
Chande Momentum Oscillator试图捕捉资产的动量,超买水平为50,超卖水平为-50。计算方式与RSI类似,但使用不同的归一化方法。
F.cmo(dataList, period, scalar, drift)
返回数组,CMO动量振荡器值,范围通常在-100到100之间。
Coppock Curve(原名"Trendex Model")是一个动量指标,专为月度时间尺度设计。虽然专为月度使用设计,但也可以在日线周期上计算,将周期转换为294天和231天的变化率,以及210天的加权移动平均。
F.coppock(dataList, period, fast, slow)
返回数组,Coppock曲线值,用于识别长期趋势转折点。
Elder Ray Index包含Bull Power(多头力量)和Bear Power(空头力量),这是观察价格和了解市场背后力量的有用方法。Bull Power衡量市场中买家的能力,将价格推高到平均共识价值之上。Bear Power衡量卖家的能力,将价格拖低到平均共识价值之下。
F.eri(dataList, period)
返回对象,包含两个数组:
Fisher Transform通过将价格在用户指定的周期数内标准化,试图识别重要的价格反转。当两条线交叉时,建议反转信号。Fisher Transform将价格数据转换为正态分布,使得极值更容易识别。
F.fisher(dataList, period, signal)
返回对象,包含两个数组:
Gann高低激活器指标由Robert Krausz在1998年的Stocks & Commodities Magazine中创建。它是一个基于移动平均线的趋势指标,由两个不同的简单移动平均线组成。该指标跟踪两条曲线(高点和低点),收盘价决定绘制哪一条。
F.hilo(dataList, high_length, low_length, mamode)
返回对象,包含三个数组:
霍尔特-温特移动平均线(HWMA)是一个三参数移动平均线,使用Holt-Winter方法进行预测。三个参数应该被选择以获得预测效果。这个版本基于MetaTrader 5的出版物实现。
F.hwma(dataList, na, nb, nc, attr)
返回数组,表示每个时间点的HWMA值。
一目均衡表(Ichimoku Kinkō Hyō)是二战前开发的金融市场预测模型。它是一个复杂的趋势指标,包含多个组件,用于预测市场趋势和识别支撑阻力位。
F.ichimoku(dataList, tenkan, kijun, senkou)
返回对象,包含如下数组:
Inertia由Donald Dorsey开发,在1995年9月的文章中首次提出。它是通过最小二乘移动平均线平滑的相对活力指数。当值大于50时为正惯性,否则为负惯性。
F.inertia(dataList, period, rvi_length, scalar, refined, thirds, mamode, drift)
返回数组,惯性指标值,用于判断趋势的持续性。
Know Sure Thing是一个基于动量的振荡器,基于ROC(变化率)计算。它结合了四个不同周期的ROC移动平均,通过加权方式计算最终的KST值。
F.kst(dataList, roc1, roc2, roc3, roc4, sma1, sma2, sma3, sma4, signal, drift)
返回对象,包含两个数组:
百分位线性插值是一种计算方法,用于将一组数据中的每个值映射到一个百分位数上。它通过将数据排序并计算每个值在排序后的位置,然后使用线性插值法将这些位置映射到0-100的百分位数上。
F.percentileLinearInterpolation(dataList, period, percentage)
返回数组,表示每个时间点的百分位数插值值。
Know Sure Thing是一个基于动量的振荡器,基于ROC(变化率)计算。它结合了四个不同周期的ROC移动平均,通过加权方式计算最终的KST值。
F.calculatePercentile(dataList, percentage)
返回数组,表示每个时间点的百分位数插值值。
动态调用公式库函数方法。
按方法名字符串动态调用公式库函数,便于通过 I.select 让用户选择不同算法,再统一用一套调用逻辑。
F.call(methodName, ...args)
F.call 调用等同于被调用方法的返回类型。
// 用户在面板选择
maType = I.select('MA', options=['MA','EMA','WMA','RMA'], title='均线类型')
len = I.int(20, title='周期')
// 统一调用
avg = F.call(maType, dataList, len, 'close')
D.line(avg, S.line('#5b8ff9',1))
// 切换动量类
oscType = I.select('RSI', options=['RSI','CCI'], title='振荡指标')
osc = F.call(oscType, dataList, 14)
D.line(osc, S.line('#faad14',1))
GainLab Script 提供大量常用辅助函数,方便在脚本中使用。
util方法可直接简写为大写U,两个方法是相同的
格式化数字,可选千分位。
U.formatNumber(value, precision=2, useThousandSeparator=false)
字符串。
// "123,456.79
U.formatNumber(123456.789, 2, true)
// "12.3000"
U.formatNumber(12.3, 4)
格式化为百分比(value 为小数)。
U.formatPercent(value, precision=2)
字符串。
U.formatPercent(0.1267, 1) // "12.7%"
格式化价格到固定位数。
U.formatPrice(value, precision=2)
字符串。
U.formatPrice(1234.5, 2) // "1234.50"
处理科学计数法到普通数字。
U.toNumber(val)
数值。
U.toNumber('1e-8') // 0.00000001
U.toNumber('123.45') // 123.45
取模。
U.mod(a, b)
数值。
U.mod(7, 3) // 1
数组平均值。
U.average(array)
数值;空数组返回 0。
U.average([1,2,3]) // 2
数组求和。
U.sum(array)
数值。
U.sum([1,2,3]) // 6
数组去重(浅层)。
U.unique(array)
新数组。
U.unique([1,1,2,2,3]) // [1,2,3]
数值数组排序。
U.sort(array, ascending=true)
新数组。
U.sort([3,1,2]) // [1,2,3]
U.sort([3,1,2], false) // [3,2,1]
安全读取数组指定索引。
U.getValue(array, index, defaultValue=null)
任意类型。
U.getValue([10], 3, 0) // 0
是否为有限的有效数字。
U.isValidNumber(value)
布尔。
U.isValidNumber(1/0) // false
U.isValidNumber('123') // false
U.isValidNumber(123.456) // true
是否为 null/undefined/''。
U.isEmpty(value)
布尔。
U.isEmpty('') // true
U.isEmpty(null) // true
U.isEmpty('text') // false
返回 [min,max) 区间随机数。
U.random(min=0, max=1)
数值。
U.random(10, 20) // [10,20) 内随机小数
返回 [min,max] 随机整数。
U.randomInt(min, max)
整数。
U.randomInt(1, 6) // 1..6
将数值限制在区间内。
U.clamp(value, min, max)
数值。
U.clamp(120, 0, 100) // 100
线性插值。
U.lerp(start, end, t)
数值。
U.lerp(0, 10, 0.3) // 3
角度转弧度。
U.toRadians(degrees)
数值。
U.toRadians(180) // 3.1415926...
弧度转角度。
U.toDegrees(radians)
数值。
U.toDegrees(Math.PI) // 180
两点距离。
U.distance(x1, y1, x2, y2)
数值。
U.distance(0,0,3,4) // 5
功能:时间戳格式化(支持 YYYY/MM/DD/HH/mm/ss)。
字符串。
U.formatDate(1700000000000, 'YYYY-MM-DD HH:mm:ss')
功能:当前毫秒时间戳。
数值。
ts = U.now()
深拷贝(Date/Array/Object 处理)。
U.deepClone(obj)
新对象/数组。
copy = U.deepClone({a:1,b:[2,3]})
浅/深合并(递归对象字段)。
U.merge(target, source)
合并后的对象。
U.merge({a:1, b:{x:1}}, {b:{y:2}, c:3}) // {a:1, b:{x:1,y:2}, c:3}
颜色字符串转RGB对象。
U.colorToRgb(color)
RGB对象。{r, g, b}
U.colorToRgb('#ff0000') // {r:255, g:0, b:0}
颜色字符串转RGBA字符串。
传入颜色值和透明度,返回rgba(r,g,b,a)格式字符串。
U.colorToRgba(color, alpha=1)
字符串,rgba(r,g,b,a)格式;无效颜色返回null。
U.colorToRgba('#ff0000') // "rgba(255,0,0,1)"
U.colorToRgba('#ff0000', 0.5) // "rgba(255,0,0,0.5)"
U.colorToRgba('blue', 0.8) // "rgba(0,0,255,0.8)"
检查值是否为有效值,用于判断数据是否可用于计算。
U.isValid(value)
布尔。
以下情况返回false:
U.isValid(null) // false
U.isValid(undefined) // false
U.isValid(NaN) // false
U.isValid('') // false
U.isValid(' ') // false
U.isValid({}) // false
U.isValid(123) // true
U.isValid('text') // true
U.isValid({a:1}) // true