Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Как исполтзовать custom indicator в тестере? Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
Caravancheg



Зарегистрирован: 02.08.2008
Сообщения: 46

СообщениеДобавлено: Вт Янв 06, 2009 11:54 am Ответить с цитатой Вернуться к началу

В тестере я могу написать что-то типа
Buy = Cross( MACD(), Signal() );

А как сделать так, чтобы пользовательский индикатор задействован был?

Ну, например, здесь есть пример интересного IIR2, который рисует линию 4-мя цветами.
Вот как надо изменить IIR2, чтобы он возвращал числа (1,2,3,4) и, соответственно использовтаь его как дополнительное условие?
Что-то типа
Buy = Cross( MACD(), Signal() ) and (IIR2 = 1);

А то ведь сейчас он только графики скрасивые рисует, а ничего не возвращает для вызовов извне?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Янв 06, 2009 12:36 pm Ответить с цитатой Вернуться к началу

Очень просто. Надо совсем немного изменить код. Примерно так
Код:

k=Param("k", 0.3, 0.1, 0.7, 0.1);

// Фильтр с бесконечной импульсной характеристикой
function IIR2( input, f0, f1, f2 )
{
  IIR[ 0 ] = input[ 0 ];
  IIR[ 1 ] = input[ 1 ];
  for( i = 2; i < BarCount; i++ )
  {
   IIR[ i ] = f0 * input[ i ] + f1 * IIR[ i - 1 ] + f2 * IIR[ i - 2 ];
  }
  return IIR;
}

y=IIR2( Close, 0.3, 1.2+K, -0.5-K);

// B. Convexity definition
Convex = (y - Ref(y, -1)) >= (y-Ref(y, -2))/2;
Concave = NOT(Convex);
Up = y>=Ref(y, -1);
Down= NOT(Up);

// Trend phases
Bullstart = Convex AND Up; // from A to B
Bullend = Concave AND Up; // from B to C
Bearstart = Concave AND Down; // from C to D
Bearend = Convex AND Down; // from D to E

Color = IIf(Bullstart, colorGreen, IIf(Bullend, colorBlue, IIf(Bearstart, colorRed, colorYellow)));
IIR2_new = IIf(Bullstart, 1, IIf(Bullend, 2, IIf(Bearstart, 3, 4)));

Теперь в этом коде есть массив IIR2_new который принимает значения 1,2,3,4 в зависимости от цвета. Дальше в это код можно смело вписывать условия покупки/продажи. Типа
Код:

Buy = Cross( MACD(), Signal() ) and IIR2_new == 1;


Если надо сравнить величины, то следует писать два знака равенства "==", а не "=".

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Caravancheg



Зарегистрирован: 02.08.2008
Сообщения: 46

СообщениеДобавлено: Вт Янв 06, 2009 3:24 pm Ответить с цитатой Вернуться к началу

О! Супер!
Спасибо!

Еще возникло желание отслеживать именно точки перегиба (ну примерно как Cross).
Сделал так:
IIR_Max = (y < Ref(y, -1)) AND (Ref(y, -2) <Ref> Ref(y, -1)) AND (Ref(y, -2) >= Ref(y, -1));

Вполне устраивает, но наверняка есть более правильный способ?

В частности у меня запаздывание. По хорошему-то надо "вперед" заглядывать, чтобы ловить именно экстремум.
Производных тут нет, чтобы к 0 приравнять? Smile
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Янв 06, 2009 3:38 pm Ответить с цитатой Вернуться к началу

Цитата:

Вполне устраивает, но наверняка есть более правильный способ?

Может и есть, но сперва надо увидеть способ которым воспользовался. К сожалению у форума есть глюк и код покоцало... Прочитай тему http://amisite.ru/phpBB2/viewtopic.php?t=223

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Caravancheg



Зарегистрирован: 02.08.2008
Сообщения: 46

СообщениеДобавлено: Вт Янв 06, 2009 3:49 pm Ответить с цитатой Вернуться к началу

Да нет, ничего не покоцало.
Я именно так и добавил пару массивов:
к твоему IIR = IIf(Bullstart, 1, IIf(Bullend, 2, IIf(Bearstart, 3, 4)));
еще
IIR_Max = (y < Ref(y, -1)) AND (Ref(y, -2) <= Ref(y, -1));
IIR_Min = (y > Ref(y, -1)) AND (Ref(y, -2) >= Ref(y, -1));
Т.е. сравниваются три элемента, если средний меньше (больше) остальных - значит экстремум пробежали и надо мне свистнуть.

А вопрос такой - есть ли более простой способ находить экстремум?
Для чего угодно, хоть для MA.
Писать именно такой код каждый раз или есть какая-то функция?
типа "индикатор развернулся".
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Янв 06, 2009 7:58 pm Ответить с цитатой Вернуться к началу

Caravancheg писал(а):

Да нет, ничего не покоцало.

А это что было?
(Ref(y, -2) <Ref> Ref(y, -1))
Цитата:

А вопрос такой - есть ли более простой способ находить экстремум?

Нормальный способ. Лучше я не знаю.
При необходимости надо писать каждый раз.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen