Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 2103
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Язык, биржа, форекс? Не понял о чем.
Р-ка, форекс
Ну функция которая бы считала график баланса по сделкам + комиссию\спред (издержки)
написал вот такое, не знаю правильно ли
calc.balance <- function(sig,x, comision=0){ sig <- ifelse(sig>0, 1, -1) trades.count <- length(rle(c(sig))$values) # сколько было сделок comis <- comision*trades.count sig <- na.omit( dplyr::lag(sig) ) dC <- c(NA, diff(x)) bal <- cumsum(sig * tail(dC, length(sig) ) ) bal <- bal-comis return(bal)}Пример скрипта в R использующий пакет "MetaTrader5"(Python) для загрузки котировок. В R должна быть инсталлирована библиотека "reticulate". Собственно эта библиотека и обеспечивает взаимодействие с Python. Внимательно читаем здесь и здесь. При первом запуске библиотеки reticulate будет предложено установить miniconda. Рекомендую не отказываться. Будет создано conda окружение r-reticulate с установленным python(3.6.xx) и начальным набором пакетов. Если у Вас уже установлен Pyhon (или несколько версий) в начале скрипта нужно активировать нужное окружение. Все команды пакета "MetaTrader5" здесь.
Скрипт инициализации
Для загрузки котировок напишем функцию
#---Function------------------------------- GetCotirPy <- function(sym){ selected = mt5$symbol_select(sym,TRUE) if (selected) py_run_string(" import pandas as pd import MetaTrader5 as mt5 rates = pd.DataFrame(mt5.copy_rates_from_pos(r.sym, r.tf, 1, r.bar))" ) return(py$rates) }Посмотрим структуру полученных данных.
Дальше нужные вычисления..
Р-ка, форекс
Ну функция которая бы считала график баланса по сделкам + комиссию\спред (издержки)
написал вот такое, не знаю правильно ли
Я вот здесь не понял
Р-ка, форекс
Ну функция которая бы считала график баланса по сделкам + комиссию\спред (издержки)
написал вот такое, не знаю правильно ли
Думаю что количество сделок тут не нужно считать. А просто из каждой сделки вычесть спред с комиссией. Как то так:
calc.balance <- function(sig,x, comision=0){ sig <- ifelse(sig>0, 1, -1) sig <- na.omit( dplyr::lag(sig) ) dC <- c(NA, diff(x)) bal <- cumsum(sig * tail(dC, length(sig) ) ) bal <- bal-comision return(bal)}Думаю что количество сделок тут не нужно считать. А просто из каждой сделки вычесть спред с комиссией. Как то так:
Не так. Например
Комиссия будет начисляться не на каждый сигнал, а только при изменении сигнала на противоположный. Я использую функцию
cnt<-function(x){ n <- 1:(length(x)-1) cnt <- 0 for(i in n) {if(x[i]!=x[i+1]) {cnt<-cnt+1}} return(cnt) }Для вышеприведенного вектора сигналов
Непонятная разница.
А для расчета баланса функция
test_bal <- function(sig, CO){ import::here(poorman, Lag = lag) import::here(.from = fTrading, maxDrawDown) sig %>% Lag() %>% na.omit()->sig CO %>% tail(length(sig))-> CO bal <- cumsum(CO * sig) K <- (last(bal)/length(bal) * 10^Dig)%>% round() Kmax <- max(bal)/which.max(bal) * 10^Dig %>% round() dd <- maxDrawDown(bal)[[1]] %>% round() op <-cnt(sig) tst<-list(bal = bal, k = K, k.max = Kmax, op = op, dd = dd) return(tst) }Удачи
Я вот здесь не понял
c "rle" можно посчитать количество смен сигналов, те кол. сделок
видно по "values" что сигнал менялся 5 раз , значит 5 сделок было.
Непонятная разница.
думаю в моей реализации учитывается еще комиссия как бы "той первой сделки , открытия которой у нас нет, есть только закрытие"
типа вот за эту сделку , мой вариант берет комиссию
а ваш вариант начинает брать с этой, ваш вариант вернее, но это легко поправить , просто вычесть "1"
Пример скрипта в R использующий ...
спасибо, буду вникать
c "rle" можно посчитать количество смен сигналов, те кол. сделок
видно по "values" что сигнал менялся 5 раз , значит 5 сделок было.
думаю в моей реализации учитывается еще комиссия и как " бы той первой сделки , открытия которой у нас нет, есть только закрытие"
типа вот за эту сделку , мой вариант берет комиссию
а ваш вариант начинает брать с этой, ваш вариант вернее, но это легко поправить, просто сделать , просто вычесть "1"
Да, Ваш вариант правильнее.
Думаю что количество сделок тут не нужно считать. А просто из каждой сделки вычесть спред с комиссией. Как то так:
так там не получиться, нужно по любому считать
Да, Ваш вариант правильнее.
Да нет же) ваш правильнее!
ведь сделка которая была открыта "ранее" (открытие не попало в наш вектор )
то значит что и комиссия была снята "ранее" ,а не в текущем векторе
но это все , несущественные мелочи..