Автор |
Сообщение |
Caravancheg
Зарегистрирован: 02.08.2008
Сообщения: 46
|
В тестере я могу написать что-то типа
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
|
Очень просто. Надо совсем немного изменить код. Примерно так
Код: |
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
|
О! Супер!
Спасибо!
Еще возникло желание отслеживать именно точки перегиба (ну примерно как Cross).
Сделал так:
IIR_Max = (y < Ref(y, -1)) AND (Ref(y, -2) <Ref> Ref(y, -1)) AND (Ref(y, -2) >= Ref(y, -1));
Вполне устраивает, но наверняка есть более правильный способ?
В частности у меня запаздывание. По хорошему-то надо "вперед" заглядывать, чтобы ловить именно экстремум.
Производных тут нет, чтобы к 0 приравнять? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
Вполне устраивает, но наверняка есть более правильный способ?
|
Может и есть, но сперва надо увидеть способ которым воспользовался. К сожалению у форума есть глюк и код покоцало... Прочитай тему http://amisite.ru/phpBB2/viewtopic.php?t=223 |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Caravancheg
Зарегистрирован: 02.08.2008
Сообщения: 46
|
Да нет, ничего не покоцало.
Я именно так и добавил пару массивов:
к твоему 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
|
Caravancheg писал(а): |
Да нет, ничего не покоцало.
|
А это что было?
(Ref(y, -2) <Ref> Ref(y, -1))
Цитата: |
А вопрос такой - есть ли более простой способ находить экстремум?
|
Нормальный способ. Лучше я не знаю.
При необходимости надо писать каждый раз. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|