В этом посте поговорим об уровне программирования который нужен чтобы начать писать роботов с Os.Engine. А также о том, каких простых правил мы придерживаемся при написании кода. Но перед этим одна очень личная история в картинках...
И оно вот это с картинки до сих пор меня преследует. Я утирая кровавые слёзы не смотря на боль всё же, разобрался с той библиотекой, но как понял, 95% остальных покупателей того курса — ничего не поняли. И навалили в интернетах горы кирпичей!
Как я понимаю за счёт того позорища в массах укоренилось мнение что писать роботов из кода — сложное и богомерзкое занятие.
Но, друзья -это не всегда так!
Писать роботов на нашей библиотеке — удовольствие и сплошная радость! Мы делали нашу библиотеку для НАЧИНАЮЩИХ программистов.
В принятых правилах написания кода мы договорились не использовать «синтактический сахар», если он усложнит восприятие кода. Мы также договорились писать комментарии на РУССКОМ ЯЗЫКЕ! И (матерь божья!) Мы сделали уровень совместимости для создания роботов, который не будем менять от версии к версии! Но, по порядку...
Продолжение. Начало здесь.
Вы, наверное, заметили, что в процедуре вычисления параметров модели, описанной выше, я запоминал действительные предсказанные значения, так же как и предсказания направления приращения цены. Я хочу исследовать предсказательную способность величины приращения. Точнее, может ли фильтрация сделок, в случаях, когда величина предсказанного приращения ниже определенного порога, улучшить доходность стратегии? Код ниже представляет такой анализ для небольших порогах приращений. Для упрощения, я конвертировал логарифмы приращений в простые приращения, чтобы получить управление знаком предсказания и облегчения применения порога:
# Test entering a trade only when prediction exceeds a threshold magnitude simp.forecasts <- exp(ag.forecasts) - 1 threshold <- 0.000025 ag.threshold <- ifelse(simp.forecasts > threshold, 1, ifelse(simp.forecasts < -threshold, -1, 0)) ag.threshold.returns <- ag.threshold * returns[(window.length):length(returns)] ag.threshold.returns[1] <- 0 # remove NA ag.threshold.curve <- log(cumprod( 1 + ag.threshold.returns)) both.curves <- cbind(ag.threshold.curve, buy.hold.curve) names(both.curves) <- c("Strategy returns", "Buy and hold returns") # plot both curves together plot(x = both.curves[,"Strategy returns"], xlab = "Time", ylab = "Cumulative Return", main = "Cumulative Returns", major.ticks= "quarters", # minor.ticks = FALSE, ylim = c(-0.2, 0.45), col = "darkorange") lines(x = both.curves[,"Buy and hold returns"], col = "blue") legend(x = 'bottomleft', legend = c("Strategy", "B&H"), lty = 1, col = myColors)
Статья из блога Robot Wealth.
Продолжая мои исследования в области моделирования временных серий, я решил изучить авторегрессивные и условные гетероскедатичные модели. В частности, я взял авторегрессивную модель ARIMA и общую авторегрессивную гетероскедатичную модель GARCH, так как на них часто сылаются в финансовой литературе. Далее следует описание того, что я узнал об этих моделях и основной процесс нахождения их параметров, а также простая торговая стратегия, основанная на предсказаниях полученной модели.
Сначала дадим несколько необходимых определений. Я не хочу воспроизводить всю теорию целиком, ниже дан краткий обзор моделирования временных серий, в частности ARIMA и GARCH моделей:
В первую очередь, вычисление ARIMA и GARCH моделей это способ узнать, при каких прошлых наблюдениях, шуме и дисперсии временной серии возможно предсказать следующее значения этой серии. Такие модели, параметры которых правильно установлены, имеют некоторую предсказательную способность, предполагая, конечно, что эти параметры остаются постоянными на некоторое время для данного процесса.
Трендовые алгоритмы льют. Боковик поедает депозит.
«Штиль» — одним словом. В такие моменты главное много не потерять и грамотно распределять нагрузку на ботов.
Торгуем дальше!