0
Подписаться
78
Подписчики

Написание инструкций по группировке в количественных торговых стратегиях

Создано: 2019-07-10 09:55:13, Обновлено: 2019-07-16 15:37:32
comments   0
hits   2376

Почему группировка указаний

Потребности разработчиков стратегий

Для различных ситуаций требуется использовать различные показатели. Могу ли я установить разницу в цене стоп-лосса в зависимости от различных условий открытия позиции?

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

Следующий код представляет собой простой, традиционный, недифференцированный подход к открытию позиции:

MA5^^MA(C,5);
MA10^^MA(C,10);
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K..SMA(RSV,3,1);
D..SMA(K,3,1);
CROSS(MA5,MA10)||CROSS(K,D),BK;
C>HV(H,10)||C<BKPRICE-5*MINPRICE,SP;
AUTOFILTER;

Вместо этого используйте команды группировки.

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

Например:

Первая группа делает много условий.

MA5^^MA(C,5);
MA10^^MA(C,10);
CROSS(MA5,MA10),BK;
CROSS(MA10,MA5),SP;

Вторая группа делает много условий.

RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K..SMA(RSV,3,1);
D..SMA(K,3,1); 
CROSS(K,D),BK; 
C>HV(H,10)||C<BKPRICE-5*MINPRICE,SP;

Как различить различные группы условий в одной модели? Давайте их реализуем.

Метод написания группировочной команды

Во-первых, модели делятся на фильтрованные и нефильтрованные:

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

  • Нефильтрованная модель: первоначальная стратегия входа отличается от стратегии набора запасов. Для устранения запасов следует использовать другую стратегию стоп-лосс, которую можно реализовать с помощью группировки инструкций.

Модель фильтрации

//A组指令
A组的开多条件,BK('A');
A组的开空条件,SK('A');
A组的平多条件,SP('A');
A组的平空条件,BP('A');
//B组指令
B组的开多条件,BPK('B');
B组的开空条件,SPK('B');
B组的平多条件,SP('B');
B组的平空条件,BP('B');
AUTOFILTER;//过滤函数

Примечание: группировка в фильтрующей модели требует, чтобы группа была включена после указания на торговлю и была окружена однозначными кавычками. Например, BK ((‘A’)

Нефильтрованная модель

//A组指令
A组的开多条件1,BK('A',2);
A组的开空条件1,SK('A',2);
A组的加多条件2,BK('A',1);
A组的加空条件2,SK('A',1);
A组的平多条件,SP('A',GROUPBKVOL('A'));
A组的平空条件,BP('A',GROUPSKVOL('A'));
//B组指令
B组的加多条件,BK('B',1);
B组的加空条件,SK('B',1);
B组的平多条件1,SP('B',GROUPBKVOL('B'));
B组的平空条件1,BP('B',GROUPSKVOL('B'));

Примечание: в нефильтрованных моделях группировка требует добавления группы и номера рук после инструкции по торговле, группы должны быть окружены единственными кавычками. BK ((‘A’,2)

Механизм работы группировочных директив

Модель фильтрации: сначала групповая фильтрация, затем сигнальная фильтрация

  • Групповая фильтрация означает: если предыдущий сигнал K-линии является сигналом открытия позиции, исходящим от группы A (((BK SK BPK SPK) текущая K-линия может быть только сигналом закрытия позиции группы A. Если предыдущий сигнал K-линии является сигналом закрытия позиции, исходящим от группы A (((BP SP) текущая K-линия может быть сигналом открытия позиции любой группы. (((Возьмите первый сигнал открытия позиции в порядке появления сигнала)

  • Условия открытия позиции для неразделенной группы могут быть только для неразделенной группы

Фильтрация сигналов означает: фильтрация сигналов на уровне

Приоритеты:

  • Верхняя K-линия BK Текущая K-линия должна быть SPK или SP (SPK имеет приоритет над SP, следующие равнозначны)
  • Верхняя линия K - SK, текущая линия K должна быть BPK или BP
  • Верхняя K-линия BP, текущая K-линия должна быть BK или SK
  • Первая K-линия SP, а текущая K-линия должна быть BK или SK.
  • Верхняя линия K - BPK, текущая линия K - SPK или SP
  • Верхняя K-линия SPK, а текущая K-линия BPK или BP

Нефильтрованная модель:

  • Если предыдущий сигнал является сигналом открытия позиции, исходящим от группы А, то следующий сигнал должен быть сигналом наложения или уменьшения позиции группы А.
  • Если предыдущий сигнал является сигналом закрытия позиции группы А и группа А держит позицию 0, следующий сигнал может быть сигналом открытия позиции для любой группы.
  • Если позиция группы А больше 0, то для группы А должен быть сигнал открытия позиции или сигнал закрытия позиции.

Примечание: Условия для открытия позиции без группировки могут быть использованы только для открытия позиции без группировки

Анализ группировочных директив

Далее мы рассмотрим несколько примеров стратегий, которые помогут понять, как эти команды могут быть сгруппированы в коде.

Модель фильтрации

Торговый подход: в качестве критерия для определения тренда используйте линейные форки с 20-циклическим и 60-циклическим среднем.

  • На 20-циклической средней линии больше, чем на 60-циклической средней линии больше. Наоборот, пустота.
  • В условиях многополюсного тренда, если максимальная цена достигает 10 k-линий, то тренд будет больше. При закрытии позиции, с более крупной точки остановки, или при появлении средней точки остановки.
  • В условиях плюсового тренда, если индикатор KDJ золотой форк и солнечный свет, в диапазоне плюсовой. При выравнивании позиции, с меньшей остановкой, чтобы прекратить позицию или упасть в диапазоне, чтобы открыть позицию с наименьшей остановкой.

Код:

MA20^^MA(C,20);
MA60^^MA(C,60);
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;
HH:=HV(H,10);
LL:=LV(L,10);
MA20>MA60&&H>HH&&C>O,BK('A');
MA20<MA60&&L<LL&&C<O,SK('A');
L<LV(L,5)||CROSSDOWN(MA20,MA60)||C<BKPRICE-5*MINPRICE,SP('A');
H>HV(H,5)||CROSSUP(MA20,MA60)||C>SKPRICE+5*MINPRICE,BP('A');//只平A组开仓
MA20>MA60&&CROSSUP(K,D)&&C>O,BK('B');
MA20<MA60&&CROSSDOWN(K,D)&&C<O,SK('B');
C>BKPRICE+5*MINPRICE||C<BKPRICE-2*MINPRICE||C<REF(L,BARSBK),SP('B');
C<SKPRICE-5*MINPRICE||C>SKPRICE+2*MINPRICE||C>REF(H,BARSSK),BP('B');//只平B组开仓
//不同的开仓条件开仓,用不同的平仓条件,有针对性的平仓。达到不同行情试用不同策略的目的。
AUTOFILTER;

Нефильтрованная модель

Торговая схема: в качестве условия для первого открытия позиции используйте линейный форк-дэдфорк с 5 циклами и 10 циклами.

  • 5 циклов и 60 циклов средней линейной золотой форки плюс 5 циклов и 60 циклов средней линейной мертвой форки плюс 5 циклов и 60 циклов средней линейной мертвой форки плюс 5 циклов и 60 циклов средней линейной мертвой форки плюс 5 циклов и 60 циклов средней линейной мертвой форки плюс 5 циклов и 60 циклов средней линейной мертвой форки плюс 5 циклов и 60 циклов средней линейной мертвой форки плюс 5 циклов и 60 циклов средней линейной мертвой форки плюс 6 циклов плюс 6 циклов плюс 6 циклов плюс 6 циклов плюс 6 циклов плюс 6 циклов плюс 6 циклов плюс 6 циклов плюс 6 циклов плюс 6 циклов плюс 6 циклов плюс 6 циклов плюс 6 циклов плюс 6 циклов плюс 6 циклов плюс 6 циклов плю
  • При тенденции 5 циклов больше 60 циклов, максимальная цена достигает 10 корней k-линии, новая высокая, а затем второй раз увеличивает позиции. При тенденции 5 циклов меньше 60 циклов, минимальная цена достигает 10 корней k-линии, новая низкая, а затем второй раз опустошает позиции.
  • Для первой добавленной позиции, сделайте 5 коренных k линий, чтобы установить новую низкую или меньшую остановку убытков.
  • Для второго прибавления позиции, в среднем 5 циклов и 60 циклов.

Код:

MA5^^MA(C,5);
MA10^^MA(C,10);
MA20:=MA(C,20);
MA60^^MA(C,60);
RSV:=(CLOSE-LLV(LOW,9))/(HHV(HIGH,9)-LLV(LOW,9))*100;
K:=SMA(RSV,3,1);
D:=SMA(K,3,1);
J:=3*K-2*D;
HH:=HV(H,10);
LL:=LV(L,10);
CROSSUP(MA5,MA10)&&BKVOL=0&&C>=O,BK('A',2);
CROSSDOWN(MA5,MA10)&&SKVOL=0&&C<=O,SK('A',2);
CROSSUP(MA5,MA60)&&ISLASTBK&&BKVOL=2,BK('A',1);
CROSSDOWN(MA5,MA60)&&ISLASTSK&&SKVOL=2,SK('A',1);
MA5>MA60&&H>HH&&ISLASTSP&&REF(GROUPBKVOL('A'),BARSSP+1)>0,BK('B',1);
MA5<MA60&&L<LL&&ISLASTBP&&REF(GROUPSKVOL('A'),BARSBP+1)>0,SK('B',1);
L<LV(L,5)||C<REF(L,BARSBK)&&(C<BKPRICE-2*MINPRICE),SP('A',GROUPBKVOL('A'));
H>HV(H,5)||C>REF(H,BARSSK)&&(C>SKPRICE+2*MINPRICE),BP('A',GROUPSKVOL('A'));
C>BKPRICE+10*MINPRICE||CROSSDOWN(MA5,MA60),SP('B',BKVOL);
C<SKPRICE-10*MINPRICE||CROSS(MA5,MA60),BP('B',SKVOL);

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