Квантмод Хейкин-Аши заговор недоступен - PullRequest
0 голосов
/ 27 декабря 2018

Недавно я работал с пакетом quantmod для R. Идея состоит в том, чтобы использовать блестящий пакет для разработки пользовательского интерфейса веб-приложения, в то же время используя функции Quantmod для построения графиков биржевых данных для пользователей.

Тем не менее, из документации исходного кода, кажется, нет заранее написанных функций (таких как chartSeries) для построения графиков Хейкина-Аши.

Есть ли альтернативное решение для построения графиков Хейкина-Аши без построения графикаФункция с нуля.

Любая помощь приветствуется.

enter image description here

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Версия Rcpp, если вам нужна скорость.Это тип сценария, где Rcpp действительно сияет:

Rcpp::cppFunction('NumericMatrix RawHeikinAshi(NumericMatrix x, CharacterVector n) {
// assumes OHLC matrix input
int nrow = x.nrow(), ncol = 4, Op=0, Hi=1, Lo=2, Cl=3;
NumericMatrix ha(nrow,ncol);
for (int i = 0; i < nrow; i++) {
    ha(i, Cl) = (x(i,Op) + x(i,Hi) + x(i,Lo) + x(i,Cl)) / 4.0;
    ha(i, Op) = (i > 0) ? ((ha(i - 1, Op) + ha(i - 1, Cl)) / 2.0) : x(i, Op);
    ha(i, Hi) = std::max(x(i, Hi), std::max(ha(i, Op), ha(i, Cl)));
    ha(i, Lo) = std::min(x(i, Lo), std::min(ha(i, Op), ha(i, Cl)));
}
colnames(ha) = n;
return ha;
}')

HAOHLC <- function(x) {
    x <- OHLC(try.xts(x))
    r <- RawHeikinAshi(x, paste0("ha.", colnames(x)))
    return(reclass(r, x))
}

Тесты.

> p <- getSymbols("SPY")
> microbenchmark(HAOHLC(p), heikin_ashi(p), times = 100L, unit = "ms")

Unit: milliseconds
          expr       min          lq        mean     median         uq        max neval
     HAOHLC(p)   0.36409   0.4275205   0.5198086   0.502614   0.552392   1.378134   100
heikin_ashi(p) 563.33925 582.6144955 609.0082902 591.338550 620.179235 802.885348   100
0 голосов
/ 29 декабря 2018

В каком-то устаревшем / не работающем коде Quantmod есть некоторые скрытые функции Heikin-Ashi.Но используемая формула неверна и может привести к ошибкам.Но график Хейкин-Аши - это просто график свечи, но с разными значениями открытия, максимума, минимума и закрытия.Но они основаны только на стандартных данных ohlc.Зная формулу, вы можете самостоятельно рассчитать числа и передать их на график свечей.

Я создал эту функцию в своем собственном пакете на github.Но если вы используете эту функцию, вы готовы идти.Я проверил его на chartSeries и chart_Series из Quantmod, rtsplot из rtsplot и geom_candlestick из tidyquant, чтобы убедиться, что все они работают правильно с данными.По сравнению с данными брокера и платформами, которые показывают графики Хейкин-Аши, результаты одинаковы.

В основном:

library(quantmod)
ADM <- getSymbols("ADM", from = "2018-10-01", auto.assign = FALSE)
ha_ADM <- heikin_ashi(AMD)
chartSeries(ha_ADM) # or chart_Series or rtsplot or geom_candlestick

функция heikin_ashi:

heikin_ashi <- function(data) {

  if(!quantmod::is.OHLC(data)) stop("data must contain OHLC columns")

  heikin_close <- xts::xts(Matrix::rowMeans(quantmod::OHLC(data)), order.by = index(data))
  heikin_open  <- quantmod::Op(data)

  # need a loop: heiki ashi open is dependent on the previous value
  for(i in 2:nrow(data)) {
    heikin_open[i] <- (heikin_open[i-1] + heikin_close[i-1]) / 2
  }

  heikin_high <- xts::xts(apply(cbind(quantmod::Hi(data), heikin_open, heikin_close), 1, max), order.by = index(data))
  heikin_low <- xts::xts(apply(cbind(quantmod::Lo(data), heikin_open, heikin_close), 1, min), order.by = index(data))

  out <- merge(heikin_open, heikin_high, heikin_low, heikin_close)
  out <- setNames(out, c("Open", "High", "Low", "Close"))
}
...