Обсуждение статьи "Статистические распределения в MQL5 - берем лучшее из R и делаем быстрее" - страница 8

 

А дальше следует сам текст с позволения сказать подпрограммы из R:

      ier = 0
      neval = 0
      last = 0
      result = 0.0e+00
      abserr = 0.0e+00
      alist(1) = a
      blist(1) = b
      rlist(1) = 0.0e+00
      elist(1) = 0.0e+00
      if(epsabs.le.0.0e+00.and.epsrel.lt.amax1(0.5e+02*epmach,0.5e-14))
     *   ier = 6
      if(ier.eq.6) go to 999
c
c           first approximation to the integral
c           -----------------------------------
c
      uflow = r1mach(1)
      oflow = r1mach(2)
      ierro = 0
      call qk21(f,a,b,result,abserr,defabs,resabs)
c
c           test on accuracy.
c
      dres = abs(result)
      errbnd = amax1(epsabs,epsrel*dres)
      last = 1
      rlist(1) = result
      elist(1) = abserr
      iord(1) = 1
      if(abserr.le.1.0e+02*epmach*defabs.and.abserr.gt.
     *  errbnd) ier = 2
      if(limit.eq.1) ier = 1
      if(ier.ne.0.or.(abserr.le.errbnd.and.abserr.ne.resabs).or.
     *  abserr.eq.0.0e+00) go to 140
c
c           initialization
c           --------------
c
      rlist2(1) = result
      errmax = abserr
      maxerr = 1
      area = result
      errsum = abserr
      abserr = oflow
      nrmax = 1
      nres = 0
      numrl2 = 2
      ktmin = 0
      extrap = .false.
      noext = .false.
      iroff1 = 0
      iroff2 = 0
      iroff3 = 0
      ksgn = -1
      if(dres.ge.(0.1e+01-0.5e+02*epmach)*defabs) ksgn = 1
c
c           main do-loop
c           ------------
c
      do 90 last = 2,limit
c
c           bisect the subinterval with the nrmax-th largest
c           error estimate.
c
        a1 = alist(maxerr)
        b1 = 0.5e+00*(alist(maxerr)+blist(maxerr))
        a2 = b1
        b2 = blist(maxerr)
        erlast = errmax
        call qk21(f,a1,b1,area1,error1,resabs,defab1)
        call qk21(f,a2,b2,area2,error2,resabs,defab2)
c
c           improve previous approximations to integral
c           and error and test for accuracy.
c
        area12 = area1+area2
        erro12 = error1+error2
        errsum = errsum+erro12-errmax
        area = area+area12-rlist(maxerr)
        if(defab1.eq.error1.or.defab2.eq.error2) go to 15
        if(abs(rlist(maxerr)-area12).gt.0.1e-04*abs(area12)
     *  .or.erro12.lt.0.99e+00*errmax) go to 10
        if(extrap) iroff2 = iroff2+1
        if(.not.extrap) iroff1 = iroff1+1
   10   if(last.gt.10.and.erro12.gt.errmax) iroff3 = iroff3+1
   15   rlist(maxerr) = area1
        rlist(last) = area2
        errbnd = amax1(epsabs,epsrel*abs(area))
c
c           test for roundoff error and eventually
c           set error flag.
c
        if(iroff1+iroff2.ge.10.or.iroff3.ge.20) ier = 2
        if(iroff2.ge.5) ierro = 3
c
c           set error flag in the case that the number of
c           subintervals equals limit.
c
        if(last.eq.limit) ier = 1
c
c           set error flag in the case of bad integrand behaviour
c           at a point of the integration range.
c
        if(amax1(abs(a1),abs(b2)).le.(0.1e+01+0.1e+03*epmach)*
     *  (abs(a2)+0.1e+04*uflow)) ier = 4
c
c           append the newly-created intervals to the list.
c
        if(error2.gt.error1) go to 20
        alist(last) = a2
        blist(maxerr) = b1
        blist(last) = b2
        elist(maxerr) = error1
        elist(last) = error2
        go to 30
   20   alist(maxerr) = a2
        alist(last) = a1
        blist(last) = b1
        rlist(maxerr) = area2
        rlist(last) = area1
        elist(maxerr) = error2
        elist(last) = error1
c
c           call subroutine qpsrt to maintain the descending ordering
c           in the list of error estimates and select the
c           subinterval with nrmax-th largest error estimate (to be
c           bisected next).
c
   30   call qpsrt(limit,last,maxerr,errmax,elist,iord,nrmax)
c ***jump out of do-loop
        if(errsum.le.errbnd) go to 115
c ***jump out of do-loop
        if(ier.ne.0) go to 100
        if(last.eq.2) go to 80
        if(noext) go to 90
        erlarg = erlarg-erlast
        if(abs(b1-a1).gt.small) erlarg = erlarg+erro12
        if(extrap) go to 40
c
c           test whether the interval to be bisected next is the
c           smallest interval.
c
        if(abs(blist(maxerr)-alist(maxerr)).gt.small) go to 90
        extrap = .true.
        nrmax = 2
   40   if(ierro.eq.3.or.erlarg.le.ertest) go to 60
c
c           the smallest interval has the largest error.
c           before bisecting decrease the sum of the errors
c           over the larger intervals (erlarg) and perform
c           extrapolation.
c
        id = nrmax
        jupbnd = last
        if(last.gt.(2+limit/2)) jupbnd = limit+3-last
        do 50 k = id,jupbnd
          maxerr = iord(nrmax)
          errmax = elist(maxerr)
c ***jump out of do-loop
          if(abs(blist(maxerr)-alist(maxerr)).gt.small) go to 90
          nrmax = nrmax+1
   50   continue
c
c           perform extrapolation.
c
   60   numrl2 = numrl2+1
        rlist2(numrl2) = area
        call qelg(numrl2,rlist2,reseps,abseps,res3la,nres)
        ktmin = ktmin+1
        if(ktmin.gt.5.and.abserr.lt.0.1e-02*errsum) ier = 5
        if(abseps.ge.abserr) go to 70
        ktmin = 0
        abserr = abseps
        result = reseps
        correc = erlarg
        ertest = amax1(epsabs,epsrel*abs(reseps))
c ***jump out of do-loop
        if(abserr.le.ertest) go to 100
c
c           prepare bisection of the smallest interval.
c
   70   if(numrl2.eq.1) noext = .true.
        if(ier.eq.5) go to 100
        maxerr = iord(1)
        errmax = elist(maxerr)
        nrmax = 1
        extrap = .false.
        small = small*0.5e+00
        erlarg = errsum
        go to 90
   80   small = abs(b-a)*0.375e+00
        erlarg = errsum
        ertest = errbnd
        rlist2(2) = area
   90 continue
c
c           set final result and error estimate.
c           ------------------------------------
c
  100 if(abserr.eq.oflow) go to 115
      if(ier+ierro.eq.0) go to 110
      if(ierro.eq.3) abserr = abserr+correc
      if(ier.eq.0) ier = 3
      if(result.ne.0.0e+00.and.area.ne.0.0e+00) go to 105
      if(abserr.gt.errsum) go to 115
      if(area.eq.0.0e+00) go to 130
      go to 110
  105 if(abserr/abs(result).gt.errsum/abs(area)) go to 115
c
c           test on divergence.
c
  110 if(ksgn.eq.(-1).and.amax1(abs(result),abs(area)).le.
     * defabs*0.1e-01) go to 130
      if(0.1e-01.gt.(result/area).or.(result/area).gt.0.1e+03
     * .or.errsum.gt.abs(area)) ier = 6
      go to 130
c
c           compute global integral sum.
c
  115 result = 0.0e+00
      do 120 k = 1,last
         result = result+rlist(k)
  120 continue
      abserr = errsum
  130 if(ier.gt.2) ier = ier-1
  140 neval = 42*last-21
  999 return
      end
 

Что легче: написать за 0.5...1 часа самому подпрограмму на Си или что тоже самое на MQL4-MQL5, и потом использовать её ГОДАМИ для себя и для людей,

как вариант - использовать подпрограмму из библиотеки MQL4-MQL5,

или копаться неделями в исходниках и безумных именах функций и названий параметров из netLib и пакета R, пытаясь в них разобраться, а особенно в марсианской логике программистов на Фортране - недо-физиков?

Если Вы хотите написать сложную программу - то Вам следует заботиться в первую очередь О ПРОСТОТЕ и ЯСНОСТИ, а не о скорости её работы.

Скорость работы - это ВТОРИЧНОЕ.

Метаквоты умеют делать ЯСНО И ПОНЯТНО. Для этого кстати надо иметь особый талант. Поэтому они победили всех в первом раунде борьбы за доступный торговый терминал и среду разработки. Никто другой не сумел сделать этого ясно, логично и ПРОСТО.

Ну так пользуйтесь! Это отлично! И это бесплатно!

333). А теперь плохие новости для Сан-Саныча, для пакета R и возможно для Метаквотов:

Несколько основных математических функций, которые нужны для трейдинга, считаются неправильно и у Netlib, и в R, и у Метаквотов.

У меня они считаются правильно и это даёт положительный результат. Если считать так, как считают все - то торговый результат отрицательный или еле-еле положительный. Какие - это функции - не скажу, сорри. Поэтому я предпочитаю всё писать сам и в работе использую ДЛИННЫЕ ИМЕНА. Так легче понять что ты сам написал вчера.

Вот образец:

https://www.mql5.com/en/blogs/post/678673

https://www.mql5.com/en/users/alexeros/blog

Library of Math functions
Library of Math functions
  • 2016.08.29
  • //www.mql5.com/en/users/AlexEros">
  • www.mql5.com
This is an extract from production library of EAs "Graalino-Pro" and "Ocean Breeze". There is a dosen of general math functions here. Everything in this library is PUBLIC DOMAIN (and free). Example...
 
Sergiy Podolyak:

...

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

Столповые доводы эRастов - огромная база функций и так называемых "пакетов", которые постоянно пополняются. Обратите внимание, все, или 99% этих людей не владеют в должной мере, или вовсе не знают ни С ни MQL. Они не привыкли и не приучены копаться в коде, они противники "велосипедов". Но, почему то, эRасты никогда не говорят что R нечитабелен и что при необходимости что то подправить для себя это сделать практически невозможно или сопряжено с огромными трудозатратами. Забывают о том, что для С и С++ (на которых сам R и написан) наработано кода наверное как ни для какого другого языка, неисчислимые количества библиотек с исходным кодом которые переносятся в MQL реально как два байта переслать.

Если бы Гадзила, к примеру, с того момента как начал переписывать кодабазу с MQL4 на MQL5 переписывал открытые мат и стат библиотеки с С исходников, то к этому моменту МТ5 был бы самой мощной платформой ГОТОВОЙ для различных исследований и продвинутой торговли, но работа уже ведётся, к счастью, силами MQ. 

К слову, перед тем как я написал свой ГА, пересмотрел если не сотни, то десятки исходников на С/С++ с кодепроджект, хотя мои навыки программиста едва ли превышали нулевой уровень. То есть открытые исходные коды С/С++ позволяют не только изучать теорию и подходы к задачам, но и создавать что то уникальное и новое даже для людей далёких от написания программ. Но даже специалисты по R навряд ли смогут или захотят писать что то новое на R, проще же для них довольствоваться тем что уже кто то сделал веря при этом в то что всё работает правильно.    

 
Andrey Dik:
...

Если бы Гадзила, к примеру, с того момента как начал переписывать кодабазу с MQL4 на MQL5 переписывал открытые мат и стат библиотеки с С исходников, то к этому моменту МТ5 был бы самой мощной платформой ГОТОВОЙ для различных исследований и продвинутой торговли, но работа уже ведётся, к счастью, силами MQ.  

Согласен.

Но что значить "БЫЛ БЫ"?

Терминал MT4 (ну и MT5) давно является учебно-академическим терминалом для разных исследований в области трейдинга. Просто об этом не кричат на каждом углу, наверное стесняются её бесплатности (то бишь якобы "несолидности").

Из моего личного опыта общения с проп-трейдинговыми профи-трейдерами средней руки, могу точно сказать, что сейчас новые торговые алгоритмы сначала пишутся на MQL4, а потом уже переносятся на всякие другие платные терминалы, с бОльшим количеством торговых инструментов и доступом на бОльшее количество бирж. Но так оно и стоит намного дороже: от 250 долларов в месяц за платформу и котировки до 1500 долларов в месяц. Даже Ройтерс и Блумберг с очень ограниченным функционалом для алготрейдинга стоят порядка 2000 долларов в месяц.

А что качается "продвинутости", то могу сказать, что я (мы тут, группировкой) написал первую в мире коммерчески-доступную трейдинговую программу (советник) с ускоренем на CUDA GPU именно для MT4.

А вот ссылка на форум торговой системы Multicharts (100...200 долларов в месяц за терминал и котировки), где они утверждают что "ЭТО НЕВОЗМОЖНО". И что им самим сказали об этом в самой nvidia - то есть у разработчика самой подсистемы CUDA.

http://www.multicharts.com/discussion/viewtopic.php?f=1&t=8067

........................................................................................................................................................................

"Dear bomberone1,

The program achitechture of MultiCharts does not allow to take advantage of systems like CUDA, GPU and others. In MC the calculations of current values are based on the calculations of previous values. We have contacted CUDA in the past and they have confirmed that their technology cannot be used to make MC calculations faster because of the algorythm used in MC. Which is common for trading software as normally CUDA, GPU and others are not used for trading. We do not know any examples of similar software that supports CUDA or GPU."

.........................................................................................................................................................................

Видите? Говорят невозможно. Их архитектура не позволяет этого в принципе. А у Метаквотов в терминале ЭТО работает. По-моему это смешно.

MultiCharts: Trading Software for Automated Trading and Backtesting • View topic - Windows HPC Server 2008 R2 and CUDA
  • www.multicharts.com
Author Message Will multicharts support the HPC technical computing? I'd like to use the power of computing cloud. In the while is it possible use the power of CUDA, the GPU power calculation for backtesting? Mathlab and other many trading software support this function, when will see these on mc? I write here the possibility to use...
 
Sergiy Podolyak:

Согласен.

Но что значить "БЫЛ БЫ"?

Терминал MT4 (ну и MT5) давно является учкбно-академическим терминалом для разных исследований в области трейдинга. Просто об этом не кричат на каждом углу, наверное стесняются её бесплатности (то бишь якобы "несолидности"). 

Да, но для любителей "всё из коробки", таких как в большинстве своём эRасты, было бы проще проводить свои изыскания не прилагая даже минимальных усилий. Вот  о чем я. А то что МТ уникальная по своим возможностям исследовательская и торговая платформа - это действительно давно уже так. 
 
Andrey Dik:
Да, но для любителей "всё из коробки", таких как в большинстве своём эRасты, было бы проще проводить свои изыскания не прилагая даже минимальных усилий. Вот  о чем я. А то что МТ уникальная по своим возможностям исследовательская и торговая платформа - это действительно давно уже так. 

Какой Вам смысл или польза обзывать людей, которые заблуждаются? Не нравится система R? Да просто проходите мимо! Ну или там 2-3 раза их образумьте их, этих R-шников, а дальше проходите мимо. Идеальных математических систем нет. Как впрочем и торговых терминалов. Профи должен выбирать себе в первую очередь профессиональный инструмент для работы. Поэтому иногда приходится пользоваться несколькими инструментами. У меня в билде 8 (восемь) версий подпрограмм для CUDA: одинарной точности, двойной точности, последовательный алгоритм, параллельный алгоритм (это 4 комбинации подпрограмм), просто на Си, потом вариант на Си с CUDA, и потом ещё вариант подпрограмм Lite на чистом MQL4 - для Маркета MQL5.com. Это нужно для проверки ошибок и для проверки точности алгоритмов. Всё работает и на Си и на MQL4 и на CUDA - почти одинаково. Сан-Саныч давно агитирует всех использовать ещё и R - Это как ? Мне ещё и 8-й или 9-й вариант подпрограмм писать? Зачем? Чтобы потом разгребать дополнительные параметры и дополнительные ошибки погрешности?

Метаквоты начали условно говоря "клонирование" функций R с функций распределений (на самом деле процесс намного шире пакета R, это хорошо). Это нужно для проверки статистическими тестами остальных статистических функций.

Ну тогда тем более - зачем программистам погружаться в безумный мир чудища R, если "вероятно скоро" появятся эти же функции в MQL4-5 ? Где экономический смысл тратить основной ресурс - время - на втыкание R?

"Общепризнанность"  R меня не вдохновляет. Лично я видел это много раз в науке - когда "общепризнанность" авторитета вылазит боком тому, кто ему поклоняется. Из моего личного опыта могу сказать, что для расчётов в трейдинге нужна точность, которая авторам R и не снилась. Фирма RenTec, первая и наиболее успешная в полном алго-трейдинге,  принимает на работу в первую очередь астро-физиков, то есть людей занимающихся особо точными расчётами. В RenTec ещё с 1990-х годов знают, что ценовой ряд - это настолько плотная субстанция, что для АВТОМАТИЧЕСКОГО вынимания из неё её же микроструктуры нужны очень точные вычисления.

 
Sergiy Podolyak:

Какой Вам смысл или польза обзывать людей, которые заблуждаются? Не нравится система R? Да просто проходите мимо! Ну или там 2-3 раза их образумьте их, этих R-шников, а дальше проходите мимо. Идеальных математических систем нет. Как впрочем и торговых терминалов. Профи должен выбирать себе в первую очередь профессиональный инструмент для работы. Поэтому иногда приходится пользоваться несколькими инструментами. 

Не, не обзываю, а называю. Меня можно назвать эMQLястом, если угодно эRастам.

Не думаю, что эRасты заблуждаются выбирая R для исследований, для них это проще вот и всё. Простота готовых инструментов, вот что их привлекает. Установил R на свой комп, выбрал подходящий пакет из числа готовых, загнал свои данные, получил результат - в общем принцип такой. А в MQL же нужно что то ещё писать! - это для них сложно. Поэтому так важно сейчас появления именно готовых пакетов в штатной поставке МТ, это как именно то что нужно людям любителям "из коробки" - нет необходимости искать исходники на С по всему интернету (из миллиарда вариантов того что нужно), а просто взять готовое решение в самом терминале.

Условно  эRастов и эMQLястов можно разделить на любителей блюд из мультиварки и любителей импровизации в приготовлени пищи. И тем и тем должно быть место в MT, я считаю, именно в этом залог успешности платформы - доступность для всех.

 

Честно говоря, вообще не понимаю о чем спор.

Кто то из нас пишет советников на R?

Может кто то хочет продавать их в маркете?

Кто то пишет полный функционал советников на R?

Может кто то создает гибридные варианты, у которых "кишки" написанны и на MQL и на R, при этом эффективно переплетаются через DLL?

По моему то, что MQL может нехватать некоторого функционала - вполне естественно и поправимо, но поправимо ли полное отсутствие торгового функционала на R и кто будет это исправлять?  Зачем он трейдерам вообще нужен?

(Прошу прощение за дилетанство).

 
Реter Konow:

Честно говоря, вообще не понимаю о чем спор.

Кто то из нас пишет советников на R?

Может кто то хочет продавать их в маркете?

Кто то пишет полный функционал советников на R?

Может кто то создает гибридные варианты, у которых "кишки" написанны и на MQL и на R, при этом эффективно переплетаются через DLL?

По моему то, что MQL может нехватать некоторого функционала - вполне естественно и поправимо, но поправимо ли полное отсутствие торгового функционала на R и кто будет это исправлять?  Зачем он трейдерам вообще нужен?

(Прошу прощение за дилетанство).

Прощаю. Делаю это за Вас:

Поиск в Гугле по "R trading strategies" выдаёт 69 900 000 результатов.

Не за что.

 
Sergiy Podolyak:

Прощаю. Делаю это за Вас:

Поиск в Гугле по "R trading strategies" выдаёт 69 900 000 результатов.

Не за что.

А нет... )

Я люблю "R -подход", дайте мне все на блюдечке.))

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