Потребности разработчиков стратегий
Для различных ситуаций требуется использовать различные показатели. Могу ли я установить разницу в цене стоп-лосса в зависимости от различных условий открытия позиции?
Например, традиционная модель составляет условия для закрытия позиции без разграничения различных условий для открытия позиции.
Следующий код представляет собой простой, традиционный, недифференцированный подход к открытию позиции:
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-линия может быть сигналом открытия позиции любой группы. (((Возьмите первый сигнал открытия позиции в порядке появления сигнала)
Условия открытия позиции для неразделенной группы могут быть только для неразделенной группы
Фильтрация сигналов означает: фильтрация сигналов на уровне
Приоритеты:
Нефильтрованная модель:
Примечание: Условия для открытия позиции без группировки могут быть использованы только для открытия позиции без группировки
Далее мы рассмотрим несколько примеров стратегий, которые помогут понять, как эти команды могут быть сгруппированы в коде.
Модель фильтрации
Торговый подход: в качестве критерия для определения тренда используйте линейные форки с 20-циклическим и 60-циклическим среднем.
Код:
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 циклами.
Код:
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 язык обрабатывает команды группировки. Вы можете создавать различные требования группировки в соответствии со своей логикой стратегии, чтобы максимально четко и с минимальным количеством ошибок выразить желаемую логику стратегии в коде.