Как рассчитать %R Вильямса в RStudio?

Я пытаюсь написать функцию для вычисления% R Уильямса по данным в R. Вот мой код:

getSymbols('AMD', src = 'yahoo', from = '2018-01-01')

wr = function(high, low, close, n) {
  highh = runMax((high),n)
  lowl = runMin((low),n)
  -100 * ((highh - close) / (highh - lowl))
}

williampr = wr(AMD$AMD.High, AMD$AMD.Low, AMD$AMD.Close, n = 10)

После реализации сигнала покупки/продажи/удержания он возвращает целое число (0):

## 1 = BUY, 0 = HOLD, -1 = SELL
## implement Lag to shift the time back to the previous day
tradingSignal = Lag(
  ## if wpr is greater than 0.8, BUY
  ifelse(Lag(williampr) > 0.8 & williampr < 0.8,1,
  ## if wpr signal is less than 0.2, SELL, else, HOLD
  ifelse(Lag(williampr) > 0.2 & williampr < 0.2,-1,0)))
## make all missing values equal to 0
tradingSignal[is.na(tradingSignal)] = 0
## see how many SELL signals we have
which(tradingSignal == "-1")

Что я делаю не так?

Для таких людей, как я, которые не знакомы с этой областью, было бы полезно, если бы вы включили что-то о том, что такое Williams %R. Прямо сейчас я не могу точно сказать, что вы пытаетесь получить

camille 22.03.2022 00:48

В пакете TTR уже определена функция Williams %R. Обязательно посмотрите функции Op, Hi, Lo, Cl, Ad в quantmod.

G. Grothendieck 22.03.2022 14:12
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Было бы неплохо указать, что вы использовали пакет quantmod в своем вопросе.

Есть две вещи, которые мешают этому работать.

Вы не проверили то, что ожидали! Все ваши результаты в williampr отрицательные. Кроме того, вы умножили значения на 100, поэтому 80 % равно 80, а не 0,8. Я удалил -100 *.

Я делал то же самое так много раз.

wr = function(high, low, close, n) {
  highh = runMax((high),n)
  lowl = runMin((low),n)
  ((highh - close) / (highh - lowl))
}

Вот и все. Теперь это работает.

which(tradingSignal == "-1")
#  [1]   13   15   19   22   39   71   73   84   87  104  112  130  134  136  144  146  151  156  161  171  175
# [22]  179  217  230  255  268  288  305  307  316  346  358  380  386  404  449  458  463  468  488  492  494
# [43]  505  510  515  531  561  563  570  572  574  594  601  614  635  642  644  646  649  666  668  672  691
# [64]  696  698  719  729  733  739  746  784  807  819  828  856  861  872  877  896  900  922  940  954  968
# [85]  972  978  984  986 1004 1035 1048 1060 

Потрясающий! Спасибо за ваш отзыв.

bigmanlar 22.03.2022 04:10

Другие вопросы по теме