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

 
alsu:
Да нет, конечно. Я всего лишь в меру возможностей борюсь с попытками заменять науку, неважно, прикладную или теоретическую, шаманизмом. А именно это творится в области НС, которая на самом деле застряла и в прикладном, и в теоретическом уже лет десять как.

1. По поводу застряла. Мне так кажется, что широкое практическое применение распознавание голоса, рукописного текста основанное на глубоких сетях, опровергает это. Я не говорю о распознавании лиц. Сейчас как раз, как мне кажется, эта тема получила новый импульс.

2. По поводу науки и шаманизма. С советских времен различие в подходе  к практике советской науки и западной кардинально отличались. Это лучше всего видно по научной литературе. Еще в институте (70 г прошлого века) обратил внимание на то как доступно и понятно описаны сложные вопросы в западных изданиях и как заумно и закручено, с россыпью сложнейших формул это делается в отечественной литературе. Этот подход не изменился и до сих пор. Чем сложнее и непонятней тем более научно??

Я не программист и не математик. Я практик. Мне важно чтобы новые идеи были доступно изложены, подтверждены авторитетным применением и помогали мне решать нужные мне вопросы с наименьшим главоболием и потерей времени на их внедрение. И это все в теме глубоких нейросетей в пакетах языка R есть.

То что в статье все в кучу, согласен. Желание объять необъятное никто не отменял. Да и тему нейросетей не все представители нового поколения помнят. Хотелось напомнить.

Ну как получилось.

Успехов

 

Отличная статья!

Хорошая последовательность статей DM в последнее время.

 

До сих пор я пытался загрузить все, и неважно, что я делаю, не могу заставить его загрузиться. Все пути совпадают с вашими инструкциями, я пробовал и 3.1.1, которая является той же версией, что вы использовали, и более новую версию 3.1.3, и все скрипты, DLL, индикатор, заголовки и т.д. находятся в правильных местах в соответствии с вашими инструкциями.

Всякий раз, когда советник переносится на график, появляется окно с предупреждением "Rterm has crashed", что при просмотре кода говорит о том, что R не загружается.

Есть ли какие-то дополнительные шаги, например, DLL, необходимая для загрузки R, которая отсутствует?

Я также проверил все скрипты R, чтобы убедиться в правильности путей (и чувствительности к регистру имен папок), и все равно ничего не получается.

Очень впечатлена вашей статьей и глубиной объяснения. Я много работал с нейросетями Джеффа Хитона, поэтому хотел бы взглянуть и на R.

Любой совет, который вы можете предложить, будет оценен по достоинству.

 
Ne to chtobi statja ustarela, no luche izpolzovat recurenement LSTM i delphi decition. Mne lichno ochen nenravitsa MT4
 
traderd:

До сих пор я пытался загрузить все, и неважно, что я делаю, не могу заставить его загрузиться. Все пути совпадают с вашими инструкциями, я пробовал и 3.1.1, которая является той же версией, что вы использовали, и более новую версию 3.1.3, и все скрипты, DLL, индикатор, заголовки и т.д. находятся в правильных местах в соответствии с вашими инструкциями.

Всякий раз, когда советник переносится на график, появляется окно с предупреждением "Rterm has crashed", что при просмотре кода говорит о том, что R не загружается.

Есть ли какие-то дополнительные шаги, например, DLL, необходимая для загрузки R, которая отсутствует?

Я также проверил все скрипты R, чтобы убедиться в правильности путей (и чувствительности к регистру имен папок), и все равно ничего не получается.

Очень впечатлена вашей статьей и глубиной объяснений. Я много работал с нейросетями Джеффа Хитона, поэтому хотел бы взглянуть и на R.

Любой совет, который вы можете предложить, будет оценен по достоинству.

Привет/

Я рад, что вы заинтересовались статьей.
Я отлаживаю кейсы fall Rterma следующим образом:
- Закомментируйте все в start () , кроме проверки работы Rterma
- Закомментируйте в init () все, кроме запуска Rterm ().

- Если Rterm запущен, то начиная с Init() откомментируйте один оператор и проверьте. Вы указываете , при каком операторе происходит сбой.

После этого легче определить причину сбоя. Обычно их две: синтаксическая ошибка скрипта или отсутствие необходимых библиотек.
Я снова обращаюсь к Приложению к статье.

Готов помочь вам в будущем , если вы скажете , при каких падениях падает Rterm.

С наилучшими пожеланиями

 
guz1kas:

Ne to chtobi statja ustarela, no luche izpolzovat recurenement LSTM i delphi decition. Mne lichno ochen nenravitsa MT4

Приветствую.

Устарела??? Это ново.

А лучше как, почему. Если можно поподробней с деталями желательно. Просто интересно.

Делфи вообще не обсуждаем.

Вопрос не в том нравится МТ4 или нет. Задача стоит выполнить на том что есть(т.е. МТ4 какое бы оно  ни было..) то что нужно быстро и надежно.

Удачи

 
vlad1949:

Привет/

Я рад, что вы заинтересовались статьей.
Я отлаживаю кейсы fall Rterma следующим образом:
- Закомментируйте все в start () , кроме того, что проверяет работу Rterma
- Закомментируйте в init () все, кроме run Rterm ().

- Если Rterm запущен, то начиная с Init() откомментируйте один оператор и проверьте. Вы указываете , при каком операторе происходит сбой.

После этого легче определить причину сбоя. Обычно их две: синтаксическая ошибка скрипта или отсутствие необходимых библиотек.
Я снова обращаюсь к Приложению к статье.

Готов помочь вам в будущем , если вы скажете , при каких падениях падает Rterm.

С уважением

У меня такая же проблема. Я не могу найти, где вы говорите о start(), кроме того, что проверка работы Rterma или init() все, кроме запуска Rterm(). Я просмотрел код на R и в MetaEditor.
 

Это очень интересная и полезная статья. Я заставил систему работать, однако в Zorro, а не в MT4. Это значительно упрощает скрипт, и я могу бэктестировать его с 14 октября 2014 года по сегодняшний день.

Однако есть проблема: похоже, что вы тренировались на ZZ того же бара, а не на ZZ следующего бара. Таким образом, система очень хорошо предсказывает только что закончившийся бар. Если я торгую на прошлом баре, то получаю такую кривую баланса:

Торговля с помощью машины времени

Идеальная система! Но если я использую возвращенный Sig для торговли на следующем баре, я получу эту немного более реалистичную кривую баланса:

Реальная торговля

(Красная часть - это подводный капитал).

Я использовал модель от 14 октября 2014 года. Вы уже пробовали обучать модель на ZZ следующего бара?

 
jcl365:

Это очень интересная и полезная статья. Я заставил систему работать, однако в Zorro, а не в MT4. Это значительно упрощает скрипт, и я могу бэктестировать его с 14 октября 2014 года по сегодняшний день.

Однако есть проблема: похоже, что вы тренировались на ZZ того же бара, а не на ZZ следующего бара. Таким образом, система очень хорошо предсказывает только что закончившийся бар. Если я торгую на прошлом баре, то получаю такую кривую баланса:

Идеальная система! Но если я использую возвращенный Sig для торговли на следующем баре, я получу эту чуть более реалистичную кривую баланса:

(Красная часть - это подводный капитал).

Я использовал модель от 14 октября 2014 года. Вы уже пробовали обучать модель на ZZ следующего бара?

Привет/

Мы должны иметь в виду следующее.

1. Мы получаем сигнал от зигзага.

sig <- ifelse(diff(zz) > 0, 1, ifelse(diff(zz) < 0, -1, NA)

2. Мы переносим его на другой бар в будущем.

sig <- Hmisk::Lag(sig, shift=-1)

3. Обучаем нейронную сеть сигналу со следующего бара.
Для повышения качества обучения необходимо увеличить выбор индикаторов, их параметров, параметров нейронной сети.

В статье показан путь и метод. Потенциал этих сетей огромен.

С наилучшими пожеланиями

Владимир

 

Теперь я обучил новую модель с предсказанием следующего бара, и кажется, что она действительно работает. Точность по-прежнему находится в диапазоне 74%. Вот кривая эквити:

:

Она ведет себя так, как я и ожидал: система становится прибыльной сразу после обучения, а затем медленно ухудшается по мере изменения рынка.

Поэтому следующим шагом будет тест WFO с регулярным переобучением модели. Для этого обучение должно быть интегрировано в скрипт стратегии.

Это исправленная функция для расчета Sig следующего бара:

Sig <- function(ch = 0.0037, pr = price[ ,'Med']) {
        ZZ <<- ZigZag(pr, change = ch, percent = F, retrace = F, lastExtreme = T)
        for(i in 1:length(ZZ)) { if(is.na(ZZ[i])) ZZ[i] = ZZ[i-1] }
  #shift zz for predicting the next bar
        for(i in 1:length(ZZ)-1) { ZZ[i] = ZZ[i+1] }
        dz <- c(diff(ZZ), NA)
        sig <- ifelse(dz > 0, 0, ifelse(dz < 0, 1, NA))
        return(sig)
}

Функция "Compute", которая выполняется скриптом стратегии каждые 30 минут:

Compute <- function() {
  price <<- pr.OHLC(Open,High,Low,Close)
  X <<- In()
  normalized <- predict(Prepr, tail(X,1))
  pr.sae <- nn.predict(SAE, normalized)
  return(pr.sae[1]);
}

Скрипт стратегии, "советник":

#include <default.c>
#include <r.h>

string RPath = "F:\\D\\R\\R-3.1.3\\bin\\i386\\Rterm.exe";
int Size = 200;

bool RCheck()
{
   if(!Rr()) {
        quit("R session aborted!");
                return false;           
   }
   return true;
}


function run()
{
        BarPeriod = 30;
        StartDate = 20141014;
        LookBack = Size;
        asset("EUR/USD");
        
        Spread = Slippage = Commission = RollLong = RollShort = 0;
        //Stop = 25*PIP;
        //Trail = 25*PIP;
        
        if(is(INITRUN)) {
           RStart(RPath,1);
           if(!RCheck()) return;
           printf("\n%s running",RPath);
           Rx("rm(list = ls());");
           string Command = strfmt("source('%sStrategy/SAE.r')",
                strrep(ZorroFolder,"\\","/"));
           Rx(Command);
           Command = strfmt("load('%sData/sae.model')",
                strrep(ZorroFolder,"\\","/"));
           Rx(Command);
        }
        
        vars op = rev(series(priceOpen())),
                hi = rev(series(priceHigh())),
                lo = rev(series(priceLow())),
                cl = rev(series(priceClose()));
                
        if(!is(LOOKBACK)) {
                Rv("Open",op,Size);
                Rv("High",hi,Size);
                Rv("Low",lo,Size);
                Rv("Close",cl,Size);
                
                var Predict = Rgd("Compute()");
                if(!RCheck()) return;
                
                if(Predict > 0.6 && !NumOpenShort)
                        enterShort();
                else if(Predict < 0.4 && !NumOpenLong)
                        enterLong();
        }
        
        if(is(EXITRUN)) {
                RStop(); // завершить сеанс
        }
}