Обсуждение статьи "Третье поколение нейросетей: "Глубокие нейросети"" - страница 8

 
СанСаныч Фоменко:

Позвольте свои пять копеек.

Почему так сложно с R? Какие-то индикаторы, сервера...

Ведь все работает (по крайней мере у меня) через прилагаемую библиотеку. Пишешь строковую переменную в мкл, которая суть вызов функции, передаешь в R, который исполняет необходимое количество функций R и счастье наступило...

 

Или я чего-то не понимаю? 

По всей видимости недопонимание.

Я хочу запустить в тестере mql4 все это дело.

Без тестера все хорошо работает, счастье есть.

В MQL5 это не работает, так как разная разрядность запускаемых объектов. 

В чем отличие прилагаемой библиотеки для работы с R из статьи и той, что вы предлагаете (вес разный)? 

 
kimkarus:

По всей видимости недопонимание.

Я хочу запустить в тестере mql4 все это дело.

Без тестера все хорошо работает, счастье есть.

В MQL5 это не работает, так как разная разрядность запускаемых объектов. 

В чем отличие прилагаемой библиотеки для работы с R из статьи и той, что вы предлагаете (вес разный)? 

Я эту библиотеку использую сейчас. 

На предыдущей версии МТ4 (до 540) я использовал тестер без проблем.

Сама библиотека написана на паскале, имеется исходник. Я не вижу никаких проблем по использованию этой библиотеки в мкл4 или мкл5.

Думаю, что вся проблема в замысловатой схеме, на которой и затыкается тестер 

 
СанСаныч Фоменко:

Позвольте свои пять копеек.

Почему так сложно с R? Какие-то индикаторы, сервера...

Ведь все работает (по крайней мере у меня) через прилагаемую библиотеку. Пишешь строковую переменную в мкл, которая суть вызов функции, передаешь в R, который исполняет необходимое количество функций R и счастье наступило...

 

Или я чего-то не понимаю? 

Приветствую СанСаныч.

Вариант клиент-сервер привлекателен  по нескольким причинам:

- работа по множеству инструментов одновременно.

- Но главное - сервер позволяет двухсторонний неблокирующий обмен информацией не только клиент<->сервер (клиентов  может быть до 128) но и между клиентами и другими серверами. Т.е. во время длинных вычислений обмен данными с сервером и другими клиентами доступен. Единственное ограничение - нельзя запрашивать результат вычисления до его завершения, Rterm упадет.Это позволяет построить  сложную иерархическую систему с одним Rterm управляющим всеми остальными. Конечно если Вам это нужно.

- Возможность передать данные индикатору, который отрисует на графике нужную информацию. Мой опыт говорит, что нет надежнее контроля чем визуальный. А рисовать из эксперта проблематично.

Конечно все можно собрать в эксперте, но при работе по нескольким парам возникают некоторые проблемы, которые конечно можно решать и другими способами.

Это один из вариантов работы, но не значит, что единственный или идеальный.

Я стараюсь в статье показать максимальное количество возможных вариантов работы. А уж пользователь выберет, что ему необходимо.

Из сложного легко сделать простое, обратное трудно. Хотя на мой взгляд  предложенный вариант клиент-сервер не так уж и сложен. Посмотрите на количество кода на МКЛ5 которое нужно для решения такой задачи.

Удачи

 
kimkarus:

По всей видимости недопонимание.

Я хочу запустить в тестере mql4 все это дело.

Без тестера все хорошо работает, счастье есть.

В MQL5 это не работает, так как разная разрядность запускаемых объектов. 

В чем отличие прилагаемой библиотеки для работы с R из статьи и той, что вы предлагаете (вес разный)? 

А можно узнать зачем Вам нужно запускать эксперт в тестере?
 
kimkarus:

Ошибки вроде ушли. Но не запускается второй экземпляр Rterm при вызове индикатора из эксперта через iCustom(). Есть ли другой путь запустить индикатор вместе с экспертом, кроме включения индикатора в эксперта?

О каком индикаторе идет речь? Какой индикатор Вы хотите использовать через iCustom()?

 По поводу MQL5. Просто начал осваивать язык с него.

Из того что изучено. Есть несомненный плюс создании эксперта на основании голосования индикаторов (сигналы), обменом буферами индикаторов.

Все вычисления, в том числе индикаторов, нужно делать в R. А там вообще нет никаких ограничений для Ваших фантазий в плане математики. Из МТ берем только котировки!

Все конечно реализуется и в MQL4, но через "костыли", а не из коробки. Также есть некоторые сложности при переносе кода из MQL4 в MQL5 из-за отсутствия базовых простых функций в MQL5, которые нужно были ранее, но теперь подальше спрятаны.

По поводу mt4Rb7.dll. Эта библиотека скомпилирована как 32 битный объект системы и поэтому не запустится в Meta Trader 5, так как она работает, как 64 битная. Подходит только 32 битная версия Meta Trader'а, пятую версию которого я не нашел. Поэтому тестирую пока в 4-ом.

Попробуйте написать автору. У него есть ветка где он периодически появляется. Но по моей информации для МТ5 библиотека не переделывалась.

Вам нужно немного перестроить свои представления о структуре эксперта. Эксперт должен заниматься своим делом (исполнять приказы, следить за позициями ну и т.д и т.п). Для реализации этих задач не важно на каком языке (МКЛ4 или МКЛ5) вы будете это реализовать. Это вопрос предпочтений. Расчеты, анализ и другие сложные задачи нужно реализовать в R процессе.

Разделите "делать" и "думать". Никакой  МКЛ не предназначен для "думать". Он заточен "делать".

Нужно использовать каждый язык для того, для чего он был создан.

Удачи

 

Vladimir Perervenko

Добавьте в статью дополнительную информацию по работе с R Studio

  •  Чтобы корректно все запускалось нужно убедиться, что в файле hosts нет других ссылок на "localhost".
  • Обязательно поставить все пакеты и запустить их командой (в рабочем пространстве R):

install.packages("R.matlab")
install.packages("deepnet")
install.packages("caret")
install.packages("h2o")
install.packages("TTR")
install.packages("rminer")
install.packages("foreach")
install.packages("doParallel")
install.packages("svSocket")
install.packages("lattice")
install.packages("ggplot2")
install.packages("statmod")
install.packages("kknn")
install.packages("iterators")
install.packages("parallel")

library("R.matlab")
library("deepnet")
library("caret")
library("h2o")
library("TTR")
library("rminer")
library("foreach")
library("doParallel")
library("svSocket")
library("lattice")
library("ggplot2")
library("statmod")
library("kknn")
library("iterators")
library("parallel")
 
kimkarus:

Vladimir Perervenko

Добавьте в статью дополнительную информацию по работе с R Studio

  •  Чтобы корректно все запускалось нужно убедиться, что в файле hosts нет других ссылок на "localhost".

Добрый день.

По поводу файла hosts не понял. Можно более подробно ?

Удачи

 
kimkarus:

Vladimir Perervenko

Добавьте в статью дополнительную информацию по работе с R Studio

  •  Чтобы корректно все запускалось нужно убедиться, что в файле hosts нет других ссылок на "localhost".
  • Обязательно поставить все пакеты и запустить их командой (в рабочем пространстве R):

install.packages("R.matlab")
install.packages("deepnet")
install.packages("caret")
install.packages("h2o")
install.packages("TTR")
install.packages("rminer")
install.packages("foreach")
install.packages("doParallel")
install.packages("svSocket")
install.packages("lattice")
install.packages("ggplot2")
install.packages("statmod")
install.packages("kknn")
install.packages("iterators")
install.packages("parallel")

library("R.matlab")
library("deepnet")
library("caret")
library("h2o")
library("TTR")
library("rminer")
library("foreach")
library("doParallel")
library("svSocket")
library("lattice")
library("ggplot2")
library("statmod")
library("kknn")
library("iterators")
library("parallel")

Я использую другую форму записи для проверки инсталлированных пакетов:

packets <- Hmisc::Cs(R.matlab, deepnet, caret, h2o, TTR, rminer, foreach, doParallel, 
                        svSocket, lattice, ggplot2, statmod, kknn, iterators, parallel)
for(i in 1:length(packets)) {
  if (! (packets[i] %in% rownames(installed.packages()))) { 
    install.packages(packets[i]) }
}

А загружать библиотеки нужно в описании функций которые их применяют. Хотя можно и так при инициализации эксперта.

Так зачем Вам все же запуск эксперта в тестере??

Удачи

 

В ходе долгой отладки скриптов R, выявил баг, который сложно отловить, если поступающие данные имеют NA. Просто не будет срабатывать сигнал. В файл "e_SAE_init.r" рекомендуется добавить сроку очиcтки NA в функцию Test(dt,x) перед new.data <- predict(prepr, tail(x, 50)): x <- na.omit(x);

Это похоже на "костыль", но ничего лучше пока не придумал. 

Без этого будет происходить скрытая ошибка: 

Error in if (sqrt(denom) > .Machine$double.eps) x/sqrt(denom) else x *  : missing value where TRUE/FALSE needed

 
kimkarus:

В ходе долгой отладки скриптов R, выявил баг, который сложно отловить, если поступающие данные имеют NA. Просто не будет срабатывать сигнал. В файл "e_SAE_init.r" рекомендуется добавить сроку очиcтки NA в функцию Test(dt,x) перед new.data <- predict(prepr, tail(x, 50)): x <- na.omit(x);

Это похоже на "костыль", но ничего лучше пока не придумал. 

Без этого будет происходить скрытая ошибка: 

Error in if (sqrt(denom) > .Machine$double.eps) x/sqrt(denom) else x *  : missing value where TRUE/FALSE needed

kimkarus:

В ходе долгой отладки скриптов R, выявил баг, который сложно отловить, если поступающие данные имеют NA. Просто не будет срабатывать сигнал. В файл "e_SAE_init.r" рекомендуется добавить сроку очиcтки NA в функцию Test(dt,x) перед new.data <- predict(prepr, tail(x, 50)): x <- na.omit(x);

Это похоже на "костыль", но ничего лучше пока не придумал. 

Без этого будет происходить скрытая ошибка: 

Error in if (sqrt(denom) > .Machine$double.eps) x/sqrt(denom) else x *  : missing value where TRUE/FALSE needed

Это утверждение неверно.

В функции Test(dt, x) - x это входные данные вычисляемые функцией In(). Посмотрим ее в скрипте "i_SAE_fun.r"

In <- function(p = 16){
        require(TTR)
        adx <- ADX(price, n = p)
        ar <- aroon(price[ ,c('High', 'Low')], n = p)[ ,'oscillator']
        cci <- CCI(price[ ,2:4], n = p)
        chv <- chaikinVolatility(price[ ,2:4], n = p)
        cmo <- CMO(price[ ,'Med'], n = p)
        macd <- MACD(price[ ,'Med'], 12, 26, 9)[ ,'macd']
        osma <- macd - MACD(price[ ,'Med'],12, 26, 9)[ ,'signal']
        rsi <- RSI(price[ ,'Med'], n = p)
        stoh <- stoch(price[ ,2:4], 14, 3, 3)
        smi <- SMI(price[ ,2:4],n = p, nFast = 2, nSlow = 25, nSig = 9)
        vol <- volatility(price[ ,1:4], n = p, calc="yang.zhang", N=96)
        In <- cbind(adx, ar, cci, chv, cmo, macd, osma, rsi, stoh, smi, vol)
        return(In)
}

Это целый ряд индикаторов. Вычислим их на истории price[] длиной 2000 баров.

> x <- In()
Loading required package: TTR

Посмотрим какие данные мы получили

> summary(x)
      DIp             DIn                DX          
 Min.   :20.24   Min.   :  9.546   Min.   : 0.04605  
 1st Qu.:43.61   1st Qu.: 31.022   1st Qu.:10.28793  
 Median :50.46   Median : 39.297   Median :19.31075  
 Mean   :49.01   Mean   : 41.833   Mean   :21.82957  
 3rd Qu.:55.78   3rd Qu.: 49.441   3rd Qu.:31.18539  
 Max.   :74.50   Max.   :116.050   Max.   :71.84495  
 NA's   :16      NA's   :16        NA's   :16        
      ADX               ar                cci           
 Min.   : 7.038   Min.   :-100.000   Min.   :-364.2786  
 1st Qu.:15.559   1st Qu.: -56.250   1st Qu.: -86.9604  
 Median :20.450   Median : -12.500   Median :  -6.4301  
 Mean   :21.878   Mean   :  -1.147   Mean   :  -0.3145  
 3rd Qu.:27.330   3rd Qu.:  56.250   3rd Qu.:  86.1551  
 Max.   :47.191   Max.   : 100.000   Max.   : 331.4449  
 NA's   :31       NA's   :16         NA's   :15         
      chv                cmo                macd          
 Min.   :-0.63538   Min.   :-88.8628   Min.   :-0.219469  
 1st Qu.:-0.28769   1st Qu.:-29.6125   1st Qu.:-0.030508  
 Median :-0.01415   Median : -0.8713   Median : 0.001847  
 Mean   : 0.12162   Mean   : -1.6646   Mean   : 0.009282  
 3rd Qu.: 0.35276   3rd Qu.: 27.7824   3rd Qu.: 0.037112  
 Max.   : 7.37405   Max.   : 86.9767   Max.   : 0.703234  
 NA's   :31         NA's   :16         NA's   :25         
      osma               rsi             fastK       
 Min.   :-0.10903   Min.   : 8.614   Min.   :0.0000  
 1st Qu.:-0.01063   1st Qu.:41.108   1st Qu.:0.2246  
 Median :-0.00016   Median :50.547   Median :0.4553  
 Mean   :-0.00006   Mean   :49.953   Mean   :0.4793  
 3rd Qu.: 0.01021   3rd Qu.:58.706   3rd Qu.:0.7425  
 Max.   : 0.28849   Max.   :84.854   Max.   :1.0000  
 NA's   :33         NA's   :16       NA's   :13      
     fastD             slowD              SMI         
 Min.   :0.01645   Min.   :0.03279   Min.   :-77.616  
 1st Qu.:0.23056   1st Qu.:0.23618   1st Qu.:-27.662  
 Median :0.45989   Median :0.46420   Median : -2.998  
 Mean   :0.47916   Mean   :0.47922   Mean   : -3.468  
 3rd Qu.:0.72776   3rd Qu.:0.71850   3rd Qu.: 21.330  
 Max.   :0.98610   Max.   :0.96254   Max.   : 73.964  
 NA's   :15        NA's   :17        NA's   :25       
     signal             vol          
 Min.   :-74.526   Min.   :0.001235  
 1st Qu.:-24.781   1st Qu.:0.003168  
 Median : -2.446   Median :0.004686  
 Mean   : -3.358   Mean   :0.005457  
 3rd Qu.: 19.029   3rd Qu.:0.006484  
 Max.   : 71.664   Max.   :0.047742  
 NA's   :33        NA's   :16        
Во всех переменных есть NA. Но они расположены в начале!!Как нормально у всех индикаторов и происходит. Поэтому когда в скрипте мы пишем

 new.data <- predict(prepr, tail(x, 500));

Мы отрезаем неопределенные данные. Условие :  nrow(x) > 500 + max(NA). Т.е. как минимум в нашем случае 533. Для надежности заложите nrow(x) = 600-700.

Не вижу как Вы получили в x  неопределенную NA.

Удачи

Причина обращения: