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



Зарегистрирован: 20.04.2015
Сообщения: 383
Откуда: VRN

СообщениеДобавлено: Сб Дек 05, 2015 6:28 pm Ответить с цитатой Вернуться к началу

Есть ли такой массив, который берет число одного массива и присваивает его другому?
Пример, хочу чтоб период RSI изменялся на каждом баре в зависимости от изменения ATR
Код:
A1=ATR(14);
R1=RSI(A1);

_________________
Нам не дано знать всего.
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
000
Site Admin


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

СообщениеДобавлено: Сб Дек 05, 2015 10:16 pm Ответить с цитатой Вернуться к началу

Некоторые функции в Ами могут работать с переменным периодом. В хелпере есть перечень таких функций
Цитата:
AMA
AMA2
DEMA
HHV
HHVBars
LinRegSlope
LinearReg
LinRegIntercept
LLV
LLVBars
MA
Ref
StdErr
Sum
TEMA
TSF
WMA

В такие функции можно подставлять в аргумент не константу а массив. Функция RSI не позволяет использовать массив в аргументе.

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



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

СообщениеДобавлено: Сб Дек 05, 2015 11:43 pm Ответить с цитатой Вернуться к началу

MrDzenLi писал(а):
Есть ли такой массив, который берет число одного массива и присваивает его другому?
Пример, хочу чтоб период RSI изменялся на каждом баре в зависимости от изменения ATR
Код:
A1=ATR(14);
R1=RSI(A1);


Variable period RSI by Tomasz Janeczko via AFL
https://groups.yahoo.com/neo/groups/amibroker/conversations/messages/189184

Код:
// by Tomasz Janeczko
// slightly modified by fxshrat

function VariableWilders( Var, period ) {
    factor = 1 / period;
    return AMA( Var, factor );
}

function VariableRSI( Var, period ) {
    diff = Var - Ref( Var, -1 );
    diff[0] = 0;

    Up = Max( diff, 0 );
    Dn = Max( -diff, 0 );

    Ut = VarWilders( Up, period );
    Dt = VarWilders( Dn, period );
   
    result = 100 * ( Ut / ( Ut + Dt + 1e-30 ) );
    return IIf( Cum(1) > period, result, Null );
}

newday = Day() != Ref( Day(), -1 );
Plot( VariableRSI( Close, BarsSince( newday ) +1 ), "Variable period RSI", colorRed );
Посмотреть профиль Отправить личное сообщение
MrDzenLi



Зарегистрирован: 20.04.2015
Сообщения: 383
Откуда: VRN

СообщениеДобавлено: Вс Дек 06, 2015 12:38 am Ответить с цитатой Вернуться к началу

Понял, спасибо.

_________________
Нам не дано знать всего.
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
MrDzenLi



Зарегистрирован: 20.04.2015
Сообщения: 383
Откуда: VRN

СообщениеДобавлено: Вс Мар 13, 2016 3:18 pm Ответить с цитатой Вернуться к началу

trashfx писал(а):

Variable period RSI by Tomasz Janeczko via AFL
https://groups.yahoo.com/neo/groups/amibroker/conversations/messages/189184

А как тут подключить переменную?
Чет у меня вообще не двигается...
Код:

var=Param("var",14,5,30,1);
factor=ATR(14);
period=Param("period",1,1,15,1);

function VarWilders( Var, period ) {
    factor = 1 / period;
    return AMA( Var, factor );
}

function VariableRSI( Var, period ) {
    diff = Var - Ref( Var, -1 );
    diff[0] = 0;

    Up = Max( diff, 0 );
    Dn = Max( -diff, 0 );

    Ut = VarWilders( Up, period );
    Dt = VarWilders( Dn, period );
   
    result = 100 * ( Ut / ( Ut + Dt + 1e-30 ) );
    return IIf( Cum(1) > period, result, Null );
}

newday = Day() != Ref( Day(), -1 );
 Plot( VariableRSI( Close, BarsSince( newday ) +1 ), "Variable period RSI", colorRed );

_________________
Нам не дано знать всего.
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
000
Site Admin


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

СообщениеДобавлено: Вс Мар 13, 2016 8:26 pm Ответить с цитатой Вернуться к началу

Эта пользовательская функция написана больше для того, чтобы в RSI можно было применять переменный период. Конечно можно ее использовать для того, чтобы расчитать RSI с постоянным периодом но на массиве отличном от Close, но нафига? если есть стандартная функция RSIa().
А вызвать? Ну вот так же.
Код:
VariableRSI( MA(Close, 9), 14 )

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen