Discussão do artigo "Distribuições estatísticas no MQL5 - tirando o melhor de R" - página 8

[Excluído]  

E o que se segue é o próprio texto da sub-rotina permissiva do R:

      ier = 0
      neval = 0
      last = 0
      result = 0.0 e+00
      abserr = 0.0 e+00
      alist(1) = a
      blist(1) = b
      rlist(1) = 0.0 e+00
      elist(1) = 0.0 e+00
      if(epsabs.le.0.0 e+00.and.epsrel.lt.amax1(0.5 e+02*epmach,0.5 e-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.0 e+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.0 e+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.1 e+01-0.5 e+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.5 e+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.1 e-04*abs(area12)
     *  .or.erro12.lt.0.99 e+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.1 e+01+0.1 e+03*epmach)*
     *  (abs(a2)+0.1 e+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.1 e-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.5 e+00
        erlarg = errsum
        go to 90
   80   small = abs(b-a)*0.375 e+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.0 e+00.and.area.ne.0.0 e+00) go to 105
      if(abserr.gt.errsum) go to 115
      if(area.eq.0.0 e+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.1 e-01) go to 130
      if(0.1 e-01.gt.(result/area).or.(result/area).gt.0.1 e+03
     * .or.errsum.gt.abs(area)) ier = 6
      go to 130
c
c           compute global integral sum.
c
  115 result = 0.0 e+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
[Excluído]  

O que é mais fácil: escrever uma sub-rotina em C ou MQL4-MQL5 por 0,5... 1 hora e depois usá-la por anos para você e para as pessoas,

como opção, usar uma subrotina da biblioteca MQL4-MQL5,

ou pesquisar por semanas em fontes e nomes de funções malucos e nomes de parâmetros da netLib e do pacote R, tentando entendê-los e, especialmente, na lógica marciana dos programadores Fortran - subfísicos?

Se você quiser escrever um programa complexo, deve se preocupar, em primeiro lugar, com a simplicidade e a clareza, e não com a velocidade.

A velocidade de operação é uma coisa SECUNDÁRIA.

O Metaquotes sabe como tornar as coisas claras e compreensíveis. A propósito, é preciso ter um talento especial para isso. É por isso que eles derrotaram todos na primeira rodada da luta por um terminal de negociação e um ambiente de desenvolvimento acessíveis. Ninguém mais conseguiu fazer isso de forma clara, lógica e simples.

Portanto, use-o! É ótimo! E é gratuito!

333). E agora uma má notícia para San-Sanych, para o pacote R e possivelmente para o Metaquotes:

Várias funções matemáticas básicas necessárias para a negociação não são contadas corretamente na Netlib, no R e no Metaquotes.

Eu as contei corretamente e obtive resultados positivos. Se elas forem contadas da forma como todo mundo as conta, o resultado da negociação será negativo ou apenas positivo. Não vou lhe dizer quais são essas funções, desculpe. É por isso que prefiro escrever tudo sozinho e usar nomes longos em meu trabalho. É mais fácil entender o que você mesmo escreveu ontem.

Aqui está um exemplo:

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:

...

Incrível, é a primeira vez que encontro alguém com uma atitude semelhante em relação a programas de escrita. É por isso que sou ferozmente mais.

Os principais argumentos dos eRaists são um enorme banco de dados de funções e os chamados "pacotes", que são constantemente reabastecidos. Observe que todas ou 99% dessas pessoas não conhecem C ou MQL. Elas não estão acostumadas a se aprofundar no código, são oponentes das "bicicletas". Mas, por alguma razão, os eRasts nunca dizem que o R é ilegível e que, se você precisar corrigir algo por conta própria, é praticamente impossível fazê-lo ou envolve enormes custos de mão de obra. Eles se esquecem do fato de que para o C e o C++ (nos quais o próprio R é escrito) há provavelmente mais código do que para qualquer outra linguagem, inúmeras bibliotecas com código-fonte que são transferidas para o MQL como se fossem dois bytes.

Se Gadzila, por exemplo, a partir do momento em que começou a reescrever a base de código de MQL4 para MQL5, tivesse reescrito bibliotecas open mat e stat a partir de fontes C, então agora o MT5 seria a plataforma mais poderosa pronta para várias pesquisas e negociações avançadas, mas o trabalho já está sendo feito, felizmente, pela MQ.

A propósito, antes de escrever meu GA, revisei, se não centenas, dezenas de fontes C/C++ com o codeproject, embora minhas habilidades de programação dificilmente estivessem acima do nível zero. Ou seja, os códigos-fonte abertos de C/C++ permitem que você não apenas estude a teoria e as abordagens das tarefas, mas também crie algo único e novo, mesmo para pessoas que estão longe de escrever programas. Mas mesmo os especialistas em R dificilmente conseguem ou querem escrever algo novo em R. É mais fácil para eles ficarem satisfeitos com o que outra pessoa já fez, acreditando que tudo funciona corretamente.

[Excluído]  
Andrey Dik:
...

Se Gadzila, por exemplo, tivesse reescrito as bibliotecas open mat e stat a partir de fontes em C desde que começou a reescrever a base de código da MQL4 para a MQL5, então, até agora, a MT5 seria a plataforma mais poderosa PRONTA para várias pesquisas e negociações avançadas, mas o trabalho já está sendo feito, felizmente, pela MQ.

Concordo.

Mas o que significa "seria"?

O terminal MT4 (e MT5) há muito tempo é um terminal de ensino e acadêmico para várias pesquisas de negociação. Eles simplesmente não gritam sobre isso em todas as esquinas, provavelmente porque se sentem constrangidos com sua gratuidade (ou seja, supostamente "não confiável").

Com base em minha experiência pessoal de comunicação com traders profissionais de nível médio, posso dizer com certeza que, atualmente, os novos algoritmos de negociação são primeiro escritos em MQL4 e depois transferidos para qualquer outro terminal pago com mais instrumentos de negociação e acesso a mais bolsas. Mas isso custa muito mais: de US$ 250 por mês para a plataforma e cotações até US$ 1.500 por mês. Mesmo a Reuters e a Bloomberg, com funcionalidade muito limitada para a negociação de algoritmos, custam cerca de US$ 2.000 por mês.

Com relação à "tecnologia avançada", posso dizer que eu (somos um grupo) escrevi o primeiro programa de negociação disponível comercialmente no mundo (Expert Advisor) com aceleração na GPU CUDA para MT4.

E aqui está um link para o fórum do sistema de negociação Multicharts (100...200 dólares por mês para o terminal e cotações), onde eles afirmam que "ISSO É IMPOSSÍVEL". E que eles foram informados sobre isso pela própria nvidia - ou seja, o desenvolvedor do próprio subsistema CUDA.

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

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

"Prezado bomberone1,

O recurso de programa do MultiCharts não permite tirar proveito de sistemas como CUDA, GPU e outros. No MC, os cálculos dos valores atuais são baseados nos cálculos dos valores anteriores. Entramos em contato com a CUDA no passado e eles confirmaram que sua tecnologia não pode ser usada para tornar os cálculos do MC mais rápidos devido ao algoritmo usado no MC. O que é comum para software de negociação, pois normalmente CUDA, GPU e outros não são usados para negociação. Não conhecemos nenhum exemplo de software semelhante que suporte CUDA ou GPU."

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

Está vendo? Eles dizem que é impossível. Sua arquitetura não permite isso em princípio. E os Methaquots têm isso funcionando no terminal. Acho que isso é ridículo.

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:

Eu concordo.

Mas o que significa dizer "QUERIA"?

O terminal MT4 (e MT5) tem sido há muito tempo um terminal acadêmico e de ensino para vários estudos de negociação. Eles simplesmente não o divulgam em todas as esquinas, provavelmente porque se sentem envergonhados por ser gratuito (ou seja, supostamente "não confiável").

Sim, mas seria mais fácil para aqueles que gostam de "tudo pronto para uso", como os eRaasts, conduzir suas pesquisas sem o mínimo esforço. É isso que estou dizendo. E o fato de que a MT é uma plataforma de pesquisa e negociação com capacidade única - isso tem sido verdade há muito tempo.
[Excluído]  
Andrey Dik:
Sim, mas para os entusiastas do "tudo fora da caixa", como a maioria dos eRastas, seria mais fácil fazer suas pesquisas sem o mínimo esforço. É isso que estou dizendo. E o fato de o MT ser uma plataforma de pesquisa e negociação com capacidade única - isso é verdade há muito tempo.

Para você, qual é o objetivo ou benefício de chamar as pessoas de nomes que estão mal orientadas? Não gosta do sistema R? Basta passar por ele! Bem, ou há 2 ou 3 vezes para educá-los, esses R-schniki, e depois passar por eles. Não existem sistemas matemáticos perfeitos. Assim como os terminais de negociação. Em primeiro lugar, um profissional deve escolher uma ferramenta profissional para seu trabalho. É por isso que, às vezes, é necessário usar várias ferramentas. Tenho 8 (oito) versões de sub-rotinas para CUDA em minha compilação: precisão simples, precisão dupla, algoritmo sequencial, algoritmo paralelo (ou seja, 4 combinações de sub-rotinas), apenas em C, depois uma versão em C com CUDA e, em seguida, uma versão Lite de sub-rotinas em MQL4 puro - para o MQL5.com Market. Isso é necessário para a verificação de erros e para verificar a precisão dos algoritmos. Tudo funciona em C, MQL4 e CUDA - quase da mesma forma. Há muito tempo, San-Sanych vem pedindo a todos que usem também o R. Como? Devo também escrever a 8ª ou 9ª versão das sub-rotinas? Por quê? Para lidar com parâmetros adicionais e erros de erro adicionais mais tarde?

A Metaquotes começou, condicionalmente falando, a "clonar" funções do R a partir de funções de distribuição (na verdade, o processo é muito mais amplo do que o pacote R, o que é bom). Isso é necessário para verificar , por meio de testes estatísticos, as outras funções estatísticas.

Ainda mais, então - por que os programadores deveriam mergulhar no mundo louco do gigante R, se "provavelmente em breve" as mesmas funções aparecerão em MQL4-5? Onde está o sentido econômico de gastar o principal recurso - o tempo - para conectar o R?

A "aceitação geral" do R não me inspira. Pessoalmente, já vi isso muitas vezes na ciência, quando a autoridade "universalmente reconhecida" se torna o oposto daquele que a adora. Com base em minha experiência pessoal, posso dizer que os cálculos de negociação exigem uma precisão com a qual os autores do R nunca sonharam. A RenTec, a primeira e mais bem-sucedida empresa de comércio de algo completo, emprega, antes de tudo, astrofísicos, ou seja, pessoas envolvidas em cálculos especialmente precisos. A RenTec sabe desde os anos 90 que uma série de preços é uma substância tão densa que são necessários cálculos muito precisos para extrair AUTOMATICAMENTE sua microestrutura.

 
Sergiy Podolyak:

Para você, qual é o objetivo ou benefício de xingar as pessoas que estão mal orientadas? Não gosta do sistema R? É só passar na frente! Bem, ou há duas ou três vezes em que eles os educam, esses R-schnikovs, e depois passam. Não existem sistemas matemáticos perfeitos. Assim como os terminais de negociação. Em primeiro lugar, um profissional deve escolher uma ferramenta profissional para seu trabalho. É por isso que, às vezes, é necessário usar várias ferramentas.

Não, eu não o chamo de nomes, eu o chamo de nomes. Você pode me chamar de eMQL-jast, se você gosta de eRasts.

Não acho que os eRastes estejam mal orientados ao escolher o R para a pesquisa, é mais fácil para eles, só isso. A simplicidade das ferramentas prontas é o que os atrai. Você instala o R em seu computador, escolhe um pacote adequado entre os já prontos, carrega seus dados e obtém o resultado - esse é o princípio geral. Mas em MQL você tem que escrever outra coisa! - Isso é difícil para eles. É por isso que é tão importante agora que os pacotes prontos apareçam na entrega padrão do MT, é exatamente o que as pessoas que gostam de "fora da caixa" precisam - não há necessidade de procurar fontes C em toda a Internet (entre um bilhão de variantes do que você precisa), e basta pegar uma solução pronta no próprio terminal.

Condicionalmente, o eRast e o eMQL-ast podem ser divididos em fãs de pratos de multicooker e fãs de improvisação na culinária. Ambos devem ter um lugar no MT, pois acredito que essa é a chave para o sucesso da plataforma - acessibilidade para todos.

 

Sinceramente, não entendo o motivo da discussão.

Algum de nós escreve Expert Advisors em R?

Talvez alguém queira vendê-los no mercado?

Alguém escreve Expert Advisors com recursos completos em R?

Talvez alguém crie variantes híbridas, em que as "entranhas" sejam escritas tanto em MQL quanto em R, e estejam efetivamente interligadas por meio de DLLs?

Na minha opinião, o fato de que a MQL pode não ter algumas funcionalidades é bastante natural e corrigível, mas a completa falta de funcionalidade de negociação em R é corrigível e quem a corrigirá? Por que os traders precisam disso?

(Peço desculpas por meu amadorismo).

[Excluído]  
Реter Konow:

Sinceramente, não entendo o motivo da discussão.

Algum de nós escreve Expert Advisors em R?

Talvez alguém queira vendê-los no mercado?

Alguém escreve Expert Advisors com recursos completos em R?

Talvez alguém crie variantes híbridas, em que as "entranhas" sejam escritas tanto em MQL quanto em R, e estejam efetivamente interligadas por meio de DLLs?

Na minha opinião, o fato de que a MQL pode não ter algumas funcionalidades é bastante natural e corrigível, mas a completa falta de funcionalidade de negociação em R é corrigível e quem a corrigirá? Por que os traders precisam disso?

(Peço desculpas pela visão de leigo).

Perdoe-me. Vou fazer isso para você:

Uma pesquisa no Google por "R trading strategies" produz 69.900.000 resultados.

De nada.

 
Sergiy Podolyak:

Perdoar. Vou fazer isso para você:

Uma pesquisa no Google por "estratégias de negociação R" retorna 69.900.000 resultados.

De nada.

E não... )

Adoro a "abordagem R", me dê tudo em uma bandeja))