AVTO MA - страница 3

 
Svinozavr писал(а) >>

Виктор, ты о моем алгоритме или топикстартера? Если о моем, то я делал даже вариант осциллятора а-ля стохастик, где границы канала стохастика (макс. и мин. значения за %K баров) были заменены на вот эти вот EMA, которые были описаны в базе (раздельное сглаживание фронта и затухания). Вот картинка этого стохастика на EMA (замедление стохастика = 1):

Но тут это флуд, не находишь? )))

Флуда не вижу. Я про твой индикатор и говорил. Ошибся. Механизм формирования такой же. И чем то он мне не понравился. Наверно варить не научился.
 
Ну, коль скоро старший товарищ флуда не видит, то...)))
Вот не люблю я вникать в чужие задумки! И вроде бы уже подавил в себе желание помочь, пришел, так сказать, в норму, а голове не прикажешь - мысли всякие. Нет, страшного не случилось - до альтруизма я не опустился, но к своему же примеру со сбрасывающимися EMA захотелось вернуться. И дел др. куча, но сил противиться не было. Да и потом: проще старых помыть, чем новых нарожать...
Буду рассматривать для High. Для начала, то, что мы оба пробовали:
if(High[i]>EMAh[i+1]) EMAh[i]=High[i]; // если текущ.High> пред.значения EMA, то текущ.EMA=High
else EMAh[i]=k*High[i]+(1-k)*EMAh[i+1]; // иначе EMA считается как обычно 
где
EMAh - экспон. скользящая по High - верхн. граница канала.
k - коэфф. EMA. Если нужно задать в виде периода, то k=2.0/(1+PeriodEMA); // Разумеется, тебе это известно, но, может, кто не знает или подзабыл.
Что тут можно испортить улучшить. Для начала, надо определиться, что хотелось бы увидеть, а потом уже думать как. В первоначальном виде подход подразумевает отслеживание экстремумов, так что в этом направлении я и решил двигаться.
Первое, что активно не понравилось, это непрерывность зоны ПК (выполнение условия) при активном движении. Решил сделать так:
if(High[i]>EMAh[i+1]) EMAh[i]=High[i]+x*(High[i]-Low[i]);
else EMAh[i]=k*High[i]+(1-k)*EMAh[i+1];
где
High[i]-Low[i] - высота бара или, др.словами, безгэповый (без пред. Close) несглаженный торговый диапазон. Можно использовать ATR, но пока пусть так.
x - множитель.
Можно также ограничить нижнюю границу размаха неким пороговым значением: MathMax(x*(High[i]-Low[i]), Threshold)
Снимок 1 - то, что было (x=0), 2-й - x=3 (для наглядности экстремумы отмечены ромбиками, а синий пунктир - это медиана канала - о ней не в этом посте):

Видно, что добавление этого члена дало возможность а) разделить экстремумы, и б) слегка адаптировать индикатор к текущей волатильности.
Едем дальше.
Что мне всегда хочется отсечь, так это "тонкие" участки, не имеющие отношения ни к движению, ни к экстремумам. Всегда стараюсь такие "мертвые" участки устранить из анализа. Это можно сделать так:
if(High[i]>EMAh[i+1]) EMAh[i]=High[i]+x*(High[i]-Low[i]);
else {
   if(High[i]-Low[i]>Range) EMAh[i]=k*High[i]+(1-k)*EMAh[i+1]; // если бар больше порога (Range), то считать EMA
   else EMAh[i]=EMAh[i+1]; // иначе оставить предыдущее значение
  }
где Range - минимальная высота бара. Опять же можно использовать ATR.
Естественно, в это новое условие можно добавить и учет "цвета" свечи, т.е. если цвет не "черный", то оставлять пред.значение EMA.
Если исключить из анализа бары меньше порога в 2 пп., то картинка 1. А если еще и не подходящие по цвету, то - 2.

Что дальше? Дальше можно поэкспериментировать с аргументом EMA - здесь это текущий High. Достаточно будет заменить его на стандартную iMA(), то при ее периоде=1 в качестве аргумента появляется любой тип цены с любым смещением. А при периоде больше 1 частично воплощается идея топикстартера привязки движения трала не к сырой цене, а к MA по ней.
По моей оценке, экстремумы определяются гораздо точнее, чем при использовании, например, Стохастика. Их положение можно использовать для определения тренда, промежуточных фиксаций, добавлений и т.д. Я пока это дело особо пристально не гонял - только вот написал в черновом виде, так что если есть какие-то идеи - милости прошу не стесняться.
Короче, если это кому-то интересно, то могу выложить код (причесывать надо - куча реализаций завиральных идей там болтается - путанно шибко будет так выкладывать).
 
Svinozavr >>:

Вот, например, каналы, образованные EMA, начала истории расчета которых сбрасываются при превышении цены над пред. значении EMA // для верхн. границы канала. Для нижней - зеркально. Здесь три EMA с коэфф., пересчитанными из периодов 12,55,122 (от балды).
Если нужно, то момент сброса начала истории можно заменить на точку входа, а сам коэфф. сделать функцией чего угодно.
Код прилагаю.


Пётр по поводу твоего индикатора ySarFBAv2.mq4  из рисунка видно две волны, высота которых практически одинакова +- 15 пунктов, но в первом случае средние скользящие соразмерно своим периодам берут максимум профита от волны а во втором даже и 40 % недобирают. Нас же интересует то насколько  максимально мы сможем взять профита от движения. Ты можешь изменить свой индикатор так чтобы учитывалось также отдаление цены от средней скользящей(синей) т.е. данный принцип применялся бы только к более быстрым скольз.(КРАСН,ЗЕЛЁН) но не к синей, её принцип построения такой же. В данном случае полезность индикатора повысилось бы  на 30-40%.

 
Возможно. Подумаю. Как со временем будет. И скорее всего, если что-то буду делать, то по-другому. Нет - я понял (местами), что вы хотите, но есть варианты.
===
Блин. Впору ник менять вместе с аватаром. Старею, что ли...