HOME

Как узнать цену, при которой сигнальная линия пересечет MACD (PPO)?

(Все нижеизложенное относится к процентному MACD, вычисляемому по формуле MACD = (FastEMA/SlowEMA - 1), и одинаково годится для Percentage Price Oscillator (PPO) на экспоненциальных скользящих средних, который я обычно и использую)

Итак, задача следующая: установить при каком значении цены сигнальная линия пересечет MACD, или, другими словами, гистограмма MACD станет равной нулю. Решение такой задачи необходимо, например, для вычисления цены стоп или лимит ордера для следующего бара в сигналах торговой системы, использующей этот индикатор. Так как гистограмма MACD вычисляется на основе экспоненциальных скользящих средних, необходимо было произвести определенную "препарацию" формул. Данное действие было с успехом проделано Crazill'ой (его вариант индикатора для Метастока находится в конце страницы). Я же интерпретировал его манипуляции для Омеги.

Сначала создаем в Easy Language Power Editor функцию $ZeroHistMACD, которую можно будет использовать и в индикаторах и в сигналах. Значение функции соответствует цене, при которой гистограмма MACD будет равна нулю ("нулевой уровень" гистограммы MACD).

{This Function calculate price level, where Histogramma MACD equal Zero
t1 - FastEMA(12) in MACD
t2 - SlowEMA(26) in MACD
t3 - SignEMA (9) in MACD
(c) konkop,2001 }

Inputs: t1(Numeric), t2(Numeric), t3(Numeric);
vars: k1(0), k2(0), ss(0), ll(0), f(0), b(0), aa(0), bb(0);

k1=2/(t1+1);
k2=2/(t2+1);
ss=XAverage(C,t1);
ll=XAverage(C,t2);
f=IFF(ll=0,0,ss/ll-1);
b=XAverage(f,t3);
aa=k1-(b+1)*k2;
bb=(b+1)*(1-k2)*ll-(1-k1)*ss;

$ZeroHistMACD = IFF(aa=0,0,bb/aa);

Теперь можно создать индикатор ZeroHistMACD, который будет визуально показывать уровень цены, на котором произойдет пересечение гистограммой MACD нулевой линии. В код добавлена текстовая функция, наносящая на график конкретное значение этой цены в числовом выражении.

{This Indicator plotting price level where Histogramma MACD equal zero
(c) konkop, 2001}

Inputs: FastEMA(12), SlowEMA(26), SignEMA(9);

Value1 = $ZeroHistMACD(FastEMA,SlowEMA,SignEMA);

Plot1[-1](Value1,"ZeroHistMACD");

{Text on Chart}
If LastBarOnChart then begin
If C>Value1 then value2=text_new(date,time, Value1-100 Points,"Zero"+ NumToStr(Value1, 3));
If C<=Value1 then value2=text_new(date,time, Value1+100 Points,"Zero"+ NumToStr(Value1, 3));
End;

В Омеге мы можем формировать ордера стоп и лимит только для "следующего бара", поэтому индикатор сдвинут на один бар вперед (Plot[-1]...) и показывает уровень "на завтра". Для того, чтобы убрать линию индикатора с графика и оставить только текст и цифры, на вкладке "Properties" свойств индикатора, в окошке "Subgraph:" выбираем "Hidden" (скрытый), затем "ОК" и в появившемся окошке нажимаем "No". Теперь в правой части графика ненавязчиво будет болтаться числовое значение интересующего нас уровня цены. Если при этом убрать из кода индикатора фрагменты "-100 Points" и "+100 Points", то цифры будут находиться непосредственно на значении "нулевого уровня" гистограммы MACD.

Таким же образом можно использовать функцию $ZeroHistMACD для формирования ордеров в сигналах стратегий. Например вот так:

Inputs: FastEMA(12), SlowEMA(26), SignEMA(9);

Vars: OrderPrice(C);

OrderPrice = $ZeroHistMACD(FastEMA,SlowEMA,SignEMA);

If MarketPosition >=0 Then Sell 1 Contract at OrderPrice - 10 Points Stop;
If MarketPosition <=0 Then Buy 1 Contract at OrderPrice + 10 Points Stop;

Мы будем продавать по стоп-ордеру, если цена в течение дня (бара) пересечет "нулевой уровень" гистограммы MACD сверху вниз больше чем на 10 пунктов. И будем покупать по стоп-ордеру, если цена в течение дня (бара) пересечет "нулевой уровень" гистограммы MACD снизу верх больше чем на 10 пунктов. Теперь, если в настройках стратегии включить флажок "Generate Orders for Next Bar", то мы будем получать своевременные предупреждения от Омеги. Параметры открытых позиции и уровни стоп-ордеров для следующего бара будут появляться в Tracking Center и в виде предупредительных окошек, как на рисунке ниже.

Обратите внимание, что "нулевой уровень" гистограммы MACD на графике равен 2.761, а цена очередного стоп-ордера в окошке New Active Order равна 2.750. Хотя, казалось бы, должно быть 2.751 ("нулевой уровень" минус 10 пунктов). Но, если посчитать эти значения более точно, например до 5 знаков после запятой, то "нулевой уровень" составит 2,76077. Для индикатора Омега округляет по обычным законам - в большую сторону, а вот для стоп-ордера на продажу можно округлять только в меньшую сторону. Вот отсюда и отличие в 1 пункт.

ELA файл с функцией и индикатором для Омеги.

Формула индикатора "нулевого уровня" гистограммы MACD для Metastock от Crazill'ы

t1:=Input("period",1,100,12);
t2:=Input("period",1,100,26);
t3:=Input("period",1,100,9);
k1:=2/(t1+1);
k2:=2/(t2+1);
ss:=Mov(CLOSE,t1,E);
ll:=Mov(CLOSE,t2,E);
f:=ss/ll-1;
b:=Mov(f,t3,E);
aa:=k1-(b+1)*k2;
bb:=(b+1)*(1-k2)*ll-(1-k1)*ss;
pp:=bb/aa;
pp

(c) konkop, 2001.

HOME

 

Hosted by uCoz