Loading ...

发明者量化My语言(Mylang)文档

Author: 小小梦, Created: 2018-11-30 13:29:33, Updated: 2019-07-04 11:46:21

[TOC]

My语言是对麦语言的兼容并增强的一种程序化交易语言

  • 基础说明

    • 合约

      商品期货合约、数字货币合约

      商品期货/数字货币合约

      this_week   OKEX期货当周合约
      next_week   OKEX期货次周合约
      quarter     OKEX期货季度合约
      
      XBTUSD      BITMEX永续合约
      
      rb888       螺纹钢主力合约
      MA000       甲醇指数合约
      rb1901      螺纹钢合约
      等等.. 以此类推。
      

      img

      设置合约时可以 rb1901/rb1905 行情数据为 rb1901,下单交易合约为rb1905

    • 变量

      变量是电脑内存中开辟的一块用来存数据的空间,简单说,就是用来保存数据的

      开辟第一个变量

      // 将 1 赋值给变量 a
      a:=1;
      

      在“麦语言”中,从”数据量”上简单区分:

      1. 单值数据:只有一个值,例如 0、1、’abc’
      2. 序列数据:一堆单值数据组成的数据序列, 例如 Close(收盘价),这里的 Close 包含了 n 个周期的收盘价 [ 10.1 , 10.2 , 10.3 , 10.4 , 10. 5…… ]

      从”变量类型”进行区分

      1. 字符串类型:必须使用 ‘’ 包裹,字符串类型不允许直接使用,需要配合函数输出到视图中
      INFO(CLSOE>OPEN,'OK!');
      
      1. 数值类型:包括整数、浮点数(小数)
      // 整数
      int:=2;
      
      // 小数
      float:=3.1;
      
      1. 布尔类型,使用1(代表真)或者0(代表假):1、0,真或者假,例如:A:=1>0; 这句代码执行后,A的值就是1
      // 当前周期收盘价大于-999,你会发现,每个周期的返回值都是 1,代表 true,因为收盘价几乎不可能为负数
      is_true:=Close>-999;
      
      1. 全局变量
      VARIABLE:VALUE1:10;     // 声明一个全局变量,赋值为10,只执行一次。
      

      回测时需注意:

      VARIABLE:NX:0;    // 初始一个全局变量 NX 为 0
      NX..NX+1;         // 每次累加1
      INFO(1,NX);       // 每次打印 NX 
      

      最初 INFO 语句打印的是 101, 可能有疑问 初始不是0 么 ? 原因是回测时初始的K线有100根,已经跑过了100根K线,累加了100次。 实盘根据初始获取多少K线而定。

      • 命名规则

        在多数的系统中,变量命名不允许使用系统“保留字”(内置变量名、函数名),例如众所周知的 Close、C 。此外,不允许纯数字,或者数字开头,最后,不允许很长,不同的系统,长度限制不同。 其实你大可不必纠结主流系统对于中文的解析的效率,相信“麦语言”,它对中文是非常友好的,撸码无数的老司机,推荐你使用如下两种命名规范:

        1. 中文命名
        // 优雅的输出
        五日均线:=MA(C,5);
        
        1. 英文+下划线
        // 输出
        move_avg_5:=MA(C,5);
        

        如果你偏爱英文,请尽可能让人可以理解你变量的含义,不要使用诸如:A1,AAA,BBB……这类的命名方式。相信我,过些时日,你再次复查你的指标代码时,由于记忆的缺失,你会非常痛苦。同样的,当你把代码导出给他人的时候,阅读者的心态一定是崩溃的。

        那么,从现在开始,尽情地拥抱“麦语言”吧!但愿它能成为你节分析、决策的强大工具

    • 数据类型

      数据类型是一个基础的概念,在编写中,当我们将一个明确的数据赋值给变量时,这个变量也就变成了数据自身的类型

        1. 数值类型:
        1、2、3、1.1234、2.23456 ……
        
        1. 字符串类型(str):
        '1' 、'2' 、'3' ,字符串类型必须用 '' 包裹
        
        1. 序列数据:
        一系列单值数据构成的数据集合
        
        1. 布尔类型(boolean):

        用 1 代表 true,0 代表 false

        示例

        // 声明一个数值类型的变量
        var_int := 1;
        // 声明一个序列数据的变量
        var_arr := Close;
        // 字符串类型不能单独声明,需要结合函数
        INFO(C>O, '阳线');
        
    • 运算符

      用于执行指标代码的运算、计算,简单而言就是参与运算的符号。

      • 赋值运算符

        用于给某个变量赋值

          1. :

          冒号,代表赋值并且输出到图(副图)中

          Close1:Close;      // 将 Close 赋值给 变量 Close1,并且输出到图中
          
          1. :=

          冒号等于,代表赋值,但不输出到图(主图、副图……)中,也不显示在状态栏表格中。

          Close2:=Close;     // 将 Close 赋值给 变量 Close2
          
          1. ^^

          ^^ ,两个 ^ 符号代表赋值,给变量赋值并且输出到图(主图)中。

          lastPrice^^C;
          
          1. ..

          … ,两个 . 符号代表赋值,给变量赋值并且显示在状态栏表格中,但是不输出到图(主图、副图……)中。

          openPrice..O
          
      • 关系运算符

        关系运算符是双目运算符,用在条件表达式中。用于判断两个数据之间的关系

        返回值:布尔类型,不是 true(1)、就是 false(0)

          1. 大于 >
          // 将 2 > 1 的运算结果 赋值给 rv1 变量,此时 rv1=1
          rv1:=2>1;
          
          1. 小于 <
          // 返回 false,也就是 0,因为 2 大于 1。:-) 
          rv3:=2<1;
          
          1. 大于等于 >=
          x:=Close;
          // 将收盘价大于等于¥ 10 的运算的结果 赋值给 变量 rv2
          // 注意,由于 close 是一个序列数据,当进行 close>=10 运算的时候,本质是每个周期都进行运算,所以每个周期都会有一个 1、0 的返回值
          rv2:=Close>=10;
          
          1. 小于等于 <=
          此处省略
          
          1. 等于 =
          A:=O=C;     // 判断 开盘价是不是等于收盘价。
          
          1. 不等于 <>
          1<>2       // 判断 1 是否不等于 2,返回值为 1(true)
          
      • 逻辑运算符

        返回值:布尔类型,不是 true(1)、就是 false(0)
        
        1. 逻辑与 &&,可以使用 and 替代,与连接的左右两边必须同时成立,
        // 判断 cond_a,cond_b,cond_c 是否同时成立
        cond_a:=2>1;
        cond_b:=4>3;
        cond_c:=6>5;
        cond_a && cond_b and cond_c;    // 返回值为 1,成立
        
        1. 逻辑或 ||,可以使用 or 替代,或链接左右两边,一边成立(true),整体则成立(返回值 true)
        cond_a:=1>2;
        cond_b:=4>3;
        cond_c:=5>6;
        cond_a || cond_b or cond_c;    // 返回值为 1,成立
        
        1. () 运算符,计算时,会先计算括号内的表达式。
        1>2 AND (2>3 OR 3<5)    // 运算结果为 假
        1>2 AND 2>3 OR 3<5      // 运算结果为 真
        
      • 算数运算符

        返回值:数值类型
        

        算术运算符即算术运算符号。是完成基本的算术运算 (arithmetic operators) 符号,就是用来处理四则运算的符号。

        • 加 +

          A:=1+1;      // 返回 2
          
        • 减 -

          A:=2-1;      // 返回 1
          
        • 乘 *

          A:=2*2;      // 返回 4
          
        • 除 /

          A:=4/2;      // 返回 2
          
    • 函数

      • 函数

        在编程的世界里,“函数”其实就是一段实现了某种功能的代码,并且可以供其它代码调用。一般形式如下

        function(param1,param2,……)
        
        • 构成:

          函数名(参数 1,参数 2,……),可能没有参数,可能有多个参数,例如 MA(x,n);代表返回 n 周期的内 x 的简单移动平均值,其中 MA()就是一个函数,x 和 n 就是函数的参数。

          使用函数的时候,我们需要了解函数基本定义,也就是调用该函数可以获得什么数据。通常而言,函数都带有参数,当我们传入参数的时候,需要确保传入的数据类型是符合的。现阶段,多数的 IDE 的代码提示功能,非常的不完善,有给出参数的数据类型,给我们的使用带来的一定的困扰,对 MA(x,n)解释为:

          返回简单移动平均
          用法:
          AVG:=MA(X,N): X的N日简单移动平均,算法(X1+X2+X3+...+Xn)/N,N支持变量
          

          这对于初学者来说非常的不友好,接下来,我们对函数进行彻底的剖析,试图寻找一个快速学习、使用函数的方法。

      • 返回值

        为了快速学习函数,首先我们需要理解一个概念,叫做「返回值」。返回,顾名思义,就是「还回来」,值则代表「具体的数值」,那么返回值:可以拿到的数据。

        // 因为后面的代码中会用到,所以用变量 return_value 接收、保存 function()的返回值
        // retrun_value := function(param1,param2);
        // 例如:
        AVG:=MA(C,10);     // AVG 即 retrun_value , function 函数即: MA 函数, param1 参数 : C 即 收盘价序列数据 ,  param2参数:10 。
        
      • 参数

        其次,函数的第二个概念重要概念,就是参数,传入不同的参数,可以得到不同的返回值。

        // 变量 ma5 接收 5 日收盘价移动平均值
        ma5:=MA(C,5);
        // 变量 ma10 接收 10 日收盘价移动平均值
        ma10:=MA(C,10);
        

        上述的变量 ma5、ma10 的第一个参数 X 都是 C(收盘价),实际上 C 也算一个函数(返回开盘至今的收盘价序列),只不过他没有参数。第二个参数 5、10 这是用来告诉 MA()函数,我们要获取收盘价几日的移动平均线,通过参数,函数使用起来变得更加灵活。

      • 如何学习

          1. 首先,需要了解函数的作用,也就是这个函数可以给我们返回什么数据
          1. 最后就是了解返回值的类型,毕竟我们使用函数就是为了获得返回值的。
          1. 其次,我们需要了解参数的数据类型,MA(x,n),如果不知道参数 x、n 的数据类型,也就无法正确的获得返回值。

        在后面的函数介绍、使用,遵循上述 3 条原则

    • 语言增强

      • 麦语言与JavaScript 语言混合编程

        %%
        // 这里面可以调用发明者量化的任何API 
        scope.TEST = function(obj) {
            return obj.val * 100;
        }
        %% 
        收盘价:C;
        收盘价放大100倍:TEST(C);
        上一个收盘价放大100倍:TEST(REF(C, 1)); // 鼠标移动到回测的K线上就会提示变量值
        
        • scope 对象

          scope 对象,可以添加属性,并赋值匿名函数给属性。在麦语言代码部分就可以调用这个属性引用的匿名函数。

        • scope.getRefs(obj) 函数

          在JavaScript代码块中,调用 scope.getRefs(obj) 函数,返回传入的 obj 对象的数据。

          以下%% %% 符号包裹的 JavaScript 代码中会获取到 麦语言 代码中 TEST© 函数调用时,传入的 C 收盘价。 scope.getRefs 函数会返回这个K线数据的所有的收盘价。由于使用了 throw “stop” 中断程序,所以变量arr只包含了第一根Bar的收盘价。可以尝试删除 throw “stop” ,就会执行JavaScript代码最后的return,返回所有的收盘价数据。

          %%
          scope.TEST = function(obj){
              var arr = scope.getRefs(obj)
              Log("arr:", arr)
              throw "stop"
              return
          }
          %%
          TEST(C);
          
        • scope.bars

          在JavaScript代码块中,访问所有K线bar。

          TEST 函数返回一个数值,1是阴线,0是阳线。

          %%
          scope.TEST = function(){
              var bars = scope.bars
              return bars[bars.length - 1].Open > bars[bars.length - 1].Close ? 1 : 0    // 只能返回数值
          }
          %%
          arr:TEST;                                                                      
          
          # 注意:
          # TEST 接收的 匿名函数,返回值必须是数值
          # 如果 匿名函数 没有参数,在调用 TEST 的时候直接写 VAR:=TEST; 写VAR:=TEST(); 会报错。
          # scope.TEST 中的 TEST 必须是大写。
          
        • scope.bar

          在JavaScript代码块中,访问当前 bar。

          计算 高开低收 价格的平均数。

          %%
          scope.TEST = function(){
              var bar = scope.bar
              var ret = (bar.Open + bar.Close + bar.High + bar.Low) / 4
              return ret
          }
          %%
          avg^^TEST;
          
        • scope.depth

          访问市场深度数据(订单薄)

          %%
          scope.TEST = function(){
              Log(scope.depth)
              throw "stop"             // 打印一次深度数据后就抛出异常,暂停。
          }
          %%
          TEST;
          
        • scope.symbol

          获取当前交易对名称字符串

          %%
          scope.TEST = function(){
              Log(scope.symbol)
              throw "stop"
          }
          %%
          TEST;
          
        • scope.barPos

          获取K线 Bar 位置。

          %%
          scope.TEST = function(){
              Log(scope.barPos)
              throw "stop"
          }
          %%
          TEST;
          
        • scope.get_locals(‘name’)

          该函数,用于获取麦语言代码部分中的变量

          V:10;
          %%
          scope.TEST = function(obj){
              return scope.get_locals('V')
          }
          %%
          GET_V:TEST(C);
          
          # 注意:
          # 如果 某个 变量,由于周期不足的时候计算不出数据,这个时候在JavaScript 代码中 调用scope.get_locals 函数,
          # 获取 这个变量时,会报错: line:XX - undefined locals 某个变量名 undefined
          
        • scope.canTrade

          canTrade 属性标记当前是否可以交易(当前的Bar 是不是最后一根)

          应用范例: 例如用JavaScript代码嵌入麦语言策略中,调用 GetTicker 函数 (发明者量化交易平台 JavaScript / python / C++ 中的获取行情的接口)获取市场行情中的持仓量。

          // JavaScript 语言中 GetTicker 接口返回数据中的持仓量, OpenInterest 属性。
          %%
          scope.OPI = function() {
              var OpenInterest = 0;
              if(exchange.IO("status") && scope.canTrade){
                  var ticker = exchange.GetTicker();
                  if(ticker){
                     OpenInterest = ticker.Info.OpenInterest;    // 回测不支持,会报错。
                  }
              }
              return OpenInterest;
          }
          %%
          持仓量..OPI;
          
    • 多周期引用

      • 使用: #EXPORT 公式名 ... #END ,创建一个公式,如果仅仅为了获取不同周期的数据,不做公式计算,也可以写空公式。

        空公式即:

        #EXPORT TEST 
        NOP;
        #END           // 结束
        
      • 使用: #IMPORT [MIN,周期,公式名] AS 变量值 ,引用公式,获取设置的周期的各项数据(收盘价,开盘价等等,通过变量值 获取)。

        IMPORT 命令中的 MIN 意思为 分钟级别,发明者量化平台的麦语言,IMPORT 命令中仅支持 MIN 级别。

        代码范例:

        // 本代码演示如何引用不同周期的公式在同一代码里
        // #EXPORT扩展语法, 以#END结束标记为一个公式,可以声明多个
        #EXPORT TEST 
        均值1:EMA(C, 20);
        均值2:EMA(C, 10);
        #END // 结束
        
        #IMPORT [MIN,15,TEST] AS VAR15 // 引用公式, K线周期用15分钟
        #IMPORT [MIN,30,TEST] AS VAR30 // 引用公式, K线周期用30分钟
        CROSSUP(VAR15.均值1, VAR30.均值1),BPK;
        CROSSDOWN(VAR15.均值2, VAR30.均值2),SPK;
        十五分最高价:VAR15.HIGH;
        三十分最高价:VAR30.HIGH;
        AUTOFILTER;
        
    • 模式说明

      • 一开一平信号过滤模型

        模型中通过写入AUTOFILTER函数来控制和实现一开一平的信号过滤,有多个开仓信号都满足条件的时候,取第一个信号作为有效信号,后面的k线上的同样信号将被过滤掉。

        过滤模型支持的指令:BK、BP、BPK、SK、SP、SPK、CLOSEOUT,不支持BK(5)等带手数的指令

        例如:

        MA1:MA(CLOSE,5);
        MA2:MA(CLOSE,10);
        CROSSUP(C,MA1),BK;
        CROSSUP(MA1,MA2),BK;
        C>BKPRICE+10||C<BKPRICE-5,SP;
        AUTOFILTER;
        
        理解:
        如上范例,没有设置 AUTOFILTER 时,第三行BK 和第四行BK 第五行SP,
        依次触发,每根K线触发一次信号。开仓后,再到平仓,即重置模型状态。
        
        如果设置 AUTOFILTER , 触发BK后,只能触发SP,其它的BK 信号被忽略,每根K线触发一次信号。
        
      • 加减仓模型

        模型中不写入AUTOFILTER函数,允许连续出开仓信号或者连续出平仓信号,可以实现加仓、减仓。

        支持的指令:BK(N)、BP(N)、SK(N)、SP(N)、CLOSEOUT、BPK(N)、SPK(N),不支持不带手数的开平仓指令。 (1)支持指令分组。 (2)多个指令条件同时满足时,按条件语句编写的先后顺序执行信号。 例如:

        MA1:MA(CLOSE,5);
        MA2:MA(CLOSE,10);
        CROSSUP(C,MA1),BK(1);
        CROSSUP(MA1,MA2),BK(1);
        C>BKPRICE+10||C<BKPRICE-5,SP(BKVOL);
        

        使用 TRADE_AGAIN 可以让同一个指令行,连续出多个信号。

        理解:
        以上例子,逐个信号执行,执行后的信号不再触发。平仓后重置模型状态。一个K线触发一次信号。
        
      • 一根K线一个信号的模型

        不管k线是否走完,计算出信号就进行实时下单,即K线未走完前下单; K线结束时复核,如果持仓方向与k线结束时的信号方向不符会自动同步持仓。

        例如:

        MA1:MA(CLOSE,5);
        MA2:MA(CLOSE,10);
        CROSSUP(MA1,MA2),BPK;//5周期均线上穿10周期均线做多。
        CROSSDOWN(MA1,MA2),SPK;//5周期均线下穿10周期均线做空。
        AUTOFILTER;
        
      • 一根K线多个信号的模型

        模型通过使用multsig来控制并实现一根K线出多个信号

        不管k线是否走完,计算出信号就进行实时下单

        信号不进行复核,不存在信号消失的情况,信号方向与持仓方向始终一致

        一根K线中如果满足多个信号条件可以反复多次执行

        例如:
        MA1:MA(CLOSE,5);
        MA2:MA(CLOSE,10);
        CROSSUP(MA1,MA2),BK;
        C>BKPRICE+10||C<BKPRICE-5,SP;
        AUTOFILTER;
        MULTSIG(0,0,2,0);
        

        MULTSIG 可以使一根K线内多次执行不同指令行。 一个指令行只出一次信号。

        O<C,BK;            // 这些条件在一个K线Bar内,可能都执行,但是每行只出一次信号。
        10+O<C,BK;         // 策略加上 TRADE_AGAIN(10); 可以使每行出多次信号。
        20+O<C,BK;
        40+O<C,BK;
        MULTSIG(1,1,10);
        

        补充: 1、加减仓模型,一根k线一根信号的二种方式:收盘价下单、指令价下单,都是是支持的。

        2、加减仓模型,也支持一根k线多次信号下单的。

        加减仓模型,写上multsig函数,就实现一根k线上多次加仓,或者多次减仓的。

    • 执行模式

      img

      • 收盘价模型

        收盘价模型指当前BAR走完才执行模型,在下根BAR开始的时候执行交易。

      • 实时价模型

        实时价模型指的是每次价格变动都执行一次模型,有信号就立即交易。

    • 图表显示

      • 主图附加指标

        使用操作符 “^^” , 在给变量赋值的同时,设置指标显示在主图上。

        MA60^^MA(C, 60);  // 计算参数为60的均线指标
        

        img

      • 副图附加指标

        使用操作符 “:” ,在给变量赋值的同时,设置指标显示在副图上。

        ATR:MA(MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW)),26);    // 给ATR变量赋值,":" 符号后为计算ATR的公式
        

        img

        如果不希望在主图或者副图上显示 使用 “…” 操作符

        MA60..MA(C, 60);  // 计算参数为60的均线指标
        

        img

        可以使用 DOT 、COLORRED 设置线的线型、颜色等,符合熟悉麦语言的用户的习惯。

    • 常见问题

      介绍指标编写过程中普遍遇到的“问题”,通常是在编写时需要注意的点。(持续补充)

      • 注意分好 “;” 结尾。

      • 注意系统关键字不能作为变量声明。

      • 注意字符串使用 单引号 ,例如: ‘开仓’ 这个字符串。

      • 注释

        注释符

        • // 注释内容 (输入法中英文键入皆可),代表代码在执行过程中不被编译,也就是不执行 // 后面的内容,通常我们用来标注代码的含义,方便代码复查时,可以快速理解、回忆

        • { 注释内容 } 块注释。

          A:=MA(C,10);
          {上一行代码是计算均线。}
          
        • (* 注释内容 *) 块注释。

          A:=MA(C,10);
          (*上一行代码是计算均线。*)
          
      • 输入法

        在编写代码的时候,经常因为输入法中英文切换,造成符号错误。常见的有如下几种:冒号:、结束符;、逗号,、括号() 等等,这些中英文状态下不同的字符需要注意。

        如果使用搜狗、百度、Bing 输入法,可以通过按一次 shift 键,快速切换中英文

      • 易错逻辑

        1. 至少 || 不少于 || 不小于:对应的关系运算符 >=
        2. 至多 || 最多 || 不超过:对应的关系运算符 <=
      • 策略启动同步

        在期货策略中,如果在策略机器人启动前,有手动开仓持有的仓位,则机器人启动时,会检测持仓信息,同步为实际的持仓状态。 在策略中就可以使用 SPBPCLOSEOUT 命令平仓。

        %%
        if (!scope.init) {
            var ticker = exchange.GetTicker();
            exchange.Buy(ticker.Sell+10, 1);
            scope.init = true;
        }
        %%
        C>0, CLOSEOUT;
        
      • 不支持双向持仓

        不支持同一个合约,同时有多空持仓。

  • K 线数据引用

    • OPEN

      取得 K 线图的开盘价

      开盘价

      函数:OPEN,简写 O

      参数:无

      解释:返回「该周期」开盘价

      序列数据

      OPEN 取得K线图的开盘价。
      
      注:
      1、可简写为O。
      
      例1:
      OO:=O;           //定义OO为开盘价;注意 O 与 0 的区别。
      例2:
      NN:=BARSLAST(DATE<>REF(DATE,1));
      OO:=REF(O,NN);   //取的当日的开盘价
      例3:
      MA5:=MA(O,5);    //定义开盘价的5周期均线(O为OPEN简写)。
      
    • HIGH

      取得 K 线图的最高价

      最高价

      函数:HIGH,简写 H

      参数:无

      解释:返回「该周期」最高价

      序列数据

      HIGH 取得K线图的最高价。
      
      注:
      1、可简写为H。
      
      例1:
      HH:=H;         //定义HH为最高价。
      例2:
      HH:=HHV(H,5);  //取的5个周期内最高价的最大值。
      例3:
      REF(H,1);      //取的前一根K线的最高价
      
    • LOW

      取得 K 线图的最低价

      最低价

      函数:LOW,简写 L

      参数:无

      解释:返回「该周期」最低价

      序列数据

      LOW 取得K线图的最低价。
      
      注:
      1、可简写为L。
      
      例1:
      LL:=L;            //定义LL为最低价。
      例2:
      LL:=LLV(L,5);     //取得5个周期内最低价的最小值。
      例3:
      REF(L,1);         //取得前一根K线的最低价
      
    • CLOSE

      取得 K 线图的收盘价

      收盘价

      函数:CLOSE,简写 C

      参数:无

      解释:返回「该周期」收盘价

      序列数据

      CLOSE 取得K线图的收盘价。
      
      注:
      1、当盘中k线没有走完的时候,取得最新价。
      2、可简写为C。
      
      例1:
      A:=CLOSE;          //定义变量A为收盘价(盘中k线没有走完的时候A为最新价)。
      例2:
      MA5:=MA(C,5);      //定义收盘价的5周期均线(C为CLOSE简写)。
      例3:
      A:=REF(C,1);       //取得前一根k线的收盘价。
      
    • VOL

      取得 K 线图的成交量

      成交量

      函数:VOL,简写 V

      参数:无

      解释:返回「该周期」成交量

      序列数据

      VOL 取得K线图的成交量。
      
      注:
      可简写为V。
      该函数在当根TICK上的返回值为当天所有TICK成交量的累计值。
      
      例1:
      VV:=V;       //定义VV为成交量
      例2:
      REF(V,1);    //表示前一个周期的成交量
      例3:
      V>=REF(V,1); //成交量大于前一个周期的成交量,表示成交量增加(V为VOL的简写)。
      
    • REF

      向前引用

      引用X在N个周期前的值。
      
      注:
      1、当N为有效值,但当前的k线数不足N根,返回空值;
      2、N为0时返回当前X值;
      3、N为空值时返回空值。
      4、N可以为变量
      
      例1:
      REF(CLOSE,5);表示引用当前周期前第5个周期的收盘价
      例2:
      AA:=IFELSE(BARSBK>=1,REF(C,BARSBK),C);//取最近一次买开仓信号K线的收盘价
      //1)发出BK信号的当根k线BARSBK返回空值,则发出BK信号的当根k线REF(C,BARSBK)返回
      空值;
      //2)发出BK信号的当根k线BARSBK返回空值,不满足BARSBK>=1,则当根k线的收盘价。
      //3)发出BK信号之后的k线BARSBK返回买开仓的K线距离当前K线的周期数,REF(C,BARSBK)
      返回开仓k线的收盘价。
      //4)例:1、2、3 三根k线,1 K线为开仓信号的当根k线,则返回当根k线的收盘价,2、3
      K线返回 1 K线的收盘价。
      
    • UNIT

      取数据合约的交易单位

      取数据合约的交易单位。
      用法:
      UNIT 取加载数据合约的交易单位。
      

      商品期货

      UNIT值与合约相关

      rb 合约一手,10份(吨)
      

      数字货币现货

      UNIT值为1

      数字货币期货 UNIT值与合约币种相关

      OKEX期货:BTC合约1张代表100美元,其它币种的1张合约代表10美元
      
    • MINPRICE

      数据合约的最小变动价位

      取数据合约的最小变动价位。
      用法:
      MINPRICE; 取加载数据合约的最小变动价位。
      
    • MINPRICE1

      交易合约的最小变动价位

      取交易合约的最小变动价位。
      用法:
      MINPRICE1; 取交易合约的最小变动价位。
      
  • 时间函数

    • BARPOS

      取 K 线的位置
      
      BARPOS,返回从第一根K线开始到当前的周期数。
      
      注:
      1、BARPOS返回本地已有的K线根数,从本机上存在的数据开始算起。
      2、本机已有的第一根K线上返回值为1。
      
      例1:LLV(L,BARPOS);//求本地已有数据的最小值。
      
      例2:IFELSE(BARPOS=1,H,0);//当前K线是本机已有的第一根K线取最高值,否则取0。
      
    • PERIOD

      周期值为分钟数

      1, 3, 5, 15, 30, 60, 1440
      
    • DATE

      日期

      函数:DATE

      参数:无

      解释:取得该周期从 1900 以来的的年月日

      序列数据

    • TIME

      取 K 线的时间

      TIME,取K线时间。
      
      注:
      1、该函数在盘中实时返回,在K线走完后返回K线的起始时间。
      2、该函数返回的是交易所数据接收时间,也就是交易所时间。
      3、TIME函数在秒周期使用时返回六位数的形式,即:HHMMSS,在其他周期上显示为四位数的形式,即:HHMM.
      4、TIME函数只能加载在日周期以下的周期中,在日周期及日周期以上的周期中该函数返回值始终为1500。
      5、使用TIME函数进行尾盘平仓的操作需要注意
      (1)尾盘平仓设置的时间建议设置为K线返回值中实际可以取到的时间(如:螺纹指数 5分钟周期 最后一根K线返回时间为1455,尾盘平仓设置为TIME>=1458,CLOSEOUT;则效果测试中不能出现尾盘平仓的信号)
      (2)使用TIME函数作为尾盘平仓的条件的,建议开仓条件也要做相应的时间限制(如设置尾盘平仓条件为TIME>=1458,CLOSEOUT;则相应的开仓条件中需要添加条件TIME<1458;避免平仓后再次开仓的情况)
      
      例1:
      C>O&&TIME<1450,BK;
      C<O&&TIME<1450,SK;
      TIME>=1450,SP;
      TIME>=1450,BP;
      AUTOFILTER;
      //在14:50后平仓。
      例2:
      ISLASTSK=0&&C>O&&TIME>=0915,SK;
      
    • YEAR

      年份

      YEAR,取得年份。
      
      注:
      YEAR的取值范围为1970—2033。
      
      例1:
      N:=BARSLAST(YEAR<>REF(YEAR,1))+1;
      HH:=REF(HHV(H,N),N);
      LL:=REF(LLV(L,N),N);
      OO:=REF(VALUEWHEN(N=1,O),N);
      CC:=REF(C,N);//取上一年的最高价,最低价,开盘价,收盘价。
      例2:
      NN:=IFELSE(YEAR>=2000 AND MONTH>=1,0,1);
      
    • MONTH

      取月份

      MONTH,返回某个周期的月份。
      
      注:
      MONTH的取值范围为1—12.
      
      例1:
      VALUEWHEN(MONTH=3&&DAY=1,C);//在K线日期为三月一日时取其收盘价。
      例2:
      C>=VALUEWHEN(MONTH<REF(MONTH,1),O),SP;
      
    • DAY

      取得某周期的日数

      DAY,返回某一周期的日数。
      
      注:
      DAY取值范围为1-31。
      
      例1:
      DAY=3&&TIME=0915,BK;//当日起为3日,时间为9点15分时,买开。
      例2:
      N:=BARSLAST(DATE<>REF(DATE,1))+1;
      CC:=IFELSE(DAY=1,VALUEWHEN(N=1,O),0);//当日期为1时,取开盘价,否则取值为0.
      
    • HOUR

      小时

      HOUR,返回某周期的小时数。
      
      注:
      HOUR的取值范围为0—23
      
      例1:
      NX:=BARSLAST(CROSS(HOUR=9,0.5));
      DRAWLINE3(CROSSDOWN(HOUR=14,0.5),REF(H,NX),NX,CROSSDOWN(HOUR=14,0.5),REF(H,1),1,0),COLORGREEN;
      //连接9点到收盘前最后一根k线高点的连线。
      例2:
      HOUR=10;//在10:00的K线上返回值为1,其余K线上返回值为0。
      
    • MINUTE

      分钟

      MINUTE,返回某个周期的分钟数。
      
      注:
      1:MINUTE的取值范围为0—59
      2:该函数只能加载在分钟周期上,返回当根K线开始的分钟数。
      例1:
      MINUTE=0;//在整点时刻的分钟K线上返回值为1,其余K线返回值为0。
      例2:
      TIME>1400&&MINUTE=50,SP;//在14:50的时候卖平仓。
      
    • WEEKDAY

      取得星期数

      WEEKDAY,取得星期数。
      
      注:
      1:WEEKDAY的取值范围是0—6。(星期日 ~ 星期六)
      
      例1:
      N:=BARSLAST(MONTH<>REF(MONTH,1))+1;
      COUNT(WEEKDAY=5,N)=3&&TIME>=1450,BP;
      COUNT(WEEKDAY=5,N)=3&&TIME>=1450,SP;
      AUTOFILTER;//每个月交割日尾盘自动平仓。
      例2:
      C>VALUEWHEN(WEEKDAY<REF(WEEKDAY,1),O)+10,BK;
      AUTOFILTER;
      
  • 逻辑判断函数

    • BARSTATUS

      返回当前周期的位置状态

      BARSTATUS 返回当前周期的位置状态。
      
      注:
      该函数返回1表示当前周期是第一个周期,返回2表示是最后一个周期,返回0表示当前周期处于中间位置。
      
      例:
      A:=IFELSE(BARSTATUS=1,H,0);//如果当前K线是第一个周期,变量A返回K线最高值,否则取0。
      
    • BETWEEN

      介于

      BETWEEN(X,Y,Z) 表示X是否处于Y和Z之间,成立返回1(Yes),否则返回0(No)。
      
      注:
      1、其中若X=Y、X=Z、或X=Y且Y=Z时函数返回值为1(Yse)。
      
      例1:
      BETWEEN(CLOSE,MA5,MA10); //表示收盘价介于5日均线与10日均线之间。
      
    • CROSS

      交叉函数

      CROSS(A,B) 表示A从下方向上穿过B,成立返回1(Yes),否则返回0(No)
      
      注:
      1、满足穿越的条件必须上根k线满足A<=B,当根k线满足A>B才被认定为穿越。
      
      例1:
      CROSS(CLOSE,MA(CLOSE,5));//表示收盘线从下方向上穿过5周期均线
      
    • CROSSDOWN

      向下穿越

      CROSSDOWN(A,B):表示当A从上方向下穿B,成立返回1(Yes),否则返回0(No)
      
      注:
      1、CROSSDOWN(A,B)等同于CROSS(B,A),CROSSDOWN(A,B)编写更利于理解
      
      例1:
      MA5:=MA(C,5);
      MA10:=MA(C,10);
      CROSSDOWN(MA5,MA10),SK;//MA5下穿MA10卖开仓
      //CROSSDOWN(MA5,MA10),SK;  与  CROSSDOWN(MA5,MA10)=1,SK;表达同等意义
      
    • CROSSUP

      向上穿越

      CROSSUP(A,B) 表当A从下方向上穿过B,成立返回1(Yes),否则返回0(No)
      
      注:
      1、CROSSUP(A,B)等同于CROSS(A,B),CROSSUP(A,B)编写更利于理解。
      
      例1:
      MA5:=MA(C,5);
      MA10:=MA(C,10);
      CROSSUP(MA5,MA10),BK;//MA5上穿MA10,买开仓。
      //CROSSUP(MA5,MA10),BK; 与  CROSSUP(MA5,MA10)=1,BK;表达同等意义
      
    • EVERY

      判断是否持续满足

      EVERY(COND,N),判断N周期内,是否一直满足COND条件。若满足函数返回值为1,不满足函数返回值为0;
      
      注:
      1、N包含当前k线。
      2、若N是有效数值,但前面没有那么多K线,或者N为空值,代表条件不满足,函数返回值为0。
      3、N可以是变量
      
      例1:
      EVERY(CLOSE>OPEN,5);//表示5个周期内一直是阳线
      例2:
      MA5:=MA(C,5);//定义5周期均线
      MA10:=MA(C,10);//定义10周期均线
      EVERY(MA5>MA10,4),BK;//4个周期内MA5都大于MA10,则买开仓。
      //EVERY(MA5>MA10,4),BK;   与   EVERY(MA5>MA10,4)=1,BK;    表达同等意义
      
    • EXIST

      判断是否存在满足

      EXIST(COND,N) 判断N个周期内是否有满足COND的条件
      
      注:
      1、N包含当前k线。
      2、N可以是变量。
      3、若N是有效数值,但前面没有那么多K线,按实际周期数计算
      
      例1:
      EXIST(CLOSE>REF(HIGH,1),10);表示10个周期中是否存在收盘价大于前一个周期的最高价,存在返回1,不存在则返回0.
      例2:
      N:=BARSLAST(DATE<>REF(DATE,1))+1;
      EXIST(C>MA(C,5),N);// 表示当天是否有满足收盘价大于5周期均线的k线,存在返回1,不存在返回0
      
    • IF

      条件函数

      IF(COND,A,B) 若COND条件成立,则返回A,否则返回B
      
      注:
      1、COND是判断条件;A、B可以是条件,也可以是数值。
      2、该函数支持变量循环引用前一周期自身变量,即支持下面这样的写法Y: IF(CON,X,REF(Y,1));
      例1:
      IF(ISUP,H,L);//k线为阳线,取最高价,否则取最低价
      例2:
      A:=IF(MA5>MA10,CROSS(DIFF,DEA),IF(CROSS(D,K),2,0));//当MA5>MA10时,取是否满足DIFF上穿DEA,否则(MA5不大于MA10),当K,D死叉时,令A赋值为2,若上述条件都不满足,A赋值为0
      A=1,BPK;//当MA5>MA10,以DIFF上穿DEA作为开多仓条件
      A=2,SPK;//当MA5不大于MA10,以K、D死叉作为开空仓条件
      
    • IFELSE

      条件函数

      IFELSE(COND,A,B) 若COND条件成立,则返回A,否则返回B
      
      注:
      1、COND是判断条件;A、B可以是条件,也可以是数值。
      2、该函数支持变量循环引用前一周期自身变量,即支持下面这样的写法Y: IFELSE(CON,X,REF(Y,1));
      例1:
      IFELSE(ISUP,H,L);//k线为阳线,取最高价,否则取最低价
      例2:
      A:=IFELSE(MA5>MA10,CROSS(DIFF,DEA),IFELSE(CROSS(D,K),2,0));//当MA5>MA10时,取是否满足DIFF上穿DEA,否则(MA5不大于MA10),当K,D死叉时,令A赋值为2,若上述条件都不满足,A赋值为0
      A=1,BPK;//当MA5>MA10,以DIFF上穿DEA作为开多仓条件
      A=2,SPK;//当MA5不大于MA10,以K、D死叉作为开空仓条件
      
    • ISCONTRACT

      当前是否为指定的合约

      ISCONTRACT(CODE) 当前是否为指定的合约。
      
      用法:ISCONTRACT(CODE);是当前合约返回1,不是当前合约返回0。
      
      注:
      1、判断是否为指定合约时, CODE 可以为合约的交易代码
      
      例:
      ISCONTRACT('MA888');
      ISCONTRACT('rb1901');
      ISCONTRACT('this_week');    // 数字货币 OKEX期货合约
      ISCONTRACT('XBTUSD');       // 数字货币 BITMEX期货合约
      

      支持正则表达式

      判断合约

      ISCONTRACT('this_week');                     // 判断当前合约是否为 OKEX期货 this_week (当周)合约
      

      判断交易所名称

      ISCONTRACT('@Futures_(CTP|BitMEX)');         // 判断当前交易所对象是否为 商品期货 或者 数字货币BITMEX期货交易所
      ISCONTRACT('@(OKEX|Bitfinex|Futures_CTP)');  // 判断交易所,需要在开头加 @ 字符
      
    • ISDOWN

      阴线

      ISDOWN 判断该周期是否收阴
      
      注:
      1、ISDOWN等同于C<O
      
      例:
      ISDOWN=1&&C<REF(C,1),SK;//当根k线收阴并且收盘价小于前一周期收盘价,则开空
      //ISDOWN=1&&C<REF(C,1),SK; 与 ISDOWN&&C<REF(C,1),SK; 表达同等意义
      
    • ISEQUAL

      平盘

      ISEQUAL 判断该周期是否平盘
      
      注:
      1、ISEQUAL等同于C=O
      
      例1:
      EVERY(ISEQUAL=1,2),CLOSEOUT;//持续2根k线都是平盘,则全平。
      
    • ISLASTBAR

      判断该周期是否为最后一根 K 线

      ISLASTBAR 判断该周期是否为最后一根k线
      
      例1:
      VALUEWHEN(ISLASTBAR=1,REF(H,1));//当前k线是最后一根k线,则取前一周期的最高价。
      
    • ISNULL

      判断空值

      ISNULL 判断空值
      
      用法:ISNULL(N);如果N为空值,函数返回1;如果N为非空值,函数返回0。
      
      例:MA5:=IFELSE(ISNULL(MA(C,5))=1,C,MA(C,5));//定义五周期均线,K线数量不足五根时,返回当根K线的收盘价
      
    • ISUP

      阳线

      ISUP 判断该周期是否收阳
      
      注:
      1、ISUP等同于C>O
      
      例:
      ISUP=1&&C>REF(C,1),BK;   //若当根k线收阳并且收盘价大于前一周期收盘价,则开多
                               //ISUP=1&&C>REF(C,1),BK; 与 ISUP&&C>REF(C,1),BK;
                               //表达同等意义
      
    • LAST

      判断函数

      LAST(COND,N1,N2) 判断过去N1到N2周期内,是否一直满足COND条件。
      
      注:
      1、若N1与N2只相差一个周期(如N1=3,N2=2),则函数判断距离当前K线最近的那个周期上是否满足条件(即判断过去N2个周期的那根K线上是否满足条件)
      2、当N1/N2为有效值,但当前的k线数不足N1/N2根,或者N1/N2空值的情况下,代表不成立,该函数返回0
      3、N1、N2不可以是变量。
      
      例1:
      LAST(CLOSE>OPEN,10,5);//表示从过去第10个周期到第5个周期内一直是阳线
      例2:
      MA5:=MA(C,5);
      LAST(C>MA5,4,3);//判断距离当前k线3个周期的那根k线上是否满足C大于MA5.
      
    • LONGCROSS

      维持交叉函数

      LONGCROSS(A,B,N) 表示A在N个周期内都小于B,本周期A从下向上穿越B
      
      注:
      1、当N为有效值,但当前的k线数不足N根时,LONGCROSS函数返回空值
      2、N不支持变量。
      
      例1:
      LONGCROSS(CLOSE,MA(CLOSE,10),20);//表示收盘线在10日均线之下持续20周期后从下向上穿过10日均线
      
    • NOT

      NOT(X):取非。当X=0时返回1,否则返回0。
      例1:
      NOT(ISLASTBK);如果上一个信号不是BK信号,则NOT(ISLASTBK)返回值为1;上一个信号是BK信号,则NOT(ISLASTBK)返回值为0。
      例2:
      NOT(BARSBK>=1)=1;//BK信号发出的当根K线上满足条件。
      //NOT(BARSBK>=1)=1 与 NOT(BARSBK>=1) 表达同等意义。
      
    • NULL

      返回空值

      返回空值
      用法:
      MA5:=MA(C,5);
      MA10:=MA(C,10);
      A:=IFELSE(MA5>MA10,MA5,NULL),COLORRED;//当MA5>MA10时,画五日均线MA5,不满足MA5>MA10时,返回空值,不画线。
      
    • VALUEWHEN

      取值

      VALUEWHEN(COND,X) 当COND条件成立时,取X的当前值。如COND条件不成立,则取上一次COND条件成立时X的值。
      
      注:
      X可以是数值也可以是条件。
      
      例1
      VALUEWHEN(HIGH>REF(HHV(HIGH,5),1),HIGH);表示当前最高价大于前五个周期最高价的最大值时返回当前最高价
      例2:
      VALUEWHEN(DATE<>REF(DATE,1),O);表示取当天第一根k线的开盘价(即当天开盘价)
      例3:
      VALUEWHEN(DATE<>REF(DATE,1),L>REF(H,1));//表示在当天第一根k线上判断当前最低价是否大于昨天最后一根K线的最高价。返回1,说明当天跳空高开。返回0,说明当天不满足跳空高开条件。
      
  • 循环执行函数

    • LOOP2

      循环条件函数

      LOOP2(COND,A,B);循环条件函数 若COND条件成立,则返回A,否则返回B
      
      注:
      1、COND是判断条件;A、B可以是条件,也可以是数值。
      2、该函数支持变量循环引用前一周期自身变量,即支持下面这样的写法Y:=LOOP2(CON,X,REF(Y,1));
      
      例1:
      X:=LOOP2(ISUP,H,REF(X,1));//k线为阳线,取当根K线的最高价,否则取上一次是阳线的K线的最高价;若之前未出现过阳线时,X返回为空值
      
      例2:
      BB:=LOOP2(BARSBK=1,LOOP2(L>LV(L,4),L,LV(L,4)),LOOP2(L>REF(BB,1),L,REF(BB,1)));//持有多单时,开多单那根的前面4个周期内的最低价为起始止损点BB,后续K线最低价比前一个最低价高,取当前最低价为止损点,否则取前一个低点为止损点,
      SS:=LOOP2(BARSSK=1,LOOP2(H<HV(H,4),H,HV(H,4)),LOOP2(H<REF(SS,1),H,REF(SS,1)));//持有空单时,开空单那根的前面4个周期内的最高价为起始止损点SS,最高价比前一个最高价低,取当前最高价为止损点,否则取前一个高点为止损点
      H>HV(H,20),BK;
      L<LV(L,20),SK;
      C<BB,SP;
      C>SS,BP;
      AUTOFILTER;
      
  • 金融统计函数

    • BARSCOUNT

      第一个有效周期到当前的周期数

      BARSCOUNT(COND) 第一个有效周期到当前的周期数。
      
      注:
      1、返回值为COND从第一个有效周期开始计算,到现在为止的周期数。
      2、条件第一次成立的当根k线上BARSCOUNT(COND)的返回值为0
      
      例:
      BARSCOUNT(MA(C,4));//计算MA(C,4)第一次有返回值到当前的周期数。
      
    • BARSLAST

      上一次条件成立位置

      BARSLAST(COND):上一次条件COND成立到当前的周期数
      
      注:
      1、条件成立的当根k线上BARSLAST(COND)的返回值为0
      
      例1:
      BARSLAST(OPEN>CLOSE); //上一根阴线到现在的周期数。
      例2:
      N:=BARSLAST(DATE<>REF(DATE,1))+1;//分钟周期,当日k线数。
      //由于条件成立的当根k线上BARSLAST(COND)的返回值为0,所以“+1”才是当日k线根数。
      
    • BARSSINCE

      第一个条件成立到当前的周期数

      BARSSINCE(COND) 第一个条件成立到当前的周期数。
      
      注:
      1、返回值为COND第一次成立到当前的周期数
      2、条件第一次成立的当根k线上BARSSINCE(COND)的返回值为0
      
      例:
      BARSSINCE(CLOSE>OPEN);
      //统计第一次满足阳线这个条件的K线到现在的周期数
      
    • BARSSINCEN

      统计 N 周期内第一次条件成立到当前的周期数

      BARSSINCEN(COND,N) 统计N周期内第一次条件成立到当前的周期数
      
      注:
      1、N包含当前k线。
      2、当N为有效值,但当前的k线数不足N根,按照实际的根数计算;
      3、若N为0返回无效值;
      4、N可以为变量
      
      例:
      N:=BARSLAST(DATE<>REF(DATE,1))+1;//分钟周期,当日K线数。
      BARSSINCEN(ISUP,N);//统计N周期内第一次满足阳线到当前的周期数
      
    • CONDBARS

      取得最近满足 A,B 条件的 K 线间周期数

      CONDBARS(A,B);取得最近的满足A、B条件的k线间周期数
      注意:
      1、该函数返回周期数不包含最后满足条件的K线
      2、距离当前K线最近的满足的条件为B条件,则该函数返回值为最后一次满足A条件的K线到满足B条件的K线的周期数(A条件满足后的第一次满足B条件的K线)
      距离当前K线最近的满足的条件为A条件,则该函数返回值为最后一次满足B条件的K线到满足A条件的K线的周期数(B条件满足后的第一次满足A条件的K线)
      
      例1:
      MA5:=MA(C,5);//5周期均线
      MA10:=MA(C,10);//10周期均线
      CONDBARS(CROSSUP(MA5,MA10),CROSSDOWN(MA5,MA10));//最近一次满足5周期均线上穿10周期均线与5周期均线下穿10周期均线之间的周期数
      
    • COUNT

      统计总数

      COUNT(COND,N):统计N周期中满足COND条件的周期数。
      
      注:
      1、N包含当前k线。
      2、若N为0则从第一个有效值算起;
      3、当N为有效值,但当前的k线数不足N根,从第一根统计到当前周期。
      4、N 为空值时返回值为空值 。
      5、N可以为变量
      
      例1:
      N:=BARSLAST(DATE<>REF(DATE,1))+1;//分钟周期,当日k线数。
      M:=COUNT(ISUP,N);//统计分钟周期上开盘以来阳线的根数。
      例2:
      MA5:=MA(C,5);//定义5周期均线
      MA10:=MA(C,10);//定义10周期均线
      M:=COUNT(CROSSUP(MA5,MA10),0);//统计从申请到的行情数据以来到当前这段时间内,5周期均线上穿10周期均线的次数。
      
    • DMA

      动态移动平均

      DMA(X,A):求X的动态移动平均,其中A必须小于1大于0。
      注:
      1、A可以为变量
      2、如果A<=0或者A>=1,返回无效值
      
      计算公式:DMA(X,A)=REF(DMA(X,A),1)*(1-A)+X*A
      
      例1:
      DMA3:=DMA(C,0.3);//计算结果为REF(DMA3,1)*(1-0.3)+C*0.3
      
    • EMA

      指数加权移动平均

      EMA(X,N):求N周期X值的指数加权移动平均(平滑移动平均)。
      
      注:
      1、N包含当前k线。
      2、对距离当前较近的k线赋予了较大的权重。
      3、当N为有效值,但当前的k线数不足N根,按实际根数计算。
      4、N为0或空值时返回值为空值。
      5、N可以为变量
      
      EMA(X,N)=2*X/(N+1)+(N-1)*REF(EMA(X,N),1)/(N+1)
      
      例1:
      EMA10:=EMA(C,10);//求收盘价10周期指数加权移动平均值
      
    • EMA2

      线性加权移动平均

      EMA2(X,N);//求N周期X值的线性加权移动平均(也称WMA)
      
      EMA2(X,N)=[N*X0+(N-1)*X1+(N-2)*X2+...+1*X(N-1)]/[N+(N-1)+(N-2)+...+1],X0表示本周期值,X1表示上一周期值
      
      注:
      1、N包含当前k线。
      2、当N为有效值,但当前的k线数不足N根,返回值为空值。
      3、N为0或空值时返回值为空值。
      4、N可以为变量
      
      例1:
      EMA2(H,5);//求最高价在5个周期的线性加权移动平均值。
      
    • EMAWH

      指数加权移动平均

      EMAWH(C,N),指数加权移动平均,也叫平滑移动平均,采用指数加权方法,对距离当前较近的K线赋予了较大的权重。
      注:
      1、当N为有效值,当前的k线数不足N根时,或者前面周期的取值仍作用于当前周期时,EMAWH返回值为空值
      因为EMAWH计算公式中着重考虑了当周期的权重,所以当周期较长,前面的周期取值对当前的影响越小,EMAWH从前面数据对当前周期不再影响时的取值开始显示,所以即使选择的数据起始时间不同,当前已经显示的K线的EMAWH的取值也不会发生变化
      2、当N为0或空值时返回值均为空值
      3、N不能为变量
      
      EMAWH(C,N)=2*C/(N+1)+(N-1)*REF(EMAWH(C,N),1)/(N+1)
      
      注:
      EMAWH用法同EMA(C,N)
      
    • HARMEAN

      调和平均值

      HARMEAN(X,N) 求X在N个周期内的调和平均值。
      
      算法举例:HARMEAN(X,5)=1/[(1/X1+1/X2+1/X3+1/X4+1/X5)/5]
      
      注:
      1、N包含当前k线。
      2、调和平均值与倒数的简单平均值互为倒数。
      3、当N为有效值,但当前的k线数不足N根,函数返回空值。
      4、N为0或空值的情况下,函数返回空值。
      5、X为0或空值的情况下,函数返回空值。
      6、N可以为变量。
      
      例:
      HM5:=HARMEAN(C,5);//求5周期收盘价的调和平均值。
      
    • HHV

      最高值

      HHV(X,N):求X在N个周期内的最高值。
      
      注:
      1、N包含当前k线。
      2、若N为0则从第一个有效值开始算起;
      3、当N为有效值,但当前的k线数不足N根,按照实际的根数计算;
      4、N为空值时,返回空值。
      5、N可以是变量。
      
      例1:
      HH:=HHV(H,4);//求4个周期最高价的最大值,即4周期高点(包含当前k线)。
      例2:
      N:=BARSLAST(DATE<>REF(DATE,1))+1;//分钟周期,日内k线根数
      HH1:=HHV(H,N);//在分钟周期上,日内高点
      
    • HV

      除当前 K 线外最高值

      HV(X,N): 求X在N

More

jeevan777 麦语言可以用于实盘吗?

小小梦 可以的,支持实盘。