3.3 Как реализовать стратегии на языке М

Автор:Доброта, Создано: 2019-06-25 12:08:47, Обновлено: 2023-11-11 17:01:30

img

Как реализовать стратегии на языке M

Резюме

В предыдущей статье мы объяснили предпосылки реализации торговой стратегии с аспекта внедрения языка M, базовой грамматики, метода выполнения модели и классификации модели.

Модуль стратегии

img

Подумайте об этом, как вы строите робота из кусков Лего? Вы не всегда можете сверху вниз или снизу вверх, собирать кусок за куском. Люди с небольшим здравым смыслом знают, что они должны соединить свои головы, руки, ноги, крылья и т. д., а затем объединить их в полный робот. То же самое относится к написанию программ, написанию необходимых функций в единый стратегический модуль, а затем объединению этих отдельных стратегических модулей в полную торговую стратегию. Ниже я перечисляю некоторые общие стратегические модули:

img

Увеличение стадии

Увеличение стадии вычисляет процент нынешней цены закрытия линии K в сравнении с предыдущими N периодами разницы цены закрытия.

CLOSE_0:=CLOSE; //get the current K-line's closing price, and save the results to variable CLOSE_0. 
CLOSE_10:=REF(CLOSE,10); //get the pervious 10 K-lines' closing price, and save the results to variable CLOSE_10

(CLOSE_0-CLOSE_10)/CLOSE_10*100;//calculating the percentage of current K line's closing price compare with previous N periods of closing price's difference.

Новая высокая цена

Новая высокая цена рассчитывается на основе того, является ли текущая линия K больше, чем N циклов самая высокая цена.

HHV_10:=HHV(HIGH,10); //Get the highest price of latest 10 K-lines, which includes the current K-line.
HIGH>REF(HHV_10,1); //Judge whether the current K-line's highest price is greater than pervious K-lines' HHV_10 value.

Увеличение цен при значительном увеличении объемов торговли

Например: если цена закрытия текущей линии K равна в 1,5 раза цене закрытия предыдущих 10 линий K, что означает, что за 10 дней цена выросла на 50%; а объем торговли также увеличился более чем в 5 раз по сравнению с предыдущими 10 линиями K. можно написать:

CLOSE_10:=REF(CLOSE,10); //get the 10th K-line closing price
IS_CLOSE:=CLOSE/CLOSE_10>1.5; //Judging whether the current K Line closing price is 1.5 times greater than the value of CLOSE_10 

VOL_MA_10:=MA(VOL,10); //get the latest 10 K-lines' average trading volume
IS_VOL:=VOL>VOL_MA_10*5; //Judging whether the current K-line's trading volume is 5 times greater than the value of VOL_MA_10

IS_CLOSE AND IS_VOL; //Judging whether the condition of IS_CLOSE and IS_VOL are both true.

Рынок ценового узкого шока

Например, если самая высокая цена за 10 циклов минус самая низкая цена за 10 циклов, результат, деленный на текущую цену закрытия K-линии, меньше 0,05.

HHV_10:=HHV(CLOSE,10); //Get the highest price in 10 cycles(including current K-line)
LLV_10:=LLV(CLOSE,10); //Get the lowest price in 10 cycles(including current K-line)

(HHV_10-LLV_10)/CLOSE<0.05; //Judging whether the difference between HHV_10 and LLV_10 divided by current k-line's closing price is less than 0.05.

Движущаяся средняя указывает на бычий рынок

Движущаяся средняя указывает на длинное и короткое направление, линия K поддерживается или сопротивляется движущейся средней линией 5,10,20,30,60, Движущаяся средняя указывает на бычий рынок или медвежий рынок. можно написать:

MA_5:=MA(CLOSE,5);  //get the moving average of 5 cycle closing price.
MA_10:=MA(CLOSE,10);//get the moving average of 10 cycle closing price.
MA_20:=MA(CLOSE,20);//get the moving average of 20 cycle closing price.
MA_30:=MA(CLOSE,30);//get the moving average of 30 cycle closing price.

MA_5>MA_10 AND MA_10>MA_20 AND MA_20>MA_30; //determine wether the MA_5 is greater than MA_10, and MA_10 is greater than MA_20, and MA_20 is greater than MA_30.

Предыдущая высокая цена и ее местоположение

Чтобы получить местоположение предыдущей высокой цены и ее местоположение, вы можете использовать FMZ Quant API напрямую. можно написать:

HHV_20:=HHV(HIGH,20); //get the highest price of 20 cycle(including current K line)
HHVBARS_20:=HHVBARS(HIGH,20); //get the number of cycles from the highest price in 20 cycles to current K line
HHV_60_40:REF(HHV_20,40); //get the highest price between 60 cycles and 40 cycles.

Увеличение разрыва в ценах

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

HHV_1:=REF(H,1); //get the pervious K line's highest price
LLV_1:=REF(L,1); //get the pervious K line's lowest price
HH:=L>HHV_1; //judging wether the current K line's lowest price is greater than pervious K line's highest price (jump up)
LL:=H<LLV_1; //judging wether the current K line's highest price is greater than pervious K line's lowest price (jump down)
HHH:=L/REF(H,1)>1.001; //adding additional condition, the bigger of the price gap, the stronger the signal (jump up)  
LLL:=H/REF(L.1)<0.999; //adding additional condition, the bigger of the price gap, the stronger the signal (jump down)  
JUMP_UP:HH AND HHH; //judging the overall condition, whether it is a jump up
JUMP_DOWN:LL AND LLL; //judging the overall condition, whether it is a jump down

Общие технические показатели

Движущаяся средняя

img

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

MA_DEMO:MA(CLOSE,5);   // get the moving average of 5 cycle
MA_DEMO:EMA(CLOSE,15); // get the smooth moving average of 15 cycle
MA_DEMO:EMA2(CLOSE,10);// get the linear weighted moving average of 10 cycle
MA_DEMO:EMAWH(CLOSE,50); // get the exponentially weighted moving average of 50 cycle
MA_DEMO:DMA(CLOSE,100);  // get the dynamic moving average of 100 cycle
MA_DEMO:SMA(CLOSE,10,3); // get the fixed weight of 3 moving average of closing price in 10 cycle
MA_DEMO:ADMA(CLOSE,9,2,30); // get the fast-line 2 and slow-line 30 Kaufman moving average of closing price in 9 cycle.

Боллингерские полосы

img

Боллингерские полосы также основаны на статистическом принципе. Средний рельс рассчитывается по N-дневному скользящему среднему значению, а верхний и нижний рельсы рассчитываются по стандартному отклонению. Когда канал BOLL начинает меняться от широкого к узкому, что означает, что цена постепенно вернется к среднему значению. Когда канал BOLL меняется от узкого к широкому, это означает, что рынок начнет меняться. Если цена повышается через верхний рельс, это означает, что покупательная способность повышается. Если цена снижается через нижний рельс, это указывает на повышение продажной способности.

Среди всех технических показателей метод расчета полос Боллинджера является одним из самых сложных, который вводит в статистику концепцию стандартного отклонения, включая среднюю траекторию (MB ), верхнюю траекторию (UP ) и нижнюю траекторию (DN ). К счастью, вам не нужно знать подробности расчета, вы можете использовать его непосредственно на платформе FMZ Quant следующим образом:

MID:MA(CLOSE,100); //calculating moving average of 100 cycle, call it Bollinger Bands middle trajectory   
TMP2:=STD(CLOSE,100); //calculating standard deviation of closing price of 100 cycle.
TOP:MID+2*TMP2; //calculating middle trajectory plus 2 times of standard deviation, call it upper trajectory
BOTTOM:MID-2*TMP2; //calculating middle trajectory plus 2 times of standard deviation, call it lower trajectory

Индикатор MACD

img

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

DIFF:EMA(CLOSE,10)-EMA(CLOSE,50); //First calculating the difference between short-term moving average and long-term moving average.
DEA:EMA(DIFF,10); //Then calculating average of the difference.

Вышеприведенный модуль является наиболее часто используемым стратегическим модулем в разработке количественных торговых стратегий. Кроме того, существует гораздо больше. Через приведенные выше примеры модулей вы также можете реализовать несколько торговых модулей, которые вы используете чаще всего в субъективной торговле. Методы одинаковы. Далее мы начали писать жизнеспособную внутридневную торговую стратегию.

Составление стратегии

На спотовом рынке Форекс существует известная стратегия под названием HANS123.

Логика стратегии

  • Готовы выйти на рынок через 30 минут после открытия;

  • Верхняя рельса = 30 минут высоты после открытия;

  • Нижняя рельса = 30 минут после открытия;

  • Когда цена превышает верхний предел, покупать и открывать позицию;

  • Когда цена падает ниже нижней рельсы, продавец открывает позицию.

  • Стратегия внутридневного трейдинга, закрытие до закрытия;

Код стратегии

// Data Calculation
Q:=BARSLAST(DATA<>REF(DATA,1))+1; //Calculating the number of period from 
the first K line of the current trading day to current k line, and assign the results to N 
HH:=VALUEWHEN(TIME=0930,HHV(H,Q)); //when time is 9:30, get the highest price of N cycles, and assign the results to HH
LL:=VALUEWHEN(TIME=0930,LLV(L,Q)); //When time is 9:30, get the lowest price of N cycles, and assign the results to LL

//Placing Orders
TIME>0930 AND TIME<1445 AND C>HH,BK; //If the time is greater than 9:30 and lesser than 14:45, and the closing price is greater than HH, opening long position.
TIME>0930 AND TIME<1445 AND C<LL,SK; //If the time is greater than 9:30 and lesser than 14:45, and the closing price is lesser than LL, opening short position.
TIME>=1445,CLOSEOUT; //If the time is greater or equal to 14:45, close all position.

//Filtering the signals
AUTOFILTER;  //opening the filtering the signals mechanism

Подводя итог

Выше мы изучили концепцию модуля стратегии. Через несколько часто используемых случаев модуля стратегии у нас было общее представление о инструментах программирования FMZ Quant, можно сказать, что изучение написания модулей стратегии и улучшение логического мышления программирования является ключевым шагом в продвинутой количественной торговле. Наконец, мы использовали инструмент FMZ Quant для реализации торговой стратегии в соответствии с классической стратегией торговли на Форекс.

Следующее сообщение

Возможно, некоторые люди все еще в замешательстве, главным образом из-за части кодирования. Не волнуйтесь, мы уже подумали об этом для вас. На платформе FMZ Quant есть еще один еще более простой инструмент программирования для новичков. Это визуальное программирование, давайте узнаем его скоро!

Послешкольные занятия

  1. Попробуйте реализовать несколько торговых модулей, которые вы используете чаще всего в субъективной торговле.

  2. Попробуйте реализовать алгоритм индекса KDJ с использованием языка M на платформе FMZ Quant.


Больше