分散投資手法「R-Portfolio - ページ 7

 
Reshetov:

MQL5、そしてMQL4では、このようなアルゴリズムのコードスピードはあまりにも低く、純粋なMQLでは何も得ることができず、少なくともDLLを作成する必要があるのです。ま た、ポートフォリオは、すべてのティックや小さな時間枠のバーでリアルタイムに最適化する必要がないため、いずれにしても意味をなさないでしょう。

由利 それは違いますね。mql 5はスピードの面ではガマに劣っていません。

使う目的としては、例えばFXに関しては、ツールではなく、ストラテジーのポートフォリオを最適化することに興味があります。 それで...の言い訳は認められません。:)

しかし、良いニュースは、私がmql5でコードを書いている間、あなたに付き合うことができるということです。自分で書くこともできる。できれば、アルゴリズムの説明だけでよい。

きっと楽しいと思います。

 
MetaDriver:

由利 それは違います。mql 5は、スピードの面では決してガマに劣っていません。

このようなおとぎ話を子供たちに聞かせるのですね。Java仮想マシンは、JITコンパイル、つまり、プログラムを実行する前にJavaコードをマシンコードにコンパイルする。つまり、Javaアプリケーションの実行はマシンコードで行われるのだ。

JavaとC++でQuake2のパフォーマンスを比較した結果をご覧ください: http://www.bytonic.de/html/benchmarks.html

このトピックに関する詳細:C#、C++、 Java、Delphiのベンチマーク

結局、Javaで書いたベンチマークとMQL5で書いたベンチマークを同じように走らせれば、簡単に確認できるのです。


MetaDriver

使う理由としては、例えばFXの場合、ツールではなく、ストラテジーポートフォリオの最適化に興味があるんです。 それで...言い訳は認めない。:)

さて、次に最初のEquity differences of strategiesをCSVファイルにアップロードし、最適化します。なぜ、MQL5がマシンコードで実行されるアプリケーションを「追い越す」ことができると言い訳する必要があるのでしょうか?

MetaDriver

しかし、良いニュースは、mql5でコードを書いている間、あなたに付き合うことができることです。自分で書くこともできる。できれば、アルゴリズムの説明だけでよい。


どうぞ。Brown-Robinsonのアルゴリズムは、秘密ではありません。以下は、Javaでのコードです。

  private int[] optimization(double[][] a) {
    Random rand = new Random();
    int m = a.length;
    int n = a[0].length;
    int[] p = new int[m];
    Arrays.fill(p, 0);
    int[] q = new int[n];
    Arrays.fill(q, 0);
    double[] x = new double[m];
    Arrays.fill(x, 0 d);
    double[] y = new double[n];
    Arrays.fill(y, 0 d);
    int r = rand.nextInt(m);
    int c = 0;
    for (int t = 0; t < 10000000; t++) {
        for (int j = 0; j < n; j++) {
          y[j] = y[j] + a[r][j];
        }
        c = 0;
        for (int j = 1; j < n; j++) {
          if ((y[j] == y[c]) && rand.nextBoolean()) {
            c = j;
          }
          if (y[j] > y[c]) {
            c = j;
          }
        }
        q[c] = q[c] + 1;
        for (int i = 0; i < m; i++) {
            x[i] = x[i] + a[i][c];
        }
        r = 0;
        for (int i = 1; i < m; i++) {
          if ((x[i] == x[r]) && rand.nextBoolean()) {
            r = i;
          }
          if (x[i] < x[r]) {
            r = i;
          }
        }
        p[r] = p[r] + 1;
    }

    return q;
  }
 
Reshetov:

このようなおとぎ話を子供たちに聞かせるのですね。Java仮想マシンは、JITコンパイル、つまり、プログラムを実行する前にJavaコードをマシンコードにコンパイルする。つまり、Javaアプリケーションの実行はマシンコードで行われるのだ。

由良さん、これはニュースだと思いますが、mql5の仮想マシンも同じような仕組みで動いています。コンパイラがバイトコードを行い、実行前にプリコンパイルしてネイティヴにします。javaやsharpと同じです。mql5のフォーラムをもっと読むべき。

JavaとC++でQuake2のパフォーマンスを比較した結果をご覧ください: http://www.bytonic.de/html/benchmarks.html

このトピックに関する詳細:C#、C++、 Java、Delphiのベンチマーク

Javaで書いたベンチマークとMQL5で書いたベンチマークを同じように実行すれば、簡単に確認できます。

確認しました。javaではなく、sharpと比較しましたが。同じ速度が出た。少なくともJavaはSharpより3~4割は速いと思います。もし違いがあるとすれば、それは誰に有利に働くかはまだわかっていない。 javaとの比較も賛成です。比較テストにお勧めのコードは?

では、Equity戦略の最初の差分をCSVファイルにダンプして、最適化します。

そんなバリアントには興味はない。埋め込みコードが欲しい。そして、そうするつもりです。

なぜ、MQL5がマシンコードで動作するアプリケーションを「追い抜く」ことができると言い訳する必要があるのでしょうか?

上記をご参照ください。追い抜くことではなく、同じであること(プラスマイナス10%)が重要なんだ。

どうぞ。Brown-Robinsonのアルゴリズムは、秘密ではありません。以下は、Javaでのコードです。

はい、そのコードを持っています。すでに投稿されていますね。すぐには理解できなかった。せめてコメントだけでも、ごちゃごちゃ言わずに本気で解決してくれることを期待していました。

よし、もう一回やってみるか。アルゴリズムの考え方については、インターネット上に記述があります。何とかします。

 
MetaDriver:

由良さん、これはニュースだと思いますが、mql5の仮想マシンも同じように動きますよ。コンパイラはバイトコードを作成し、起動前にネイティブに再コンパイルされます。javaやsharpと同じです。mql5のフォーラムをもっと読むべき。

確認しました。javaではなく、sharpと比較しましたが。同じ速度が出た。少なくともJavaはSharpより3~4割は速いと思います。もし違いがあるとすれば、それは誰に有利に働くかはまだわかっていない。 javaとの比較も賛成です。比較テストにお勧めのコードは?

そんなバリアントには興味はない。埋め込みコードが欲しい。そして、そうするつもりです。

上記をご参照ください。オーバーテイクではなく、プラスマイナス10%の同一性で勝負します。

はい、そのコードを持っています。すでに投稿されていますね。すぐには理解できなかった。せめてコメントだけでも、ごちゃごちゃ言わずに本気で考えてくれることを期待したのですが。

よし、もう一回やってみるか。アルゴリズムの考え方については、インターネット上に記述があります。何とかします。

ざまあみろ

しかし

;)

 
MetaDriver:

はい、そのコードを持っています。すでに投稿されていますね。すぐには手を出せなかった。せめてコメントだけでもと思い、ごちゃごちゃ言わずに本当に理解できるようにしました。

よし、もう一回やってみるか。アルゴリズムの考え方については、インターネット上に記述があります。何とかなるさ。

コードに複雑なところはありません。引数に支払い行列 - a[][] を渡し、出力に支払い行列の列によるプレイヤーの最適戦略 - qを渡す。


Random rand = new Random(); // Объект rand - генератор случайных чисел
int[] q = new int[n]; //  Объявление целочисленного массива q  размером n и выделение под него памяти
int m = a.length; // переменной m присваивается значение в виде количества строк в платежной матрице
int n = a[0].length; // переменной n присваивается значение в виде количества столбцов в платежной матрице
Arrays.fill(p, 0); // Массив p инициализируется нулевыми значениями

int r = rand.nextInt(m); // значению переменной r присваивается случайное число в диапазоне от 0 до m - 1
rand.nextBoolean() // с вероятностью 50% / 50% даст случайным образом значение true или false
それ以外のことは、C言語の類似言語を知っているプログラマーなら、何もしなくても理解できる。JavaとC言語の唯一の違いは、メモリを解放する必要がないことです。つまり、ある変数が中括弧ブロック{}の中で宣言されている場合、ブロックが閉じられた後、ブロック外の変数は無効となり、Java仮想マシンは 独自にそのために割り当てられていたメモリを解放することを意味するのです。ブロック内で宣言された変数をこのブロックの外で参照しようとすると、Javaコンパイラはエラーを発生させます。
 
Alex5757000:
全部mql5で書いてソース貼ったらどうだ?

ソースコードは、http://r-portfolio.sourceforge.net/ で公開されています。

必要であれば、任意のプログラミング言語で書き換えたり、ジョブに 連絡したりすることができます - 彼らは、MQLコードで何かを実装する必要がある人の様々な気まぐれや欲望を行う。

 
Yuriさん、あなたのプログラムによるポートフォリオ形成について質問です。 相関エキスパートアドバイザー」のスレッドで質問したのですが、このスレッドを見つけたのでここで質問させていただきます。メジャーと一緒にゴールドもポートフォリオに組み入れますが、通貨ペアとゴールドはティック価格が異なります。これは計算上どのように修正されるのですか?また、ポートフォリオにはどのペアを使用するのですか?このテーマに興味があり、経験豊富な専門家から、使用した場合のおおよその結果を教えてほしい。
 
FION:
Yuriさん、あなたのプログラムによるポートフォリオ形成について質問です。 相関エキスパートアドバイザー」のスレッドで質問したのですが、このスレッドを見つけたのでここで質問させていただきます。メジャーと一緒にゴールドもポートフォリオに組み入れますが、通貨ペアとゴールドはティック価格が異なります。これは計算上どのように修正されるのですか?また、ポートフォリオにはどのペアを使用するのですか?このテーマに興味があり、経験豊富な専門家から、使用した場合のおおよその結果を教えてほしい。
菅原 俊彦 この人の相関 図を見る
 
Reshetov:

Java仮想マシンは、JITコンパイル、つまり、プログラムを実行する前にJavaコードをマシンコードにコンパイルすることを行う。つまり、Javaアプリケーションの実行はマシンコードで行われるのだ。


javaのjitは、部分的にマシンコードにコンパイルされます。私の理解では、mql5はプログラム全体を一度にマシンコードにコンパイルします。これはjitよりもaotです。
 
Reshetov:
菅原 俊彦 この人の相関 図を見る

.

http://sourceforge.net/projects/r-portfolio/- ロシア語はありますか?