Наскоро бях помолен да напиша стратегия, която отваря позиция в момента на пресичането на два индикатора. Тази задача не е трудна за изпълнение, а и нейната логика е доста интересна. Сега ще обясня защо:
Пресичане на два индикатора Momentum
Нека да разгледаме пресичане на два индикатора Momentum: Fast Momentum (10) и Slow Momentum (20)
Формулата за изчисляване на индикатора Momentum е:
Momentum(10) = Price – Price10
Където:
Momentum(10) – е текущия Momentum;
Price е текущата базова цена;
Price10 е базовата цена от преди 10 бара.
Двата индикатора Momentum се пресичат, когато са изпълнени следните две условия:
- Fast Momentum (10)1 < Slow Momentum (20)1 – Sigma; и
- Fast Momentum (10) > Slow Momentum (20) + Sigma.
Тук Fast Momentum (10)1 и Slow Momentum (20)1 са стойностите на Momentum от предишния бар, а Sigma е допустима грешка при сравняване на числа с плаваща запетая.
С първото логическо условие няма проблем – просто сравняваме стойностите на индикаторите от предишния бар. По-интересно е второто условие. Нека да го преобразуваме малко:
Fast Momentum (10) > Slow Momentum (20) + Sigma
Fast Momentum (10) – Slow Momentum (20) > Sigma
Price – Price10 – (Price – Price20) > Sigma
Price – Price10 – Price + Price20 > Sigma
Price20 – Price10 > Sigma
Виждаме, че това логическо условие не зависи от текущата базова цена, тъй като тези базови цени за двата индикатора се нулират взаимно. Пресичане на двата Momentum може да се отчете при смяна на бара, защото тогава се сменят и цените Price10 и Price20. Тоест, цената, при която се получава пресичането на два индикатора Momentum, е цената на отваряне на бара. Това означава, че и цената на отваряне на позицията ще е цената на отваряне на бара.
Тази логика лесно може да се тества с Forex Strategy Builder. За целта ще използваме индикатора Oscillator of Momentum* (Simple, Close, 10, 20). Този осцилатор сравнява два индикатора Momentum. Единия с период 10 а другия с период 20. Когато Oscillator of Momentum пресича нулевата линия в посока нагоре, това означава, че Fast Momentum пресича Slow Momentum (20) в посока нагоре.


При тази стратегия, пресичането на двата индикатора Momentum служи за филтър, който дава разрешение за отваряне на позиция в съответната посока. Самата позиция се отваря на цена Bar Opening.
Пресичане на два индикатора Simple Moving Averages
При индикатора Simple Moving Averages положението е малко по-различно. Формулата за MA е:
MA(n) = (Price + Price1 + Price2 + … + Pricen-1 + Pricen) / n
Тоест събираме базовите цени за последните “n” бара и ги делим на “n”.
Тази формула може да се напише и като:
MA(n) = MA1 + Price / n – Pricen+1 / n
За да отчетем пресичане на две MA, използваме същата логика.
- FastMA(m)1 < SlowMA(n)1 – Sigma; и
- FastMA(m) > SlowMA(n) + Sigma.
Нека пак да развием второто условие:
FastMA(m) > SlowMA(n) + Sigma
FastMA(m) – SlowMA(n) > Sigma
FastMA(m)1 + Price / m – Pricem+1 / m – SlowMA(n)1 – Price / n + Pricen+1 / n > Sigma
Price / m – Price / n + FastMA(m)1 – SlowMA (n)1 + Pricen+1 / n – Pricem+1 / m > Sigma
(n*Price – m*Price) / (m*n) > Sigma – FastMA(m)1 + SlowMA (n)1 – Pricen+1 / n + Pricem+1 / m
Price > (Sigma + SlowMA (n)1 – FastMA(m)1 + Pricem+1 / m – Pricen+1 / n) * (n * m) / (n – m)
От тук можем лесно да определим базовата цената, при която двата индикатора Moving Average са равни и при какви стойности на базовата цена двете Moving Average се пресичат.
Две Moving Average са равни, когато текущата цена е:
Critical Price = (SlowMA(n)1 – FastMA(m)1 + Pricem+1 / m – Pricen+1 / n) * (n * m) / (n – m)
Където:
Critical Price е критичната цена, при която двете МА се изравняват;
FastMA(m)1 е предишната стойност на бързата МА;
SlowMA(n)1 е предишната стойност на бавната МА;
m е периода на бързата МА;
n e периода на бавната МА;
Ако искаме да търгуваме, когато двете Moving Average се пресичат, то трябва да поставяме нашия входящ ордер на критичната базова цена. Въпросът е каква е тази базова цена и дали знаем нейната коректна стойност в момента на пресичане на двата индикатора.
Нека да разгледаме три случая, когато Moving Average е базирана на: Open Price, Close Price и Median Price (High + Low) / 2.
Moving Average базирана на Open Price
В този случай, ние категорично знаем цената на отваряне на бара. Тя е неизменна по време на целия бар. Следователно двете Moving Average са неизменни по време на самия бар. Ако те не са се пресекли в момента на отварянето на бара, те няма да се пресекат и по-късно. Пресичане на двете Moving Average може да се засече в момента на отваряне на бара. Това означава, че и позицията ни ще се отваря в началото на бара, ако има пресичане разбира се.
Тази стратегия се тества с помощта на Forex Strategy Builder, като се слага Opening Point of the position – Bar Opening и Opening Logic Condition – Moving Average Crossover:


Moving Average базирана на Close Price
В този случай двата индикатора FastMA и SlowMA са равни на сумите на затварящите цени, разделени на съответните периоди. Тук е очевидно, че ни трябват крайните цени на съответните барове,за да изчислим индикаторите коректно. След като MA се изчисляват на Bar Close Price, то това означава, че коректното определяне, кога двата индикатора се пресичат, може да стане в момента на затваряне на бара. Съответно и позицията ще се отваря в момента на затваряне на бара:


Moving Average базирана на Median Price
Тук ситуацията е аналогична с предния случай. Индикаторът Moving Average използва Median Price, която е равна на (High + Low) / 2.
Цените High и Low не са известни в началото или по време на бара. Те са категорично определени в момента на затваряне на текущия бар. Следователно, самото пресичане на двата индикатора се отчита в края на бара. Това означава, че и цената на отваряне на позицията трябва да е цената на затваряне на бара.
Това важи и за други базови цени: Typical и Weighted.
Използване на други цени на отваряне на позицията
С помощта на Forex Strategy Builder можете да тествате безопасно и логически вярно стратегии, които откриват позиции при пресичането на два индикатора. В тези случаи самото пресичане на индикаторите е входящ филтър. Той дава разрешение за отваряне на позиция в определената посока (в зависимост от посоката на пресичането).
За да се гарантира коректността на бектеста, Forex Strategy Builder автоматично настройва параметъра „Use previous bar value” на съответния индикатор. По този начин историческия тест се извършва само с коректни (известни) цени. Тоест програмата не поглежда в бъдещето, за да види каква е цената на затваряне на бара още в неговото начало.
Ето пример на стратегия, която използва пресичането на две МА за входящ сигнал, а позицията се отваря на цената на по-бавната MA. Тъй като пазара може да достигна до цената на отваряне на позицията (бавната МА) по време на бара, ние трябва да имаме ясен критерий дали да отворим позиция и каква да е нейната посока. Това се определя от пресичането на двете MA – Fast MA(10) и Slow MA(20). Единствения начин това да стане коректно е да използваме предишните (вече известни) стойности на индикаторите. Затова параметъра „Use previous bar value” е включен.

Примерна сделка при пресичане
Нека да разгледаме стратегията на отваряне на позиция при пресичане на две МА:
бавна Simple Moving Average(Close, 50) и бърза Simple Moving Average(Close, 7).
Ще купуваме, когато бързата МА пресече бавната МА в посока нагоре и ще продаваме, когато бързата МА пресече бавната МА в посока надолу. Ще затваряме позицията си в края на деня.

На 22 януари 2008г. в момента на отваряне на новия бар, виждаме, че МА(7) е пресякла МА(50) в посока надолу. Бързата МА(7) е с 10 пипса под бавната МА(50).
Съгласно логиката за откриване на позиция на стратегията ни, ние отваряме къса позиция на пазарната цена в момента – 1.4455.

По време на деня цената расте на горе и денят затваря на цена 1.4627. Ние затваряме нашата къса позиция на цена 1.4627. Загубата от позицията ние е 172 пипса без отчитане на спреда.
Ако погледнем сага двете Moving Averages ще видим, че те не се пресичат. Бързата МА(7) е с 12 пипса по-висока от бавната МА(50).
Защо тогава сме загубили 172 пипса, като явно даже не е трябвало да отваряме позиция? Ако тестваме тази стратегия на исторически данни, такава сделка няма да има. Просто двете МА не се пресичат.
По този начин теста ще покаже по-оптимистични данни за стратегията.
Обяснението на тази на пръв поглед измама е много просто. По време на отварянето на бара, търговската платформа показва, че двата индикатора се пресичат. Те обаче не са коректно изчислени в този момент. Бързата МА(7) е изчислена на база на предходните 6 цени Close и на текущата цена Open. Това не е МА изчислена на база на 7 цени Close, както трябва да бъде. Същото важи и за бавната МА. В началото на бара ние сме сравнявали две недоразвити МА.
Окончателните стойности на индикаторите се появяват в края на бара и там би трябвало да вземем решение за търговия а не в началото му, както сме направили в действителност.
Заключение
Използването на правилните стойности на индикаторите е изключително важно за правилния исторически тест. Много от разпространените платформи показват текущите стойности на индикаторите дори и когато тези индикатори са базирани на Price Close.
Лесно е да се разбере, че ако на пример една Moving Average се изчислява на Price Close, стойността, която виждаме по обяд, няма как да е коректната стойност на индикатора. Тази стойност ще се промени до края на бара.

Това изображение е от популярна форекс платформа и е записано в 13:35. Виждаме, че програмата показва цена Close = 1.3892 и MA(14) = 1.3752. Това обаче не са реалните стойности на затваряне, а моментни. Те се променят при всеки тик. Тези стойности могат да се използват при търговия на живо, но в никакъв случай не трябва да се използват при исторически тест. Просто този тест няма да е реален.
Можете да търгувате стратегия, която отваря позиция при пресичането на два индикатора, но за да я тествате коректно, трябва точно да определите цената на вход. Примерно Moving Average, Bollinger Band, Bar Opening или някаква друга.







