記事"R で 統計分布を MQL5 に -"についてのディスカッション - ページ 8

 

そして以下は、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
 

CまたはMQL4-MQL5でサブルーチンを0.5...1時間書いて、それを自分自身や人々のために何年も使い続ける、

オプションとして、MQL4-MQL5ライブラリのサブルーチンを使うこともできる、

あるいは、netLibやRパッケージのおかしな関数名やパラメータ名を理解しようと、何週間も ソースを調べたり、特にFortranプログラマーの火星の論理(物理学者以下?

複雑なプログラムを書きたいのなら、まず単純明快であることを第一に考えるべきで、速さにはこだわるべきでない。

動作速度は二の次なのだ。

Metaquotesは、物事を明快に理解できるようにする方法を知っている。そのためには特別な才能が必要だ。だからこそ、手頃な価格の取引ターミナルと開発環境を求める闘いの第一ラウンドで、彼らは皆を打ち負かしたのだ。明確に、論理的に、そしてシンプルにそれを実現できた人は他にいない。

だから使ってみてください!素晴らしい!しかも無料だ!

333).そして今、San-Sanych、Rパッケージ、そしておそらくMetaquotesにとって悪いニュースがある:

Netlib、R、Metaquotesでは、取引に必要ないくつかの基本的な数学関数が正しくカウントされていません。

私はそれらを正しくカウントし、ポジティブな結果を出しています。他の人たちがカウントしている方法でカウントすると、取引結果はマイナスかほとんどプラスになりません。申し訳ないが、どの関数かは教えない。だから私は、すべて自分で書いて、長い名前を使うのが好きなんだ。昨日自分で書いたものを理解するのは簡単だからだ。

これがそのサンプルだ:

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:

...

驚くべきことに、プログラムを書く ことに同じような姿勢を持つ人に初めて会った。だから僕は猛烈にプラスなんだ。

eRaistsの主な引数は、関数といわゆる「パッケージ」の巨大なデータベースで、これらは常に補充されている。これらの人々のすべて、あるいは99%はC言語やMQLをまったく知らない。彼らはコードを掘り下げることに慣れておらず、「自転車」の反対者なのだ。しかし、なぜかe-Rastたちは、Rが読めないこと、自分で何かを修正する必要がある場合、それは事実上不可能であるか、莫大な人件費がかかることを決して言わない。彼らは、(R自体が書かれている)CやC++には、おそらく他のどの言語よりも多くのコードがあり、ソースコードを持つ無数のライブラリが、本当に2バイトのようにMQLに転送されるという事実を忘れている。

例えば、GadzilaがMQL4からMQL5へのコードベースの書き換えを始めた瞬間から、オープンマットや統計ライブラリをCソースから書き換えていたとしたら、今頃MT5は様々な研究や高度な取引に対応できる最も強力なプラットフォームになっていただろう。

ところで、私はGAを書く前に、プログラミングのスキルはゼロに等しかったが、codeprojectで何百、何十というC/C++のソースをレビューした。つまり、C/C++のオープンソースコードは、理論やタスクへのアプローチを勉強できるだけでなく、プログラムを書くことから遠い人でもユニークで新しいものを作ることができる。しかし、Rのスペシャリストでさえ、Rで何か新しいものを書くことはできないし、書こうとも思わない。

 
Andrey Dik:
...

例えば、ガッジーラがMQL4からMQL5にコードベースを書き換え始めてから、オープンマットや統計ライブラリをCソースから書き換えていたなら、今頃MT5は様々な研究や高度な取引のための最強のプラットフォームREADYになっていただろう。

その通りだ。

しかし、「そうなる」とはどういう意味だろうか?

MT4(およびMT5)ターミナルは、長い間、 さまざまなトレーディング研究のための教育・学術用 ターミナルだった。ただ、彼らはあらゆるところでそれを叫んでいない。おそらく、無料で提供されている(つまり「信用できない」と思われている)ことが恥ずかしいのだろう。

私の個人的な経験から言うと、最近の新しい取引アルゴリズムはまずMQL4で書かれ、その後、より多くの取引商品とより多くの取引所へのアクセスを備えた他の有料端末に移される。しかし、それにはもっと費用がかかる。プラットフォームと気配値で月250ドルから、最高で月1500ドルかかる。ロイターやブルームバーグでさえ、アルゴ・トレーディングの機能が非常に限られているため、月額2000ドルほどかかる。

先進性」に関しては、私(私たちはグループです)がMT4用のCUDA GPUでアクセラレーションを行う世界初の商用利用可能なトレーディング・プログラム(Expert Advisor)を開発しました。

そして、ここにMultichartsトレーディングシステムのフォーラムへのリンクがあります(ターミナルとクォートで月100...200ドル)。そして、彼らはnvidia自身、つまりCUDAサブシステムの開発者自身からそのことを聞いたという。

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

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

「親愛なるbomberone1、

MultiChartsのプログラム・アーキテクチャーでは、CUDAやGPUなどのシステムを利用することができません。MC では、現在の値の計算は以前の値の計算に基づいています。過去にCUDAに問い合わせたところ、MCで使用されているアルゴリズムのため、MCの計算を高速化するために彼らの技術を使用することはできないと確認されました。通常、CUDAやGPUなどはトレーディングには使用されないので、トレーディング・ソフトウェアでは一般的なことです。CUDAや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:

そうだね。

しかし、"WOULD "とはどういう意味でしょうか?

MT4ターミナル(およびMT5)は、長い間、 さまざまなトレーディング研究のための教育・学術用 ターミナルであった。ただ、彼らはあらゆる場所でそれを叫ばないだけで、おそらく無料であることが恥ずかしいのだろう(つまり「信用できない」と思われている)。

しかし、eRaastsの ような "何でもあり "が好きな人にとっては、最小限の労力さえかけずに研究を進めることができる。それが私の言いたいことだ。そして、MTが他に類を見ない有能なリサーチ・取引プラットフォームであるという事実、これは実に長い間、真実であった。
 
Andrey Dik:
しかし、多くのイー・ラスタの ような "既成概念にとらわれない "マニアにとっては、最小限の努力さえせずにリサーチする方が簡単だろう。それが私の言いたいことだ。そして、MTが他に類を見ない有能な研究・取引プラットフォームであるという事実、それは本当に昔からそうでした。

見当違いの罵り合いをすることに何の意味やメリットがあるんだ?Rシステムが気に入らない?ただ通り過ぎるだけだ!まあ、あるいは、彼らを教育するために2-3回、このR-schniki、そして通り過ぎることがある。完璧な数学的システムはありません。取引端末と同様。プロは、最初の場所で彼の仕事のためのプロのツールを選択する必要があります。だからこそ、複数のツールを使い分ける必要がある。単精度、倍精度、シーケンシャル・アルゴリズム、パラレル・アルゴリズム(サブルーチンの組み合わせは4つ)、C言語版、C言語版にCUDAを加えたもの、そして純粋なMQL4(MQL5.comマーケット用)のサブルーチンのLite版です。これはエラーチェックやアルゴリズムの正確性をチェックするために必要なことだ。C言語、MQL4、CUDAのすべてがほぼ同じように動作する。サン=サンチは以前から、Rも使うようにみんなに呼びかけている。サブルーチンの第8、第9バージョンも書くべきか?なぜですか?追加のパラメータや追加のエラー・エラーに後で対処するため?

Metaquotesは、条件付きで言えば、Rの関数を配布関数から「クローン」し始めた(実際には、このプロセスはRのパッケージよりもはるかに広い、これは良いことだ)。これは、他の統計関数を統計検定によって 検証するために必要である。

同じ関数が「おそらくすぐに」MQL4-5に登場するのに、なぜプログラマーはRの巨大なクレイジーな世界に没頭しなければならないのでしょうか?主な資源である時間をRのプラグインに費やす経済的な意味はどこにあるのだろうか?

Rの "一般的な受け入れ "は私を刺激しない。個人的には、科学の世界で何度も見てきたことだが、「普遍的に認められている」権威が、それを崇拝する者の味方になってしまう。個人的な経験から言うと、トレーディングの計算にはRの作者が夢にも思わなかったような精度が要求される。完全なアルゴ取引で最初の、そして最も成功した会社であるRenTecは、まず第一に宇宙物理学者、すなわち特に精密な計算に従事する人々を雇用している。RenTecは1990年代から、価格系列は非常に高密度な物質であり、その微細構造を自動的に抽出するには非常に精密な計算が必要であることを知っていた。

 
Sergiy Podolyak:

あなたにとって、見当違いの人を罵倒することに何の意味やメリットがあるのですか?Rシステムが気に入らない?ただ通り過ぎるだけだ!まあ、あるいは2-3回、このRシュニコフたちを教育して、それから通り過ぎる。完璧な数学的システムはありません。同様に、取引端末。プロは、最初の場所で彼の仕事のためのプロのツールを選択する必要があります。だからこそ、時には複数のツールを使う必要がある。

いや、私はあなたの名前を呼んでいるのではない。eRastが 好きなら、私のことをeMQL-jastと呼んでも構わない。

eRastが研究にRを選ぶのは見当違いだとは思わない 。既製のツールのシンプルさが彼らを惹きつけているのだ。コンピュータにRをインストールし、既製のパッケージから適切なものを選び、データをロードして結果を得る。しかし、MQLでは何か別のものを書かなければならない!- 彼らにとっては難しいことなのだ。そのため、MTの標準デリバリーに既製パッケージが登場することが、今とても重要なのです。それは、まさに「箱から出してすぐに使える」ことが好きな人々が必要としていることです。

条件付きでeRastとeMQL-astは、マルチクッカーの料理のファンと料理の即興のファンに分けられる。私は、これこそがMTの成功の鍵だと信じている。

 

正直なところ、何を議論しているのか理解できない。

RでExpert Advisorを書いている人はいるのだろうか?

市場で売りたい人がいるのでは?

Rでフル機能のExpert Advisorを書く人はいるのだろうか?

もしかしたら、MQLとRの両方で "ガッツ "が書かれ、DLLを通して効果的に絡み合ったハイブリッドなものを作る人がいるかもしれない。

私の意見では、MQLにいくつかの機能が欠けているのはごく自然なことであり、修正可能なことである。 しかし、Rにトレーディング機能が 完全に欠けているのは修正可能なことなのだろうか? なぜトレーダーはそれを必要とするのだろうか?

(素人考えで申し訳ありません)。

 
Реter Konow:

正直なところ、何を議論しているのか理解できない。

RでExpert Advisorを書いている人はいるのだろうか?

市場で売りたい人がいるのでは?

Rでフル機能のExpert Advisorを書く人はいるのだろうか?

もしかしたら、MQLとRの両方で "ガッツ "が書かれ、DLLを通して効果的に絡み合ったハイブリッドなものを作る人がいるかもしれない。

私の意見では、MQLにいくつかの機能が欠けているのはごく自然なことであり、修正可能なことである。 しかし、Rにトレーディング機能が 完全に欠けているのは修正可能なことなのだろうか? なぜトレーダーはそれを必要とするのだろうか?

(素人考えで申し訳ありません)。

お許しください。私が代わりにやってあげよう:

グーグルで「R取引戦略」を検索すると、69,900,000件がヒットする。

どういたしまして。

 
Sergiy Podolyak:

許すこと。あなたのために

R取引戦略」をグーグルで検索すると、69,900,000件がヒットする。

どういたしまして。

そして、いや...)

私は "Rアプローチ "が大好きです。)