Автор |
Сообщение |
MrDzenLi
Зарегистрирован: 20.04.2015
Сообщения: 383
Откуда: VRN
|
Есть ли такой массив, который берет число одного массива и присваивает его другому?
Пример, хочу чтоб период RSI изменялся на каждом баре в зависимости от изменения ATR
Код: |
A1=ATR(14);
R1=RSI(A1); |
|
_________________ Нам не дано знать всего. |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Некоторые функции в Ами могут работать с переменным периодом. В хелпере есть перечень таких функций
Цитата: |
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
|
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
|
Понял, спасибо. |
_________________ Нам не дано знать всего. |
|
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number |
|
MrDzenLi
Зарегистрирован: 20.04.2015
Сообщения: 383
Откуда: VRN
|
А как тут подключить переменную?
Чет у меня вообще не двигается...
Код: |
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
|
Эта пользовательская функция написана больше для того, чтобы в RSI можно было применять переменный период. Конечно можно ее использовать для того, чтобы расчитать RSI с постоянным периодом но на массиве отличном от Close, но нафига? если есть стандартная функция RSIa().
А вызвать? Ну вот так же.
Код: |
VariableRSI( MA(Close, 9), 14 ) |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|