HQChart使用教程34-如何在麦语法中自定义函数
新版本看下面教程(ver > 9129)
HQChart使用教程30-K线图如何对接第3方数据26-指标脚本自定义函数
麦语法变量
目前系统语法提供很多系统函数如MA, BETA …等。HQChart允许动态增加自定义函数,来满足你的业务需求
增加系统自定义变量函数
JSComplier.AddFunction(obj) 可以往HQChart增加一个自定义函数
JSComplier.AddFunction({ Name:'函数名',Download:函数所需数据下载函数, Invoke:函数调用 } );
Name
函数名, 大写,如果和系统提供的函数名冲突, 自定义函数无效
Download
函数需要数据下载函数, 在指标初始化的时候会调用, 支持异步取数据,如果不需要下载数据设置为null.
Invoke
自定义函数调用,及自定义函数功能实现。
例子 用户某一个股票持仓的市值数据
USERMARKETVALUE(close) = 用户买卖某一个股票市值, close 是每天的收盘价 ,
计算方法:每日的收盘价(close)*每天的持仓。
数据返回:持仓股票的市值
- 我们定义个用户股票持仓数据下载函数
var USER_POSITION; //用户某个股票的持仓
function DownloadUserPosition(obj)
{
console.log('[DownloadUserPosition] obj ', obj);
//模拟异步读取用户信息
setTimeout(()=>
{
USER_POSITION=new Map([ //日期 Vol:持仓
[20190705, {Vol: 3000 }],
[20190714, {Vol: 4000 }],
[20190806, {Vol: 2000 }],
[20190826, {Vol: 3000 }],
[20190902, {Vol: 10000 }],
]);
obj.Success(); //通知HQChart数据已到达继续执行, 需要要调用,否则指标会一直等待
}, 500);
}
DownloadUserPosition入参(obj)说明
数据截图
Name
函数名称
Symbol
股票代码
Args
函数参数列表 数组类型。 再数据下载中,参数如果是一个变量,数据是没有的只有一个变量名。
KData
K线数据
Period
周期
Right
复权
Success
通知HQChart数据下载完成函数
- 定义一个USERMARKETVALUE函数实现
function GetUserMarketValue(obj)
{
console.log('[GetUserMarketValue] obj ', obj);
var result=[];
var preVol=0; //最近一次持仓信息
var aryClose=obj.Args[0]; //获取第1个参数 (收盘价)
for(var i in obj.KData.Data)
{
result[i]=0;
var item=obj.KData.Data[i];
if (USER_POSITION.has(item.Date))
{
preVol=USER_POSITION.get(item.Date).Vol;
result[i]=preVol*aryClose[i];
}
else //延用最近一次的持仓信息
{
result[i]=preVol*aryClose[i];
}
}
return result;
}
GetUserMarketValue入参(obj)说明
数据截图
Name
函数名称
Args
函数参数列表, 数组类型。 这里Args[0] 就对应 参数变量 close
Symbol
股票代码
KData
K线数据
Period
周期
Right
复权
返回
int/double 型的数组
- 把自定义函数添加到HQChart里
JSComplier.AddFunction({ Name:'USERMARKETVALUE',Download:DownloadUserPosition, Invoke:GetUserMarketValue } );
-
写一个指标测试下吧
T2:USERMARKETVALUE(CLOSE); -
效果图
如果还有问题可以加交流QQ群: 950092318
HQChart代码地址
地址:github.com/jones2000/HQChart