Изобретатель Quantified Mylang Документация

Создано: 2018-11-30 13:29:33, Обновлено: 2022-12-09 17:46:10
comments   24
hits   35602

[TOC]

Язык My - это программируемый язык для транзакций, совместимый и дополненный с языком Mac. Язык My с количественным FMZ проходит строгие грамматические проверки, например, при использовании языковых усовершенствований для встраивания языкового кода JavaScript, в%%Если после оператора будет больше одного пустого символа, то возникнет ошибка.

  • Основные сведения

    • ## договор

    Контракт на цифровую валюту

    Контракт на цифровую валюту

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

    Изобретатель Quantified Mylang Документация

    • ## Переменные

    Переменная - это пространство, открытое в памяти компьютера для хранения данных.

    Открытие первой переменной

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

    существовать麦语言Из, из数据量Простые различия:

    1. Однозначные данные: только одно значение, например01’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-линий.

    • ### Правила наименования

    В большинстве систем именение переменных не позволяет использовать системную коробку с сохранением символов (встроенные имена переменных, имена функций).CloseCКроме того, не допускаются чистые числа или цифры в начале. Не допускаются длинные концы, ограничения по длине различных систем различаются. На самом деле, вам не нужно путать эффективность анализа китайского языка с преобладающей системой, и верьте, что язык муки муки очень дружелюбен к китайскому языку.

     1. Китайское название
    
      // 优雅的输出
      五日均线:=MA(C,5);
    
     2. Английский + подчеркнуто
    
      // 输出
      move_avg_5:=MA(C,5);
    

    Если вы предпочитаете английский, постарайтесь, чтобы ваши вариации были понятны.A1AAABBB…название такого рода. Поверьте мне, когда через какое-то время вы снова просмотрите свой индикаторный код, вам будет очень больно из-за отсутствия памяти. Точно так же, когда вы экспортируете код другим людям, настроение читателя должно быть разрушено.

    Поэтому, начиная с сегодняшнего дня, мы приветствуем язык макаронной муки, и надеемся, что он станет для вас мощным инструментом анализа и принятия решений.

    • ## Типы данных

    Тип данных является базовым понятием, и в программировании, когда мы присваиваем определенное значение данным к переменной, эта переменная также становится типом самой данной.

    • 1. Типы значений:
      1、2、3、1.1234、2.23456 ...
    
    • 2. Тип строки ((str):
      '1' 、'2' 、'3' ,字符串类型必须用 '' 包裹
    
    • 3. Данные последовательности:
      一系列单值数据构成的数据集合
    
    • 4. Булевой тип:

    Использование1Представительствоtrue0Представительствоfalse

    Пример

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

    Используется для выполнения операций, вычислений кода индикатора, проще говоря, это символ, участвующий в операциях.

    • ### Оператор присвоения

    Используется для присвоения значения некоторой переменной

     - 1. `:`
    
    
    `:`, представляет собой присвоение значения и выводится на график (подграфик).
    
    
    ```
    Close1:Close;      // 将Close赋值给变量Close1,并且输出到图中
    ```
    
     - 2. `:=`
    
    
    `:=`, означает присвоение значения, но не выводится на график (главный график, подграфик...) и не отображается в таблице состояния.
    
    
    ```
    Close2:=Close;     // 将Close赋值给变量Close2
    ```
    
     - 3. `^^`
    
    
    `^^`Два.`^`Символ представляет собой присвоение значения, присвоение значения переменной и вывод на график (в материнский график).
    
    
    ```
    lastPrice^^C;
    ```
    
     - 4. `..`
    
    
    `..`Два.`.`Символ представляет присвоение значения, присваивает значение переменной и отображает имя переменной, числовое значение в графике, но не рисует график в графике (главный график, подграфик ...).
    
    
    ```
    openPrice..O
    ```
    
    • ### Оператор относительности

    Оператор связи - двоичный оператор, используемый в условных выражениях для определения связи между двумя данными.

    Возвращает значение: тип Бура, неtrue1) этоfalse(0)。

     - 1. Больше чем`>`
    
    
    ```
    // 将2>1的运算结果赋值给rv1变量,此时rv1=1
    rv1:=2>1;
    ```
    
     - 2. меньше`<`
    
    
    ```
    // 返回false,也就是0,因为2大于1
    rv3:=2<1;
    ```
    
     - 3. Больше, чем равно`>=`
    
    
    ```
    x:=Close;
    // 将收盘价大于等于10的运算的结果赋值给变量rv2
    // 注意,由于close是一个序列数据,当进行close>=10运算的时候,本质是每个周期都进行运算,所以每个周期都会有一个1、0的返回值
    rv2:=Close>=10;
    ```
    
     - 4. меньше, чем равно`<=`
    
    
    ```
    此处省略
    ```
    
     - 5. равный`=`
    
    
    ```
    A:=O=C;     // 判断开盘价是不是等于收盘价。
    ```
    
     - 6. Не равняется`<>`
    
    
    ```
    1<>2       // 判断1是否不等于2,返回值为1(true)
    ```
    
    • ### Логические операторы

    Возвращает значение: тип Бура, неtrue1) это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,成立
    
     2. Логика или`||`, можно использовать`or`Замена или ссылка с правой и левой стороны, с одной стороны установлена ((true), а в целом установлена ((возвращает значение true) }}.
    
      cond_a:=1>2;
      cond_b:=4>3;
      cond_c:=5>6;
      cond_a || cond_b or cond_c;    // 返回值为1,成立
    
     3. `()`Оператор, который вычисляет выражения в скобках.
    
      1>2 AND (2>3 OR 3<5)    // 运算结果为假
      1>2 AND 2>3 OR 3<5      // 运算结果为真
    
    • ### Оператор
      返回值:数值类型
    

    Арифметические операторы - это символы, используемые для выполнения основных арифметических операций.

     - **С +**
    
    
    ```
    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`Это параметры функции.
    
    
    Когда мы используем функции, нам нужно знать их основные определения, то есть, какие данные можно получить при их вызове. Обычно функции содержат параметры, и когда мы вводим параметры, нам нужно убедиться, что вводимый тип данных соответствует.`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);
    

    Переменные вышеma5ma10Первый параметрXОбаC(Цена закрытия), фактическиCТакже считается функция ((возвращает последовательность цен на открытие и закрытие на сегодняшний день), только она не имеет параметров. Второй параметр 5 и 10, который используется для указанияMA()Функция, которую мы собираемся получить, это скользящая средняя за несколько дней по цене закрытия, и с помощью параметров функция становится более гибкой.

    • Как учиться

      • 1. Во-первых, нам нужно понять, что такое функция, и какие данные она может дать нам.
      • 2. И, наконец, мы узнаем тип возвращаемого значения, потому что мы используем функцию для получения возвращаемого значения.
      • 3. Во-вторых, нам нужно знать, какого типа данные для параметров.MA(x,n)Если не знать параметры,xnЕсли вы используете данные типа “С”, то не сможете получить верную величину.

    Функции, представленные и используемые в последующем, следуют трем принципам, описанным выше.

    • Языковые усилия

      • 麦语言иJavaScriptСмешанное программирование
      %%
      // 这里面可以调用发明者量化的任何API 
      scope.TEST = function(obj) {
          return obj.val * 100;
      }
      %%
      收盘价:C;
      收盘价放大100倍:TEST(C);
      上一个收盘价放大100倍:TEST(REF(C, 1)); // 鼠标移动到回测的K线上就会提示变量值
    
     - `scope`Объекты
    
    
    `scope`Объекты могут добавлять свойства и присваивать им функции анонимности, которые могут быть вызваны в части кода языка Mac.
    
     - `scope.getRefs(obj)`функция
    
    
    существовать`JavaScript`В блоке кода, вызов`scope.getRefs(obj)`Функция возвращает входящие`obj`Данные объекта.
    
    
    Ниже`%%  %%`Символическая упаковка`JavaScript`В коде будет доступен языковой код Mac`TEST(C)`Функция при вызове`C`Заключительная цена
    `scope.getRefs`Функция возвращает все конечные значения данного K-линия.`throw "stop"`Прекратить процедуру.`arr`Включает в себя только конечную цену первого бара. Можно попробовать удалить`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-строкам в блоке.
    
    
    `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')
    
    
    Эта функция используется для получения переменных в части кода языка 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
    
    
    `canTrade`Знак атрибута "Можно ли торговать в настоящее время?" (было ли текущее Bar последним корнем)
    
    
    Например, для определения, когда стратегия находится в состоянии, когда можно торговать заказами печати текущих данных
    
    
    ```
    %%
    scope.LOGTICKER = function() {
        if(exchange.IO("status") && scope.canTrade){
            var ticker = exchange.GetTicker();
            if(ticker){
                Log("ticker:", ticker);
                return ticker.Last;
            }
        }
    }
    %%
    LASTPRICE..LOGTICKER;
    ```
    
    • Примеры применения:
      %%
      scope.TEST = function(a){
          if (a.val) {
              throw "stop"
          }    
      }
      %%
      O>C,BK;
      C>O,SP;
      TEST(ISLASTSP);
    

    Открытие позиции, ликвидация позиции и остановка стратегии.

    • ## Многоциклические ссылки

    Система автоматически выбирает подходящий период нижней K-линии и использует этот период нижней K-линии для синтеза всех цитируемых данных K-линии, обеспечивая точность данных.

    • Использование:#EXPORT 公式名 ... #ENDСоздание формулы. Если вы не используете формулу для вычисления данных только для получения данных о различных периодах, вы можете написать формулу в пустом виде.

    Пустая формула:

      #EXPORT TEST 
      NOP;
      #END           // 结束
    
    • Использование:#IMPORT [MIN,周期,公式名] AS 变量值Ссылка на формулу. Получение различных данных за установленный цикл (закрытие, открытие и т. д., полученные с помощью значения переменных).

    IMPORTВ приказеMINЭто значитМинутный уровень│ │ │ │ │ │ │IMPORTПоддержка только в командеMINВ настоящее время поддерживаются нестандартные циклы, например,#IMPORT [MIN,240,TEST] AS VAR240Импорт данных типа 240-минутного цикла ((4 часа) K-линии。

    Пример:

      // 本代码演示如何引用不同周期的公式在同一代码里
      // #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;
    
    • Используется при многоциклических ссылках на данныеREFLLVHHVПримечание: инструкция ссылается на данные
      (*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;
    

    СравнениеMIN5.REF1CиREF(MIN5.C, 1)В отличие от этого, можно заметить: MIN5.REF1Cявляется завершающим значением второго BAR в обратном отсчете на текущий момент данных 5-минутной K-линии. REF(MIN5.C, 1)является K-линейный цикл текущей модели ((вышеуказанный цикл отслеживания кода установлен на 1 минуту, т.е.period: 1m), заканчивающийся ценой 5-минутного цикла, где BAR является вторым обратным счетом текущего момента. Эти два определения отличаются друг от друга и могут использоваться в зависимости от потребностей.

    • Описание модели

      • ### Модель фильтрации сигналов

    В модели записывается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), SP (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-линии.

    • ## Режим исполнения

    Изобретатель Quantified Mylang Документация

    • ### Модель цены закрытия

    При модели закрытия цены, текущий BAR заканчивается, а сделка выполняется в начале следующего BAR.

    • ### Модель цен в реальном времени

    Модель цены в реальном времени означает, что при каждом изменении цены модель выполняется один раз, и торговля происходит сразу же после получения сигнала. Модель цены в реальном времени игнорирует сигнал предыдущего дня (сигнал предыдущего дня выполняется в предыдущий день), модель цены в реальном времени рассматривает только текущие данные, чтобы определить, был ли вызван сигнал.

    • График показывает

      • ### Дополнительные показатели

    Использование оператора^^, настройка показателя отображается на главной карте, в то время как переменной присваивается значение.

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

    Изобретатель Quantified Mylang Документация

    • ### Дополнительные показатели

    Использование оператора:, При присвоении значения переменной, настройка показателя отображается на поддиаграфе.

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

    Изобретатель Quantified Mylang Документация

    Если вы не хотите, чтобы это отображалось на главной картинке или на подкартинке, используйте оператор “..”

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

    Изобретатель Quantified Mylang Документация

    ДоступноDOTCOLORREDУстройство линий, их цвета и т.д. соответствует привычкам пользователей, знакомых с языком Mac.

    • ## Часто задаваемые вопросы

    Ознакомьтесь с основными проблемами, с которыми сталкиваются разработчикиВопрос, что обычно требует особого внимания при написании ((постоянное дополнение) }}.

    • Примечание о знаках;Заключение.

    • Примечание: Ключевые слова системы не могут быть объявлены в качестве переменных.

    • Осторожно с использованием строкиОднозначные цитаты,Например:'开仓'Эта строка.

    • Примечание

    Комментарии

     - `// 注释内容`(англ. typing in the input method), означает, что код не компилируется во время выполнения, то есть не выполняется`//`Последующий текст, который мы обычно используем для обозначения значения кода, может быть быстро понят и запомнен при просмотре кода.
    
     - `{ 注释内容 }`Комментарии к блоку
    
    
    ```
    A:=MA(C,10);
    {上一行代码是计算均线。}
    ```
    
     - `(* 注释内容 *)`Комментарии к блоку
    
    
    ```
    A:=MA(C,10);
    (*上一行代码是计算均线。*)
    ```
    
    • ### Входные данные

    При написании кода, часто из-за переключения ввода на английский язык, возникают символические ошибки.:Конец.;Запятая,В скобках()И так далее, обратите внимание на различные символы в китайском и английском языках.

    Если вы используете поисковые системы Google, Baidu или Bing, вы можете сделать это, нажав один клик.shiftКнопка для быстрого переключения на китайский и английский.

    • Логика ошибок

      1. Не менее, не меньше, не меньше: соответствующий оператор относительности>=
      2. Максимально, максимум, не более: соответствующий оператор относительности<=
    • Политика запуска синхронизации

    В фьючерсной стратегии, если до запуска робота стратегии, имеется ручное открытие позиции, занимаемой позиции, то при запуске робот будет обнаруживать информацию о позиции, синхронизирующуюся с фактическим состоянием позиции. Это может быть использовано в стратегии.SPBPCLOSEOUTПриказ о ликвидации боевых действий

      %%
      if (!scope.init) {
          var ticker = exchange.GetTicker();
          exchange.Buy(ticker.Sell+10, 1);
          scope.init = true;
      }
      %%
      C>0, CLOSEOUT;
    
    • ### Не поддерживает двунаправленную позицию

    Mac не поддерживает одни и те же контракты, при этом имеет много свободных позиций.

  • Ссылки на данные 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的简写)
    
    • ## OPI

    Взять общий объем позиций на текущем рынке фьючерсов (контрактов).

    OpenInterest:OPI;
    
    • ## 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 будет равна 1.

    Криптовалютные фьючерсы

    Относится к контрактной валюте.

    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。
    
    • ## DAYBARPOS

    DAYBARPOS как корень K BAR как корень KBAR ≠ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈ ≈

    • ## PERIOD

    Цикл - количество минут.

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

    ДатаФункция DATE, получающая даты года, начиная с 1900 года.

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

    Время на линии К.

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