HQChart使用教程34-如何在麦语法中自定义函数

HQChart使用教程34-如何在麦语法中自定义函数

  • 麦语法变量
  • 增加系统自定义变量函数
    • Name
    • Download
    • Invoke
  • 例子 用户某一个股票持仓的市值数据
    • DownloadUserPosition入参(obj)说明
      • 数据截图
      • Name
      • Symbol
      • Args
      • KData
      • Period
      • Right
      • Success
    • GetUserMarketValue入参(obj)说明
      • 数据截图
      • Name
      • Args
      • Symbol
      • KData
      • Period
      • Right
      • 返回

麦语法变量

目前系统语法提供很多系统函数如MA, BETA …等。HQChart允许动态增加自定义函数,来满足你的业务需求

增加系统自定义变量函数

JSComplier.AddFunction(obj) 可以往HQChart增加一个自定义函数

JSComplier.AddFunction({ Name:'函数名',Download:函数所需数据下载函数, Invoke:函数调用 } );

Name

函数名, 大写,如果和系统提供的函数名冲突, 自定义函数无效

Download

函数需要数据下载函数, 在指标初始化的时候会调用, 支持异步取数据,如果不需要下载数据设置为null.

Invoke

自定义函数调用,及自定义函数功能实现。

例子 用户某一个股票持仓的市值数据

USERMARKETVALUE(close) = 用户买卖某一个股票市值, close 是每天的收盘价 ,
计算方法:每日的收盘价(close)*每天的持仓。
数据返回:持仓股票的市值

  1. 我们定义个用户股票持仓数据下载函数
 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)说明

数据截图

HQChart使用教程34-如何在麦语法中自定义函数_第1张图片

Name

函数名称

Symbol

股票代码

Args

函数参数列表 数组类型。 再数据下载中,参数如果是一个变量,数据是没有的只有一个变量名。

KData

K线数据

Period

周期

Right

复权

Success

通知HQChart数据下载完成函数

  1. 定义一个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)说明

数据截图

HQChart使用教程34-如何在麦语法中自定义函数_第2张图片

Name

函数名称

Args

函数参数列表, 数组类型。 这里Args[0] 就对应 参数变量 close

Symbol

股票代码

KData

K线数据

Period

周期

Right

复权

返回

int/double 型的数组

  1. 把自定义函数添加到HQChart里
 JSComplier.AddFunction({ Name:'USERMARKETVALUE',Download:DownloadUserPosition, Invoke:GetUserMarketValue } );
  1. 写一个指标测试下吧
    T2:USERMARKETVALUE(CLOSE);

  2. 效果图
    HQChart使用教程34-如何在麦语法中自定义函数_第3张图片

如果还有问题可以加交流QQ群: 950092318

HQChart代码地址
地址:github.com/jones2000/HQChart

你可能感兴趣的:(JavaScript,HQChart)