Ефективни алгоритми за осредняване с минимално забавяне и тяхното използване в индикатори - статии на

Мисля, че няма нужда да се обяснява значителната роля на изглаждащите алгоритми за технически анализ и системи за търговия. Достатъчно е да погледнете кода на почти всеки индикатор, за да откриете някакъв алгоритъм за осредняване в него, било то изрично или неявно. Ако се вгледате по-отблизо, ще откриете, че повечето търговски и аналитични платформи и клиентски терминали използват най-простите, макар и далеч не най-ефективните алгоритми за осредняване и повечето индикатори се основават на тези алгоритми.

В момента са разработени много по-ефективни алгоритми за изглаждане, но опитът да се използват в показатели с оглед на значителната им сложност обикновено води до факта, че търпението на програмиста е достатъчно, в най-добрия случай, за един или два показателя, които не винаги работи коректно. След това всяко желание за работа в тази посока допълнително изчезва. Най-основното предимство на простите средни стойности е, че те винаги са на разположение като прости дефинирани от потребителя функции, които могат да бъдат приложени навсякъде и по всяко време.

Тема на статията

- JJMASeries () - адаптивен JMA алгоритъм за сглаждане;
- JLiteSeries () - JMA алгоритъм за изглаждане без алгоритъм за адаптация;
- JurXSeries () - ултралинеен алгоритъм за изглаждане, взет от индикатора JRSX;
- ParMASeries () - изглаждащ алгоритъм, базиран на параболично приближение;
- LRMASeries () - алгоритъм за изглаждане на линейна регресия;
- T3Series () - базиран на Тилсън алгоритъм за изглаждане.

Прилагане на функции за сглаждане

Функциите са представени под формата на файлове: JJMASeries.mqh, JLiteSeries.mqh, JurXSeries. mqh, ParMASeries.mqh, LRMASeries.mqh, T3Series.mqh.

Извикванията към тези функции са абсолютно еднакви, единствената разлика е, че определени функции нямат някои външни променливи. Обикновено такива функции са изградени за обработка на потребителски и индикаторни масиви, които действат като външни променливи, но според мен това не винаги е удобно и е много по-добре да се изпълняват такива функции за обработка на обикновени променливи, а не на масиви. В този случай можете да направите неограничен брой изглаждания в един изчислителен цикъл, използвайки тези алгоритми! Мисля, че ще бъде абсолютно излишно да представяме самия функционален код в статията. Ще бъде интересно само за тези, които ще правят подобни функции на базата на други алгоритми. Ще се интересуваме само от алгоритъма за достъп до тези функции в текста на индикатора, т.е. практическото приложение на тези функции.

Нека започнем нашето запознаване с функцията JJMASeries ():

Файлът JJMASeries.mqh съдържа четири функции: JJMASeries (), JJMASeriesResize (), JJMASeriesAlert () и JMA_ErrDescr (). В допълнение към функциите, файлът съдържа променливи, които са декларирани като глобални.

Функцията JJMASeries () е предназначена да използва алгоритъма JMA при писане на каквито и да е индикатори за технически анализ и експертни съветници, за да замени изчислението на класическото осредняване с този алгоритъм. Функцията не работи, ако граничният параметър е равен на нула! Всички показатели, които направих за JJMASeries, са направени с оглед на това ограничение. Файлът трябва да бъде поставен в папката MetaTrader \ expert \ include \. Имайте предвид, че ако стойността на променливата на лентата е по-голяма от стойността на променливата MaxBar, тогава функцията JJMASeries () връща стойност, равна на нула на тази лента! И следователно такава стойност не може да присъства в знаменателя на която и да е дроб при изчисляването на показателя! На следващите тридесет ленти функцията JJMASeries () също връща нула!

Тази версия на функцията JJMASeries () поддържа експертни съветници, когато се използва в персонализирани индикатори, към които се отнася съветникът. В допълнение, тази версия на функцията JJMASeries () поддържа Expert Advisors, когато се използва в кода на индикатора, който е изцяло поставен в кода на Expert Advisor със запазени всички оператори на цикъл и променливи! Когато пишете индикатори и експерти, използващи функцията JJMASeries, не се препоръчва да давате имена на променливи, започващи с nJMA. или dJMA. Функцията JJMASeries () може да се използва във вътрешния код на други UDF, но трябва да вземете предвид факта, че при всяко обаждане към такъв UDF всяко повикване към JJMASeries () трябва да има свой уникален номер (номер). Тази версия на функцията JJMASeries () е предназначена да обработва променливи, свързани с масиви от времеви серии на текущата диаграма! Ако приложите тази функция за обработка на променливи, изчислени на базата на масиви от времеви серии от други диаграми, изчислението ще съдържа грешка!