Автор |
Сообщение |
Torino
Зарегистрирован: 27.01.2009
Сообщения: 72
|
Добрый день!
Изучаю коды индикаторов, выложенные на этом сайте.
Добрался до "Индикатора окончания тенденции на основе стандартной ошибки". (страничка)
После применения индикатора на данные, получаю вот что (скриншот внизу сообщения).
Красные столбы, обозначающие окончание тенденции, появляются не там, где изменяется тенденция, а через 3 бара.
Попробовал поменять код на
Код: |
startRegressionLength = LastValue(Param("startRegressionLength", 7, 6, 15, 1));
|
На столбах это не отразилось.
Что я делаю не так? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Угу. Действительно. Есть такая фигня. Посмотрю в чем там дело. Только не сегодня и не завтра. Постараюсь в понедельник. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Спасибо за замечание. Обнаружил ошибки в коде. Вроде исправил. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Torino
Зарегистрирован: 27.01.2009
Сообщения: 72
|
Олег, спасибо, теперь работает!
Вопрос появился:
насколько я понял, ширина канала задается строкой
Код: |
Level = EMA(abs(C-Ref(C, -1)), 100); |
Каким образом можно "поиграть" с шириной канала?
Я имею ввиду, что в этой формуле нужно изменить, чтобы изменить ширину канала? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Torino писал(а): |
Вопрос появился:
насколько я понял, ширина канала задается строкой
Код: |
Level = EMA(abs(C-Ref(C, -1)), 100); |
Каким образом можно "поиграть" с шириной канала?
Я имею ввиду, что в этой формуле нужно изменить, чтобы изменить ширину канала? |
Совершенно верно. Этой строкой.
Можно, например, попробовать для изменения "ширины" канала умножить на коэффициент.
Код: |
Level = EMA(abs(C-Ref(C, -1)), 100) *
Param("Level koeff", 1, 0.5, 2, 0.1);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Torino
Зарегистрирован: 27.01.2009
Сообщения: 72
|
Спасибо!
Отличная функция Param.
Попробую заменить ее на Optimize и подобрать подходящие параметры для моих данных. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Torino
Зарегистрирован: 27.01.2009
Сообщения: 72
|
Такой вопрос: как учесть наличие "окна" (скачка) в графике (см. картинку) ?
Например: при обнаружении окна (и принудительно в начале торговой сессии) начать построение линии регрессии с текущей свечи. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Torino писал(а): |
Такой вопрос: как учесть наличие "окна" (скачка) в графике (см. картинку) ?
Например: при обнаружении окна (и принудительно в начале торговой сессии) начать построение линии регрессии с текущей свечи. |
По идее просто.
В начале кода надо добавить идентификацию гепа. Например
Код: |
gap = O < Ref(L, -1) or O > Ref(H, -1);
|
А потом в цикле принудительно прерывать регрессию в случае возникновения гепа. Примерно так
Код: |
if(StError(i - StartBar, i) < Level[i] OR !gap) // прорыв отсутствует
{
j = i - StartBar; // длинна линии регрессии
Error[i] = StError(j, i); // обращение к функции. Величина ошибки на текущем баре
}
else // Прорыв. Начало отсчета новой регрессии
{
RegressionEnd[i] = 1; // отмечаем конец предыдущей тенденции
if(i + startRegressionLength >= BarCount)
break;
|
Примерно так. К сожалению сейчас проверить как это работает не могу. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Torino
Зарегистрирован: 27.01.2009
Сообщения: 72
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ошибочка.
В этой строке
Код: |
if(StError(i - StartBar, i) < Level[i] OR !gap) // прорыв отсутствует
|
надо
Код: |
if(StError(i - StartBar, i) < Level[i] AND !gap) // прорыв и геп отсутствуют
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Torino
Зарегистрирован: 27.01.2009
Сообщения: 72
|
|
Посмотреть профиль Отправить личное сообщение |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
Если интересно, у меня есть код от комрада Lee, в котором он рисует регрессионый канал в виде гистограммы. ну и соответственно как только пересекаем 0 считаем что цена вышла из канала и пошла своим путем
может будет интересен, ну или по крайней мере вариант в afl так же не помешает
исходник естественно на Изи |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Torino
Зарегистрирован: 27.01.2009
Сообщения: 72
|
Спасибо за предложение, но мне бы с afl сначала разобраться ))) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Torino
Зарегистрирован: 27.01.2009
Сообщения: 72
|
После внесения правок в код получил такую ошибку:
Код: |
Error 6. Condition in if, while, for statements has to be Numeric OR Boolean type.
You can NOT use array here, please use [] (array subscript operator) to access array element |
Поставил скобки:
Код: |
if(StError(i - StartBar, i) < Level[i] AND !gap[i]) // прорыв и геп отсутствуют |
Получил вот такую картину (см. приложенный файл)
Т.е. начало оценки ошибки началось до появления скачка.
Вернул старый код. Положение зеленой линии не изменилось.
Я намудрил с [i] ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Проверил. Все правильно. Именно в том месте геп игнорируется потому, что предыдущая тенденция закончилась совсем незадолго перед гепом, а для построения регрессиинеобходимо минимум 3 бара. Поскольку новая регрессия начинает строится с момента окончания старой, то код в этом месте "перепрыгивает" три бара
строка
Код: |
i = i + startRegressionLength;
|
Вот поэтому код и не замечает этого гепа. В остальных случаях работает нормально.
Вот, сижу думаю как сделать.. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|