Người phát minh định lượng My Language (Mylang) tài liệu

Tác giả:Giấc mơ nhỏ, Tạo: 2018-11-30 13:29:33, Cập nhật: 2022-12-09 17:46:10

[TOC]

Ngôn ngữ My là một ngôn ngữ giao dịch lập trình tương thích và tăng cường ngôn ngữ Ma. Ngôn ngữ My được định lượng FMZ sẽ thực hiện kiểm tra ngữ pháp nghiêm ngặt, ví dụ như khi sử dụng ngôn ngữ tăng cường để nhúng mã ngôn ngữ JavaScript.%%Nếu bạn thêm một ký tự trống sau phép toán, bạn sẽ bị lỗi.

  • Thông tin cơ bản

    • Thỏa thuận

      Hợp đồng tiền kỹ thuật số

      Hợp đồng tiền kỹ thuật số

      this_week     数字货币期货当周合约
      next_week     数字货币期货次周合约
      month         数字货币期货月度合约
      quarter       数字货币期货季度合约
      next_quarter  数字货币期货次季度合约
      third_quarter 数字货币期货第三季度合约
      last_quarter  最后季度合约
      
      XBTUSD        BITMEX永续合约
      swap          除BITMEX交易所以外数字货币期货永续合约
      
      具体可以参看JavaScript/Python/C++文档的exchange.SetContractType()函数部分
      

      img

    • Các biến

      Một biến là một không gian mở trong bộ nhớ máy tính để lưu trữ dữ liệu, đơn giản là để lưu trữ dữ liệu.

      Mở biến số 1

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

      Trong麦语言Trong, từ数据量Một sự khác biệt đơn giản:

      1. Dữ liệu đơn giá trị: chỉ có một giá trị, ví dụ:01’abc’
      2. Dữ liệu chuỗi: Dữ liệu chuỗi bao gồm một tập dữ liệu đơn giá trị, ví dụ:Close(Giá đóng cửa)Closebao gồmnGiá kết thúc chu kỳ[ 10.1 , 10.2 , 10.3 , 10.4 , 10. 5 ...]

      Phân biệt từ các biến số loại silicon

      1. Loại chuỗi: phải sử dụng''Các gói, kiểu chuỗi không được phép sử dụng trực tiếp, cần hỗ trợ các hàm xuất vào view.
      INFO(CLSOE>OPEN,'OK!');
      
      1. Các loại số: bao gồm cả số nguyên, số trôi (đáng số nhỏ).
      // 整数
      int:=2;
      
      // 小数
      float:=3.1;
      
      1. Boolean type, sử dụng 1 (định nghĩa là đúng) hoặc 0 (định nghĩa là sai): 1, 0, đúng hoặc sai. Ví dụ:A:=1>0;Sau khi thực hiện mã này, bạn có thể thực hiện các bước sau:AGiá trị của nó là 1⁄4.
      // 当前周期收盘价大于-999,你会发现,每个周期的返回值都是1,代表true,因为收盘价几乎不可能为负数
      is_true:=Close>-999;
      
      1. Các biến số toàn cầu
      VARIABLE:VALUE1:10;     // 声明一个全局变量,赋值为10,只执行一次。
      

      Những điều cần lưu ý khi kiểm tra lại:

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

      Đầu tiênINFONhững câu nói được in là:101Có thể nghi ngờ rằng ban đầu không phải là0Vậy sao? Điều này là do khi kiểm tra lại, đầu tiên có 100 đường K, đã chạy qua 100 đường K và cộng thêm 100 lần. Các đĩa thực được xác định dựa trên số lượng K-thread được lấy ban đầu.

      • Quy tắc đặt tên

        Trong hầu hết các hệ thống, việc đặt tên biến không cho phép sử dụng hệ thống đặt tên (như tên biến tích hợp, tên chức năng).CloseCNgoài ra, không cho phép số nguyên hoặc số bắt đầu. Cuối không cho phép rất dài, giới hạn chiều dài khác nhau của hệ thống khác nhau. Trong thực tế, bạn có thể không cần phải phức tạp với hệ thống chính thống về hiệu quả giải quyết của tiếng Trung, tin rằng ngôn ngữ Oolong là rất thân thiện với tiếng Trung.

        1. Tên Trung Quốc
        // 优雅的输出
        五日均线:=MA(C,5);
        
        1. Tiếng Anh + dấu gạch dưới
        // 输出
        move_avg_5:=MA(C,5);
        

        Nếu bạn thích tiếng Anh, hãy làm cho mọi người hiểu ý nghĩa của biến của bạn.A1AAABBB... cách đặt tên như thế này. Tôi tin rằng sau một thời gian, bạn sẽ rất đau đớn vì mất trí nhớ khi bạn xem lại mã chỉ số của mình.

        Vì vậy, từ bây giờ, hãy nắm lấy ngôn ngữ Omelet! Mong rằng nó trở thành một công cụ mạnh mẽ trong phân tích và quyết định của bạn.

    • Loại dữ liệu

      Loại dữ liệu là một khái niệm cơ bản, trong viết, khi chúng ta gán một giá trị dữ liệu rõ ràng cho một biến, biến cũng trở thành loại của dữ liệu.

        1. Loại số:
        1、2、3、1.1234、2.23456 ...
        
        1. Loại ký tự:
        '1' 、'2' 、'3' ,字符串类型必须用 '' 包裹
        
        1. Dữ liệu trình tự:
        一系列单值数据构成的数据集合
        
        1. Loại boolean:

        Sử dụng1Đại diệntrue0Đại diệnfalse

        Ví dụ

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

      Các phép tính được sử dụng để thực hiện mã chỉ số, đơn giản là các ký hiệu tham gia vào các phép tính.

      • Các toán tử gán giá trị

        Để gán giá trị cho một biến.

          1. :

          :, đại diện cho các định nghĩa và được xuất ra trong biểu đồ.

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

          :=, đại diện cho việc gán giá trị, nhưng không xuất ra biểu đồ (bản đồ chính, phụ đồ...) và cũng không hiển thị trong biểu đồ trạng thái.

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

          ^^Hai.^Biểu tượng đại diện cho việc gán giá trị, gán giá trị cho biến và xuất ra biểu đồ.

          lastPrice^^C;
          
          1. ..

          ..Hai..Biểu tượng đại diện cho việc gán giá trị, gán giá trị cho biến và hiển thị tên biến, giá trị trong biểu đồ, nhưng không vẽ biểu đồ vào biểu đồ (phát đồ chính, phụ đồ...)

          openPrice..O
          
      • Các toán tử quan hệ

        Các toán tử quan hệ là các toán tử hai mắt được sử dụng trong các biểu thức điều kiện. Chúng được sử dụng để quyết định mối quan hệ giữa hai dữ liệu.

        Trả về giá trị: Boolean, khôngtrue(1) làfalse(0)。

          1. lớn hơn>
          // 将2>1的运算结果赋值给rv1变量,此时rv1=1
          rv1:=2>1;
          
          1. Ít hơn<
          // 返回false,也就是0,因为2大于1
          rv3:=2<1;
          
          1. lớn hơn bằng>=
          x:=Close;
          // 将收盘价大于等于10的运算的结果赋值给变量rv2
          // 注意,由于close是一个序列数据,当进行close>=10运算的时候,本质是每个周期都进行运算,所以每个周期都会有一个1、0的返回值
          rv2:=Close>=10;
          
          1. Ít hơn bằng<=
          此处省略
          
          1. =
          A:=O=C;     // 判断开盘价是不是等于收盘价。
          
          1. Không bằng<>
          1<>2       // 判断1是否不等于2,返回值为1(true)
          
      • Các toán tử logic

        Trả về giá trị: Boolean, khôngtrue(1) làfalse(0)。

        1. Lý thuyết và&&Bạn có thể sử dụngandThay vào đó, hai bên phải được thành lập cùng một lúc với hai bên bên trái của kết nối.
        // 判断 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. logic hoặc||Bạn có thể sử dụngorThay thế hoặc liên kết ở hai bên trái, một bên là true, và tổng thể là true.
        cond_a:=1>2;
        cond_b:=4>3;
        cond_c:=5>6;
        cond_a || cond_b or cond_c;    // 返回值为1,成立
        
        1. ()Các toán tử tính toán trước các biểu thức trong ngoặc cổng.
        1>2 AND (2>3 OR 3<5)    // 运算结果为假
        1>2 AND 2>3 OR 3<5      // 运算结果为真
        
      • Các toán tử số

        返回值:数值类型
        

        Chữ ký hiệu toán học là ký hiệu để thực hiện các phép toán cơ bản (arithmetic operators), hoặc ký hiệu để xử lý các phép toán bốn phương.

        • +

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

          A:=2-1;      // 返回 1
          
        • Nhân *

          A:=2*2;      // 返回 4
          
        • Trừ /

          A:=4/2;      // 返回 2
          
    • Chức năng

      • Chức năng

        Trong thế giới lập trình, hàm hàm hàm là một đoạn mã thực hiện một chức năng nào đó. Nó có thể được gọi cho các mã khác, theo hình thức chung như sau:

        function(param1,param2,...)
        
        • Các thành viên:

          Tên chức năng (đối tượng 1, đối tượng 2,...) có thể không có tham số hoặc có nhiều tham số; ví dụ:MA(x,n);Đại diện trở lạinTrong chu kỳxTrong đó, các giá trị đơn giản là các giá trị trung bình di chuyển.MA()Đó là một hàm.xnĐó là các tham số của hàm.

          Khi sử dụng một hàm, chúng ta cần hiểu định nghĩa cơ bản của hàm, tức là các dữ liệu có thể được gọi cho hàm. Thông thường, các hàm đều có tham số, và khi chúng ta nhập tham số, chúng ta cần đảm bảo rằng loại dữ liệu được nhập là phù hợp.MA(x,n);Điều này có nghĩa là:

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

          Điều này rất không thân thiện với người mới bắt đầu. Tiếp theo, chúng ta sẽ phân tích kỹ lưỡng các hàm và cố gắng tìm ra một cách nhanh chóng để học, sử dụng các hàm.

      • Trả về giá trị

        Để nhanh chóng học các hàm, trước tiên chúng ta cần hiểu một khái niệm.Trở lạiTheo ý nghĩa của tên, nghĩa là "trở lại". Giá trị là "số lượng cụ thể", nghĩa là: dữ liệu có thể lấy được.

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

        Khái niệm quan trọng thứ hai của hàm thứ hai là các tham số, và các tham số khác nhau có thể được trả về các giá trị khác nhau.

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

        Các biến số trênma5ma10Các tham số đầu tiên củaXTất cảC(Giá đóng cửa), thực tếCNó cũng là một hàm (được sử dụng để trả về chuỗi giá đóng cửa từ đầu đến nay), nhưng nó không có tham số.MA()Các hàm, chúng ta muốn lấy đường trung bình di chuyển trong vài ngày của giá đóng cửa, qua các tham số, các hàm được sử dụng một cách linh hoạt hơn.

      • Cách học

          1. Trước tiên, chúng ta cần hiểu vai trò của hàm, nghĩa là hàm có thể trả lại cho chúng ta những dữ liệu nào.
          1. Và cuối cùng là tìm hiểu về loại giá trị trả về, sau khi tất cả chúng ta sử dụng các hàm để lấy giá trị trả về.
          1. Sau đó, chúng ta cần biết kiểu dữ liệu của các tham số.MA(x,n)Nếu bạn không biết các tham sốxnNếu bạn không có một số dữ liệu được trả về, bạn sẽ không có được một số dữ liệu được trả về.

        Các chức năng sau đây được giới thiệu, sử dụng và tuân theo 3 nguyên tắc trên.

    • Sự tăng cường ngôn ngữ

      • 麦语言JavaScriptLập trình hỗn hợp ngôn ngữ

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

          scopeCác đối tượng có thể thêm thuộc tính và gán chức năng ẩn danh cho thuộc tính, trong phần mã của ngôn ngữ Ma bạn có thể gọi chức năng ẩn danh tham chiếu thuộc tính này.

        • scope.getRefs(obj)Chức năng

          TrongJavaScriptTrong đoạn mã, gọiscope.getRefs(obj)Chức năng trả về truyền vàoobjDữ liệu của đối tượng.

          Dưới đây:%% %%Chữ ký hiệu bao bọcJavaScriptTrong mã sẽ được lấy từ mã của ngôn ngữ MaTEST(C)Dữ liệu được truyền vào khi gọi hàmCGiá đóng cửa.scope.getRefsChức năng này sẽ trả về tất cả giá đóng của dữ liệu trên đường K.throw "stop"Phương pháp ngắt. Vì vậy, biếnarrChỉ bao gồm giá đóng cửa của Bar đầu tiên. Bạn có thể thử xóathrow "stop"sẽ được thực hiện.JavaScriptMã cuối cùngreturn, trả về tất cả dữ liệu giá đóng cửa.

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

          TrongJavaScriptTruy cập vào tất cả các thanh K trong khối mã.

          TESTChức năng trả về một số. 1 là âm đạo, 0 là mặt trời.

          %%
          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

          TrongJavaScriptTrong đoạn mã, truy cập vào bar hiện tại.

          Tính toán giá trung bình từ giá cao đến giá thấp.

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

          Nhìn vào dữ liệu sâu về thị trường (đơn vị đặt hàng thấp).

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

          Nhận chuỗi tên đối với giao dịch hiện tại.

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

          Nhận vị trí K-bar.

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

          Chức năng này được sử dụng để lấy các biến trong phần mã của ngôn ngữ Mac.

          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

          canTradeThẻ thuộc tính hiện tại có thể giao dịch hay không ((Bar hiện tại không phải là cuối cùng)

          Ví dụ như đánh giá khi chiến lược được in dữ liệu thị trường khi có thể giao dịch.

          %%
          scope.LOGTICKER = function() {
              if(exchange.IO("status") && scope.canTrade){
                  var ticker = exchange.GetTicker();
                  if(ticker){
                      Log("ticker:", ticker);
                      return ticker.Last;
                  }
              }
          }
          %%
          LASTPRICE..LOGTICKER;
          
      • Ví dụ:

        %%
        scope.TEST = function(a){
            if (a.val) {
                throw "stop"
            }    
        }
        %%
        O>C,BK;
        C>O,SP;
        TEST(ISLASTSP);
        

        Khởi mở, dừng chiến lược sau khi ngang hàng.

    • Địa chỉ đa chu kỳ

      Hệ thống sẽ tự động chọn một chu kỳ K-lớp dưới phù hợp và tổng hợp tất cả các dữ liệu K-lớp tham chiếu với dữ liệu chu kỳ K-lớp dưới này để đảm bảo độ chính xác của dữ liệu.

      • Sử dụng:#EXPORT 公式名 ... #ENDTạo một công thức. Nếu bạn không tính toán công thức chỉ để lấy dữ liệu từ các chu kỳ khác nhau, bạn cũng có thể viết công thức trống.

        Công thức trống là:

        #EXPORT TEST 
        NOP;
        #END           // 结束
        
      • Sử dụng:#IMPORT [MIN,周期,公式名] AS 变量值Công thức tham chiếu: lấy dữ liệu về các chu kỳ được đặt (giá đóng, giá mở, v.v., lấy qua các giá trị biến).

        IMPORTtrong lệnhMINCó nghĩa làCấp độ phútCác nhà phát minh đã tạo ra một nền tảng định lượng ngôn ngữ Ma.IMPORTChỉ hỗ trợ trong lệnhMINCác cấp. Bây giờ đã hỗ trợ các chu kỳ phi tiêu chuẩn, ví dụ như sử dụng#IMPORT [MIN,240,TEST] AS VAR240Nhập dữ liệu như đường K trong vòng 240 phút (tương tự 4 giờ).

        Ví dụ về mã:

        // 本代码演示如何引用不同周期的公式在同一代码里
        // #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;
        
      • Sử dụng để tham khảo dữ liệu đa chu kỳREFLLVHHVDữ liệu tham chiếu chỉ dẫn cần chú ý

        (*backtest
        start: 2021-08-05 00:00:00
        end: 2021-08-05 00:15:00
        period: 1m
        basePeriod: 1m
        exchanges: [{"eid":"Futures_OKCoin","currency":"ETH_USD"}]
        args: [["TradeAmount",100,126961],["ContractType","swap",126961]]
        *)      
        
        %%
        scope.PRINTTIME = function() {
            var bars = scope.bars;
            return _D(bars[bars.length - 1].Time);
        }
        %%
        BARTIME:PRINTTIME;      
        
        #EXPORT TEST 
        REF1C:REF(C,1);
        REF1L:REF(L,1);
        #END // 结束      
        
        #IMPORT [MIN,5,TEST] AS MIN5
        INFO(1, 'C:', C, 'MIN5.REF1C:', MIN5.REF1C, 'REF(MIN5.C, 1):', REF(MIN5.C, 1), '触发BAR时间:', BARTIME, '#FF0000');
        INFO(1, 'L:', L, 'MIN5.REF1L:', MIN5.REF1L, 'REF(MIN5.L, 1):', REF(MIN5.L, 1), '触发BAR时间:', BARTIME, '#32CD32');
        AUTOFILTER;
        

        So sánhMIN5.REF1CREF(MIN5.C, 1)Có thể thấy sự khác biệt:MIN5.REF1Clà giá trị của giá đóng cửa của BAR thứ hai là số tích cực của dữ liệu K-line 5 phút tại thời điểm hiện tại.REF(MIN5.C, 1)là chu kỳ đường K của mô hình hiện tại (được đặt chu kỳ kiểm tra lại mã trên là 1 phút, tức làperiod: 1m), là giá đóng cửa của chu kỳ 5 phút, trong đó là giá bán của BAR thứ hai là con số âm của thời điểm hiện tại. Hai định nghĩa này có sự khác biệt và có thể được sử dụng tùy theo nhu cầu.

    • Mô hình mô tả

      • Mô hình lọc tín hiệu ngang nhau

        Nhập vào mô hìnhAUTOFILTERChức năng điều khiển và thực hiện lọc tín hiệu một cách đồng bộ, khi có nhiều tín hiệu mở giao dịch đều đáp ứng điều kiện, lấy tín hiệu đầu tiên là tín hiệu hiệu quả, và tín hiệu tương tự trên đường k sau đó sẽ được lọc.

        Các chỉ thị được hỗ trợ bởi mô hình lọc: BK, BP, BPK, SK, SP, SPK, CLOSEOUT, không hỗ trợ các chỉ thị có dấu chấm như BK ((5)).

        Ví dụ:

        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线触发一次信号。
        
      • Mô hình tăng giảm

        Không được ghi trong mô hìnhAUTOFILTERChức năng cho phép liên tục phát ra tín hiệu mở hoặc liên tục phát ra tín hiệu hòa vốn, có thể thực hiện tăng hoặc giảm giá.

        Chỉ thị được hỗ trợ: BK ((N) BP ((N) SK ((N) SP ((N) CLOSEOUT BPK ((N)) SPK ((N) ), không hỗ trợ chỉ thị mở giao dịch không có số tay. (1) Hỗ trợ nhóm lệnh. (2) Khi nhiều điều kiện chỉ thị được đáp ứng cùng một lúc, các tín hiệu được thực hiện theo thứ tự trước sau được viết theo câu lệnh điều kiện. Ví dụ:

        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);
        

        Sử dụngTRADE\_AGAINBạn có thể cho phép cùng một dòng lệnh phát ra nhiều tín hiệu liên tục.

        理解:
        以上例子,逐个信号执行,执行后的信号不再触发。平仓后重置模型状态。一个K线触发一次信号。
        
      • Một mô hình của một tín hiệu K

        Bất kể đường k đi hay không, việc tính toán tín hiệu sẽ được thực hiện trong thời gian thực, tức là đặt trước khi đường K đi; kiểm tra lại khi kết thúc đường K, nếu hướng giữ không phù hợp với hướng tín hiệu khi kết thúc đường k, lệnh sẽ được đồng bộ hóa tự động.

        Ví dụ:

        MA1:MA(CLOSE,5);
        MA2:MA(CLOSE,10);
        CROSSUP(MA1,MA2),BPK;    // 5周期均线上穿10周期均线做多。
        CROSSDOWN(MA1,MA2),SPK;  // 5周期均线下穿10周期均线做空。
        AUTOFILTER;
        
      • Mô hình của một tín hiệu nhiều đường K

        Mô hình bằng cách sử dụngmultsigĐể điều khiển và thực hiện nhiều tín hiệu từ một đường dây K.

        Tuy nhiên, việc đặt hàng trong thời gian thực sẽ được thực hiện ngay cả khi đường k kết thúc.

        Các tín hiệu không được kiểm tra lại, không có tình huống mất tín hiệu, hướng tín hiệu luôn phù hợp với hướng giữ.

        Một đường K có thể được thực hiện nhiều lần nếu đáp ứng nhiều điều kiện tín hiệu.

        例如:
        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);
        

        MULTSIGCó thể thực hiện nhiều dòng lệnh khác nhau trong một dòng K. Một dòng lệnh chỉ phát ra một tín hiệu một lần.

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

        Tóm lại: Trong mô hình giảm giá, một tín hiệu trên một đường k có hai cách: đặt hàng giá đóng cửa, đặt hàng giá chỉ thị, đều được hỗ trợ. 2, thêm mô hình giảm lưu trữ, cũng hỗ trợ một k-line nhiều lần báo hiệu. Mô hình gia tăng và giảm kho, viếtmultsigCác hàm, thực hiện nhiều lần xếp hàng trên một đường k, hoặc nhiều lần giảm xếp hàng.

    • Phương thức thực hiện

      img

      • Mô hình giá đóng cửa

        Mô hình giá đóng là mô hình thực hiện trước khi BAR hiện tại kết thúc và thực hiện giao dịch khi BAR dưới bắt đầu.

      • Mô hình giá thời gian thực

        Mô hình giá thời gian thực là mô hình được thực hiện mỗi lần thay đổi giá và giao dịch ngay lập tức nếu có tín hiệu. Mô hình giá thực không quan tâm đến tín hiệu của ngày trước ( tín hiệu của ngày trước được thực hiện ngay lập tức vào ngày trước), mô hình giá thực chỉ xem dữ liệu thị trường hiện tại để phán đoán liệu có kích hoạt tín hiệu hay không.

    • Biểu đồ cho thấy

      • Biểu đồ thêm các chỉ số

        Sử dụng toán tử^^, trong khi gán cho các biến, các chỉ số thiết lập được hiển thị trên sơ đồ chính.

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

        img

      • Biểu đồ thêm các chỉ số

        Sử dụng toán tử:, trong khi gán cho biến, các chỉ số được hiển thị trên biểu đồ phụ.

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

        img

        Nếu bạn không muốn nó xuất hiện trên hình chủ đề hoặc hình phụ, hãy sử dụng thao tác ....

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

        img

        Có thể sử dụngDOTCOLORREDĐặt kiểu chữ, màu sắc, v.v., phù hợp với thói quen của người dùng quen thuộc với tiếng Ma.

    • Câu hỏi thường gặp

      Thông tin về các vấn đề thường gặp trong quá trình viết các chỉ sốVấn đềMột số người cho rằng việc viết một bài viết là một vấn đề quan trọng trong quá trình viết.

      • Hãy chú ý số điểm.;Kết thúc.

      • Lưu ý rằng từ khóa hệ thống không thể được sử dụng như một tuyên bố biến.

      • Chú ý đến việc sử dụng chuỗiDấu đơnVí dụ:'开仓'Dòng chữ này.

      • Phản hồi

        Chữ chú thích

        • // 注释内容Có thể nhập bằng tiếng Anh, đại diện cho mã không được biên dịch trong quá trình thực thi, nghĩa là không thực hiện.//Các nội dung sau, thường chúng ta sử dụng để đánh dấu ý nghĩa của mã, giúp dễ dàng đọc lại mã, nhanh chóng hiểu và nhớ.

        • { 注释内容 }Các bài viết trên trang web của chúng tôi được đăng tải trên Facebook.

          A:=MA(C,10);
          {上一行代码是计算均线。}
          
        • (* 注释内容 *)Các bài viết trên trang web của chúng tôi được đăng tải trên Facebook.

          A:=MA(C,10);
          (*上一行代码是计算均线。*)
          
      • Phương thức nhập

        Trong quá trình viết mã, thường có lỗi ký hiệu do chuyển đổi tiếng Anh trong cách nhập.:Chữ kết thúc;Dấu chấm,()Những ký tự khác nhau trong tiếng Anh Trung Quốc cần chú ý.

        Nếu bạn sử dụng tìm kiếm, Baidu, Bing, bạn có thể nhập bằng cách nhấn một lần.shiftCác công cụ này được sử dụng trong các chương trình truyền hình và truyền hình.

      • Lý thuyết dễ sai

        1. Ít nhất, ít nhất, ít nhất: các toán tử tương ứng>=
        2. Tối đa, tối đa, không quá: các toán tử tương ứng<=
      • Chiến lược bắt đầu đồng bộ hóa

        Trong chiến lược tương lai, nếu trước khi robot chiến lược bắt đầu, có vị trí được nắm giữ bằng tay, robot sẽ bắt đầu, sẽ phát hiện thông tin nắm giữ, đồng bộ với tình trạng nắm giữ thực tế. Bạn có thể sử dụng nó trong chiến lược.SPBPCLOSEOUTChỉ thị đặt hàng.

        %%
        if (!scope.init) {
            var ticker = exchange.GetTicker();
            exchange.Buy(ticker.Sell+10, 1);
            scope.init = true;
        }
        %%
        C>0, CLOSEOUT;
        
      • Không hỗ trợ nắm giữ hai chiều

        Ngôn ngữ Ma không hỗ trợ cùng một hợp đồng, cùng một lúc có nhiều chỗ trống.

  • Dữ liệu K-line tham khảo

    • Mở

      Giá mở cửa để có được biểu đồ đường dây K.

      Giá mở cửa

      Chức năng: OPEN, viết tắt là O

      Các tham số: không

      Giải thích: Trở lại giá khởi điểm của "chu kỳ"

      Dữ liệu chuỗi

      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简写)。
      
    • cao

      Có giá cao nhất cho K-phim.

      Giá cao nhất

      HIGH, viết tắt là H

      Các tham số: không

      Giải thích: Trở lại giá cao nhất trong chu kỳ

      Dữ liệu chuỗi

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

      Giá thấp nhất cho K-Thread.

      Giá thấp nhất

      Chức năng: LOW, viết tắt là L

      Các tham số: không

      Giải thích: Trở lại giá thấp nhất trong chu kỳ

      Dữ liệu chuỗi

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

      Có giá đóng cửa của K-Thread.

      Giá đóng cửa

      Chức năng: CLOSE, viết tắt là C

      Các tham số: không

      Giải thích: Trở lại giá đóng cửa "chu kỳ này"

      Dữ liệu chuỗi

      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

      Số lượng giao dịch đạt được trên K-Thread Graph.

      Số lượng giao dịch

      Chức năng: VOL, viết tắt là V

      Các tham số: không

      Giải thích: Trả về số lượng giao dịch trong chu kỳ

      Dữ liệu chuỗi

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

      Lấy tổng số cổ phiếu trên thị trường tương lai hiện tại.

      OpenInterest:OPI;
      
    • REF

      Đọc thêm:

      引用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

      Các đơn vị giao dịch đã ký hợp đồng dữ liệu.

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

      Tiền mặt kỹ thuật số

      Giá trị UNIT là 1⁄2.

      Tiền tương lai tiền kỹ thuật số

      Giá trị UNIT liên quan đến đồng tiền hợp đồng.

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

      Giá thay đổi tối thiểu của hợp đồng dữ liệu.

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

      Giá thay đổi tối thiểu của hợp đồng giao dịch.

      取交易合约的最小变动价位。
      用法:
      MINPRICE1; 取交易合约的最小变动价位。
      
  • Chức năng thời gian

    • BARPOS

      Chọn vị trí của đường K.

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

      DAYBARPOS nếu gốc K-line BAR là K-line BAR thứ mười trong ngày.

    • Thời gian

      Giá trị chu kỳ là số phút.

      1, 3, 5, 15, 30, 60, 1440
      
    • Ngày

      NgàyChức năng DATE, lấy ngày tháng của chu kỳ kể từ năm 1900.

      例1:
      AA..DATE;                  // 测试时AA的值为220218,表示2022年2月18日
      
    • Thời gian

      Thời gian của đường 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;
      
    • Năm

      Năm tháng.

      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);
      
    • Tháng

      Nhận tháng.

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

      Số ngày đạt được một chu kỳ

      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
      
    • Giờ

      Giờ đây.

      HOUR,返回某周期的小时数。
      
      注:
      HOUR的取值范围为0—23
      
      例1:
      HOUR=10;                                   // 在10:00的K线上返回值为1,其余K线上返回值为0
      
    • 1 phút

      Một phút.

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

      Số tuần được lấy.

      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;
      
  • Chức năng phán đoán logic

    • BARSTATUS

      Trở lại trạng thái vị trí của chu kỳ hiện tại.

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

      Các bạn có thể tham gia vào chương trình này.

      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日均线之间
      
    • Barslastcount

      BARSLASTCOUNT ((COND)) tính toán từ chu kỳ hiện tại trở đi, thống kê số chu kỳ liên tục đáp ứng các điều kiện.

      注:
      1、返回值为从当前周期计算COND连续不为0的周期数
      2、条件第一次成立的当根k线上BARSLASTCOUNT(COND)的返回值为1
      
      例:
      BARSLASTCOUNT(CLOSE>OPEN);
      //计算当根K线在内连续为阳线的周期数
      
    • Chữ chéo

      Các hàm chéo.

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

      Bước xuống

      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

      Đang đi qua.

      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;表达同等意义
      
    • Tất cả

      Những người dân Việt Nam đang sống trong tình trạng khó khăn.

      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;表达同等意义
      
    • Có tồn tại

      Một số người cho rằng, "Điều này là một điều vô cùng quan trọng".

      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
      
    • Nếu

      Chức năng điều kiện.

      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

      Chức năng điều kiện.

      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死叉作为开空仓条件
      
    • Hợp đồng

      Có hợp đồng nào được chỉ định không.

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

      Hỗ trợ biểu thức chính thức.

      Đánh giá hợp đồng

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

      Xác định tên sàn giao dịch

      ISCONTRACT('@Futures_(Binance|FTX)');       // 判断当前交易所对象是否为Binance期货或者FTX期货
      ISCONTRACT('@(OKEX|Bitfinex)');             // 判断交易所,需要在开头加@字符
      
    • Bỏ xuống

      Vòng âm đạo.

      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

      Bàn phẳng.

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

      Xác định xem chu kỳ này có phải là đường K cuối cùng hay không.

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

      Xác định giá trị trống.

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

      Mặt trời.

      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
                               // 表达同等意义
      
    • Cuối cùng

      Xác định hàm.

      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
      
    • Chân dài

      Cung cấp hàm chéo.

      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日均线
      
    • Không

      Không.

      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

      Trả về giá trị trống.

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

      Lấy giá trị.

      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,说明当天不满足跳空高开条件
      
  • Chức năng thực hiện vòng lặp

    • Loop2

      Chức năng điều kiện vòng lặp.

      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;
      
  • Chức năng thống kê tài chính

    • BARSCOUNT

      Số chu kỳ hiệu lực đầu tiên đến số chu kỳ hiện tại.

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

      Điều kiện được thiết lập ở vị trí cuối cùng.

      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线根数
      

      Giải thíchBARSLASTChức năng:

      • 1, trả về 0 nếu các điều kiện của dòng K hiện tại được thực hiện.
      • 2, nếu không thành lập sẽ đi ngược lại cho đến khi tìm thấy đường K mà điều kiện thành lập, trả về một số chu kỳ ngược lại.
      • 3, trả về giá trị không hợp lệ nếu không tìm thấy đường K mà điều kiện được tạo ra.
    • Barsince

      Điều kiện thứ nhất được thiết lập cho đến số chu kỳ hiện tại.

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

      Điều kiện đầu tiên trong chu kỳ thống kê N được thiết lập cho số chu kỳ hiện tại.

      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

      Nhận được số chu kỳ giữa các đường K đáp ứng gần nhất các điều kiện A, B.

      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周期均线之间的周期数
      
    • Đếm

      Số liệu thống kê.

      COUNT(COND,N),统计N周期中满足COND条件的周期数。
      
      注:
      1、N包含当前k线。
      2、若N为0则从第一个有效值算起。
      3、当N为有效值,但当前的k线数不足N根,从第一根统计

Thêm nữa

Chỉ số giao dịch cao cấp 98K-seriesK-line đi qua j1 điểm mặt trời lên j1 sau đó quay lại và nhấn vào j1 để mở khóa, nhưng khi có thể truy cập lại, nhưng ở vị trí âm đạo mà không đứng trên j1 cũng mở khóa. D1:=if (jk <0 && CROSS ((close,j1) and CLOSE>OPEN and close>j1,j1,0); D1,BK; /upload/asset/2af6fee 82ea8bb3725687.png

Chỉ số giao dịch cao cấp 98K-seriesTrong nước, các nền tảng giao dịch yêu thích có một thư viện các chức năng của ngôn ngữ Ma, không biết liệu có thể tương thích sau này, giống như các chức năng trên Compatible TradingView, các chiến lược chỉ số hai bên như vậy có thể được chuyển trực tiếp đến nhà phát minh và định lượng.

Chỉ số giao dịch cao cấp 98K-seriesisLast ((x) Phương thức: Xác định liệu dữ liệu hiện tại có phải là dữ liệu cuối cùng.

wanghehe711@qq.comNgôn ngữ Ma có thể thực hiện một nền tảng đa dạng không?

Nó là kem.Nếu bạn muốn gắn MARK, bạn có cần Java hay Python để gắn nó không?

MâyNgôn ngữ Mac có hỗ trợ hợp đồng OKEX không? Có thể truy cập API hợp đồng OKEX không?

Giấc mơ nhỏĐược rồi, nhìn qua đây nhé.

Giấc mơ nhỏHiện tại, lệnh isLast không được hỗ trợ

Giấc mơ nhỏNgôn ngữ Ma là một chiến lược đơn nền tảng, chỉ có thể vận hành một giống, một tài khoản.

Giấc mơ nhỏThiết kế như vậy khá phức tạp, nên sử dụng JS, PY để viết chính sách nếu bạn đang sử dụng chính sách đính kèm.

Giấc mơ nhỏCác công ty có thể sử dụng các hợp đồng OKEX.