mql5言語の特徴、微妙なニュアンスとテクニック - ページ 153

 
Roffild:

ArrayReverseのヘルプにあります。

ArraySetAsSeries()関数は配列の要素を物理的に移動させるのではなく、インデックスの方向を逆に し、時系列のように要素へのアクセスを整理するのみ である。ArrayReverse()関数は、配列の項目を物理的に移動させ、配列を「反転」させるものです。

しかし、このコードはその逆を証明している。

なぜ?そうなんです。

番号付けが時系列に似ている配列、つまりバーがゼロで最新が最も早い配列を扱う場合、新しい要素が追加されると、それは最新のものの次、つまり最も早いものになります。

また、時系列のように配列に番号が振られていない場合は、0 番目の要素が最も早く、最も新しい要素が最も遅いということになります。そのため、新しい要素が追加された場合、最新の要素の次に表示されます。
あなたのテストではどうなっているのでしょう。

どこに証拠があるのか、私にはわからない。どのように証明すれば、配列の先頭がメモリ上のどこにあるか、インクリメントステップが正か負かを知ることができるのでしょうか。
配列を渡してポインターを使うことで、初めて証明できる。
しかし、この操作の実行にかかる時間を計測することで、より簡単に証明することができるのです。100 000 000個の配列が瞬時に「反転」する場合、反転していないことは明らかで、先頭への参照が変わり、増分が符号を変える。
ArraySetAsSeries() 関数はいつも使っていますが、時間的に絶対的に余裕があるのがわかりますね。だから、あなたは間違っている。

正直なところ、高速なArraySetAsSeries() があるのに、なぜ遅いArrayReverse 関数が必要なのか理解できません。

 
Roffild:

ArrayReverseのヘルプにあります。

ArraySetAsSeries()関数は配列の要素を物理的に移動させるのではなく、インデックスの方向を逆に し、時系列のように要素へのアクセスを整理するのみ である。ArrayReverse()関数は、配列の項目を物理的に移動させ、配列を「反転」させるものです。

しかし、このコードはその逆を証明している。

asSeriesフラグを持つ配列のメモリ再割り当ては、当然ながら考慮されているのですね。そこには、こんなものがあるはずだ。

template<typename T>
T* ReAllocArray(T* array, size_t size, size_t newSize, bool asSeries) {
    auto _array = (T*)realloc(array, newSize * sizeof(T));
    if (_array == NULL) throw bad_alloc();
    auto _ptr = _array + size;
    auto ptr = _array + newSize;
    if (asSeries){
        while (_ptr != _array) *(--ptr) = *(--_ptr);
        while (ptr != _array) new(--ptr) T;
    }
    else {
        while (_ptr != ptr) new(_ptr++) T;
    }
    return _array;
}
 
Vladimir Simakov:

asSeriesフラグを持つ配列のメモリ再割り当ては当然考慮されているはずです。あそこにはそういうものがあるはずだ。

はい、考慮されているのでしょう。しかし、この動作はCopyRates() に対応していない。

受信側の配列がどのようなプロパティ(as_series=true や as_series=false )を持っていても、時間的に最も古い要素が配列に割り当てられた物理メモリの先頭に来るようにデータがコピーされます。

また、ArrayCopy() にも。

count<0 または count>src_size-src_start の場合,配列の残りの部分全体がコピーされます.配列は左から右へコピーされます。シリアル配列の場合、左から右へのコピーを 考慮して、開始位置が正しく上書きされます。

最後の一文は、なんだか曖昧な感じですね。
 

ちょっとショックを受けているところです。Javaでテストを書きました。JavaはC言語とほぼ同じ速さなので、MQL5より若干速いことが判明しました。

どうやっているのかわかりませんが、実は通訳の言語なのです。

Pythonでも同じなのかな。

もちろん、MQL5が悪いと言っているわけではありません。ただ、Javaがかっこよすぎるんです。

何か見落としていたようだ。いつからインタプリタがコンパイラ並みに速くなったんだ?

どうやらこれは部分コンパイルでしかできないようで、つまりインタプリタが純粋ではないのです。

 
Nikolai Semko:

ちょっとショックを受けているところです。Javaでテストを書きました。JavaはC言語とほぼ同じ速さなので、MQL5より若干速いことが判明しました。

どうしてそんなことができるのか、理解できない。事実、通訳言語である。

Pythonでも同じなのかな。

もちろん、MQL5が悪いと言っているわけではありません。ただ、Javaがかっこよすぎるんです。

何か見落としていたようだ。いつからインタプリタがコンパイラ並みに速くなったんだ?

どうやらこれは部分コンパイルでしかできないようで、つまりインタプリタが純粋ではないのです。

MQLはインタプリタでもある。

 
Nikolai Semko:

ちょっとショックを受けているところです。Javaでテストを書きました。JavaはC言語とほぼ同じ速さなので、MQL5より若干速いことが判明しました。

どうやってるんだろう、実は通訳の言葉なんです。

Pythonでも同じなのかな。

もちろん、MQL5が悪いと言っているわけではありません。ただ、Javaがかっこよすぎるんです。

何か見落としていたようだ。いつからインタプリタがコンパイラ並みに速くなったんだ?

どうやらこれは部分コンパイルでしかできないようで、つまりインタプリタが純粋ではないのです。

Javaはバイトコードに変換されるものの、独自の仮想 実行マシン(JVM)を持っています。
また、他のインタプリタを持つ言語とは異なり、厳密に型付けされた言語である。
おそらく、厳密な型付けとJVMが、命令の高速な実行とハードウェアへの伝達を可能にしているのだろう。
アメリカの取引端末がJavaで書かれているのには理由がある。シカゴのCMEグループは、Javaで書かれた端末を正式に提供している。
あるプログラマーが、「Javaのルーツは通信だ」と言っていた。
通信では、最初からデータを処理し、転送するスピードが必要です。
そして、オラクルにはこの言語を開発するための独自のコミュニティがあります。
つまり、この言語は生きていて、Oracleコミュニティによって最終決定されているのです。

ちなみに、「Quik」ブランドや「LUA」言語もアメリカ人が開発したものである。
しかし、シャギーの90年代には、ロシア連邦への売り込みに成功した。
その頃、アメリカ人はすでにLUAに将来的な発展性がないことを理解していたのです。
そして、ソ連崩壊後、為替市場が形成され始めたばかりのロシア連邦に売り込むことに成功したのである。

 
Nikolai Semko:

ちょっとショックを受けているところです。Javaでテストを書きました。JavaはC言語とほぼ同じ速さなので、MQL5より若干速いことが判明しました。

どうやっているのか理解できない、本来は通訳言語なんだけどね。

そこでのモデルは.Netと同じで、ソースコードがバイトコードにコンパイルされるとインタプリタになり、与えられたPCでバイトコードを解凍すると、実行される仮想環境用にネイティブコードが生成される、つまりコンパイルされたコードになるのです

https://habr.com/ru/post/107585/


Javaで "Java compiler or interpreter "でググると、似たような記事があります。

 
Алексей Тарабанов:

MQLはインタプリタでもある。

ジャスティフィケーション?

 
Nikolai Semko:

ちょっとショックを受けているところです。Javaでテストを書きました。JavaはC言語とほぼ同じ速さなので、MQL5より若干速いことが判明しました。

どうやってるんだろう、実は通訳の言葉なんです。

Pythonでも同じなのかな。

もちろん、MQL5が悪いと言っているわけではありません。ただ、Javaがかっこよすぎるんです。

何か見落としていたようだ。いつからインタプリタがコンパイラ並みに速くなったんだ?

どうやらこれは部分コンパイルでしかできないようで、つまりインタプリタが純粋ではないのです。

起動にどれだけの時間がかかるか、どれだけのメモリを消費し、何バイトのコードをコンパイルするためにJVMが何スレッドを走らせるか、気になったことはないだろうか。 hello worldをオンザフライでコンパイルするmonsterを走らせたら、結局nativ.Cモンスターが持っていないことを除けば。そしてpythonについて。

トレーディング、自動売買システム、ストラテジーテストに関するフォーラム

MetaTrader 5 Python User Group - メタトレーダーでPythonを使用する方法

ビクト, 2019.12.07 07:12

pythonについて- 最近、pythonで書かれたranger(ファイルマネージャー)が話題になっていますね。数日使ってみた感想は、クールなアイデアで面白い機能があるが、pythonが(バックグラウンドで複雑なタスクを実行した場合)本当に遅いということです。ぼったくり、なんでみんなそんなにパイソンが好きなんだろ う。Cに 似たようなものを置く

まあいいや、マルチコアのナンバークラッシャーを買って、ワゴンのRAMを積んで、私のJava/Sharp/...は、このテストでは非常にクールで、全体の負荷については黙っておこう。Cに追いつくことはないだろう。進歩、80年代のテトリスをシャープで書き換えて、以前と同じ速さで、しかも60コアのCPUでレースする))。

ZS:Elbrusの2スレッドが、x86命令からのブロードキャストにしか関わらないのと同じようなものだ。小包を運ぶBelAZ。

 
ちなみに、シャープの方は、ちびっこたちがネイティブコードに直接コンパイルできるようにしたようです。 まだ試していませんが、カッコイイと思われます。
理由: