Что такое язык M? Так называемый язык M представляет собой набор программных функций, которые простираются от ранних технических индикаторов торговли акциями.
Он использует конструкционный режим "маленькая грамматика, большая функция", что значительно повышает эффективность программирования. Стратегия написания более 100 предложений на других языках может быть составлена всего несколькими строками на языках M. Библиотека финансовой статистики и структура данных в сочетании с инструментом FMZ Quant также могут поддерживать сложную логику торговли.
Чтобы помочь вам быстро понять ключевые знания этого раздела, прежде чем ввести язык FMZ Quant M, давайте сначала получим предварительное понимание понятия существительного этого раздела.
Открытая длинная позиция: если в настоящее время нет позиции, а цена закрытия больше, чем краткосрочная скользящая средняя, и цена закрытия больше, чем долгосрочная скользящая средняя, и краткосрочная скользящая средняя больше, чем долгосрочная скользящая средняя, и долгосрочная скользящая средняя растет.
Открытая короткая позиция: если в настоящее время нет позиции, а цена закрытия ниже, чем краткосрочная скользящая средняя, и цена закрытия ниже, чем долгосрочная скользящая средняя, и краткосрочная скользящая средняя ниже, чем долгосрочная скользящая средняя, и долгосрочная скользящая средняя падает.
Закрыть длинную позицию: если в настоящее время у вас длинная позиция, и цена закрытия меньше долгосрочной скользящей средней, или краткосрочная скользящая средняя меньше долгосрочной скользящей средней, или долгосрочная скользящая средняя падает.
Закрытие короткой позиции: если текущая позиция находится на короткой позиции, и цена закрытия больше, чем долгосрочная скользящая средняя, или краткосрочная скользящая средняя больше, чем долгосрочная скользящая средняя, или долгосрочная скользящая средняя растет.
Если написать на языке М, это будет:
MA10:=MA(CLOSE,10); // Get the 10-cycle moving average of the latest K-line and save the result in variable MA10
MA50:=MA(CLOSE,50); // Get the 50-cycle moving average of the latest K-line and save the result in variable MA50
MA10_1:=REF(MA10,1); //Get the 10-cycle moving average of the pervious K line and save the result to variable MA10_1
MA50_1:=REF(MA50,1); //Get the 50-cycle moving average of the pervious K line and save the result to variable MA50_1
MA10_2:=REF(MA10,2); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10_2
MA50_2:=REF(MA50,2); //Get the 50-cycle moving average of the latest K line and save the result to variable MA50_2
MA50_ISUP:=MA50>MA50_1 AND MA50_1>MA50_2; //Determine whether the current 50-line moving average of the K line is rising
MA50_ISDOWN:=MA50<MA50_1 AND MA50_1<MA50_2; //Determine whether the current 50-line moving average of the K line is falling
CLOSE>MA10 AND CLOSE>MA50 AND MA10>MA50 AND MA50_ISUP,BK; //open long position
CLOSE<MA10 AND CLOSE<MA50 AND MA10<MA50 AND MA50_ISUP,SK; //open short position
CLOSE<MA50 OR MA10<MA50,SP;//close long position
CLOSE>MA50 OR MA10>MA50,BP;//close short position
Чтобы написать полную торговую стратегию, вам понадобятся: получение данных, расчет данных, логический расчет и размещение заказов. Как показано выше, в целом коде используется только один API для получения базовых данных, который является " CLOSE " в первой и второй строках; затем первая до девятой строки - это части расчета данных; строки с 11 по 14 - это логические расчеты и часть размещения заказов.
Обратите внимание, что MA10, MA50, MA10_1, MA50_1, MA10_2 и MA50_2 являются переменными; в первых до девятых строк " := " - это знак назначения, а данные справа от знака назначения присваиваются переменной слева от знака назначения;
Основные данные (основные цены, самые высокие цены, самые низкие цены, цены закрытия, объем) являются неотъемлемой частью количественной торговли. Чтобы получить последние базовые данные в стратегии, вам нужно только вызвать API FMZ Quant. Если вы хотите получить базовые данные исторической цены, вы можете использовать " REF ", например: REF (CLOSE, 1) - это получить вчера
Переменные могут быть изменены. Название переменной может быть понято как кодовое имя. Его название поддерживается английскими буквами, цифрами и строками. Однако длина должна контролироваться в пределах 31 символа. Имена переменных не могут повторяться с другим, не могут дублироваться с именами параметров, не могут повторяться с именами функций (API), и каждое заявление должно заканчиваться запятой. Написание комментариев после " // ". Как показано ниже:
INT:=2; //Integer type
FLOAT:=3.1; //Floating point
ISTRUE:=CLOSE>OPEN; //Boolean type
Назначение переменной означает, что значение справа от знака назначения присваивается переменной слева. Существует четыре типа назначений, которые могут контролировать, отображается ли значение на графике или положение дисплея. Они " ": ", " := ", " ^^ ", "... ", а комментарии к коду ниже подробно объясняют их значение.
CC1: C; //Assign the closing price to the variable CC1 and display it in the sub-chart
CC2:=C; //Assign the closing price to variable CC2, but not display in the status bar and chart
CC3^^C; //Assign the closing price to the variable CC3 and display it in the main chart
CC4..0; //Assign the closing price to the variable CC4 and display it in the status bar, but not in the chart
В языке M существует несколько типов данных, наиболее распространенными из которых являются числовые типы, типы строки и типы Булевых. Численный тип - это числа, включая целые числа, десятичные числа, положительные и отрицательные числа и т. Д., такие как: 1, 2, 3, 1.1234, 2.23456...; тип строки может быть понят как текст, китайский, английский, числа также могут быть строками, такими как:
Реляционные операторы, как следует из названия, - это операторы, используемые для сравнения отношений двух значений. Они равны, больше, меньше, больше или равны, меньше или равны, не равны, как показано ниже:
CLOSE = OPEN; //when closing price equals to opening price, return 1 (true), otherwise return 0 (false)
CLOSE > OPEN; //when closing price greater than opening price, return 1 (true), otherwise return 0 (false)
CLOSE < OPEN; //when closing price less than opening price, return 1 (true), otherwise return 0 (false)
CLOSE >= OPEN; //when closing price greater than or equal to opening price, return 1 (true), otherwise return 0 (false)
CLOSE <= OPEN; //when closing price less than or equal to opening price, return 1 (true), otherwise return 0 (false)
CLOSE <> OPEN; //when closing price is not equal to opening price, return 1 (true), otherwise return 0 (false)
Логические операции могут объединять отдельные формулировки булевого типа в целое, наиболее часто используемые являются "И" и "ОР". Предположим, что есть два значения булевого типа,
AA:=2>1; //return true
BB:=4>3; //return true
CC:=6>5; //return true
DD:=1>2; //return false
Обратите внимание:
" И " - когда все условия являются истинными, а окончательное условие истинным;
"ИЛИ" означает, что при всех условиях, пока любое из условий является истинным, окончательное условие является истинным.
"И" может быть написано как "&&", а "ОТ" может быть написано как "
Нет никакой разницы между арифметическими операторами (" +
AA:=1+1; //the result is 2
BB:=2-1; //the result is 1
CC:=2*1; //the result is 2
DD:=2/1; //the result is 2
Если есть выражение 100*(10-1)/(10+5, какой шаг программы рассчитывается в первую очередь?
1, Если это один и тот же уровень работы, он обычно рассчитывается слева направо. 2, Если есть сложения и вычитания, и умножение и деление, сначала вычислить умножение и деление, а затем сложения и вычитания. 3, Если есть скобки, сначала вычислить внутреннюю часть скобки. 4, Если закон простоты работы выполнен, закон может быть использован для расчета.
То же самое относится к языку M, как показано ниже:
100*(10-1)/(10+5) //the result is 60
1>2 AND (2>3 OR 3<5) //the result is false
1>2 AND 2>3 OR 3<5 //the result is true
В языке M инструмента FMZ Quant существует два режима выполнения программы, а именно режим закрытия цены и режим цены в режиме реального времени.
Если речь идет о стратегии внутридневного трейдинга, вам необходимо использовать функцию времени " TIME ", когда вам нужно закрыть позицию в конце. Эта функция находится выше второго цикла и ниже дневного цикла, показана в виде четырех цифр: HHMM (1450 - 14: 50).
CLOSE>OPEN && TIME<1450,BK; //if it is a positive k-line and the time is less than 14:50, opening position.
TIME>=1450,CLOSEOUT; //if the time is beyond 14:50, closing all position.
В языке M существует два типа классификации моделей: нефильтрующая модель и фильтрующая модель. Это на самом деле очень хорошо понятно: нефильтрующая модель позволяет непрерывно открывать или закрывать сигналы, которые могут быть использованы для добавления и уменьшения позиций. Фильтрующая модель не позволяет непрерывно открывать или закрывать сигналы, то есть, когда появляется открывающийся сигнал, последующий открывающийся сигнал будет фильтрован до появления закрывающегося сигнала. Порядок нефильтрующей модели таков: открытая позиция - закрытая позиция - открытая позиция - закрытая позиция - открытая позиция...
Если вам нужно написать более сложную стратегию, вы можете обратиться к документации платформы FMZ Quant на языке M API или напрямую обратиться к официальной службе обслуживания клиентов, чтобы написать ее для вас.
Внутренняя торговля также является популярным способом торговли. Этот метод не удерживает позиции в течение ночи. Поэтому он подвержен низкому риску волатильности рынка. Как только возникают неблагоприятные рыночные условия, он может быть скорректирован вовремя.