Все функции типа iMA, iAC, iMACD, iIchimoku и т.п., создают в глобальном кеше клиентского терминала копию соответствующего технического индикатора. Если копия индикатора с этими параметрами уже существует, то новая копия не создается, а увеличивается счетчик ссылок на данную копию. Эти функции возвращают хэндл соответствующей копии индикатора...
出力周波数ではなく、ウェブの生成周波数を見ていたことが判明したのです。
これらは異なる数字で、お互いの倍数である。
ウェブの生成頻度(出力なし)と出力頻度(生成なし)の計算を少し間違えていたことが判明しました
以下は、より正しいバージョンです。
私のプロセッサーでの結果。
出力せずに200個の平滑化した円を1フレーム生成して純粋に時間をかけると、1秒間に約500フレームで発生します。
出力なしで200個の非平滑化円形のフレームを形成する - 約1000fps。
画像(キャンバス)の出力自体(Update機能)の周波数は、1秒間に約650フレームです。
本当によく頑張りましたね。
(int)double型や(double)int型の大量変換や、一般的なmat演算でのint+doubleの混在に注意すること。
これは、プロセッサに乱暴なオーバーヘッドを与えるもので、まさにそんな高価なアセンブラコマンドです。doubleでカウントしている場合は、doubleでカウントし続け、整数型に切り替えないようにします。
cvtsi2sd/cvttsd2si のようなコマンドは非常に長いです。x86で一番遅い命令」の記事中の悪役ナンバー2に ちょっとしたヒントがあります。
とても貴重な記事をありがとうございました。
しかし、正直なところ、このシンプルなスクリプトでなぜそうなるのか理解できない。
double 型を long 型に変換した long 型の合計は,変換せずに同じ配列の double 型の合計よりもずっと高速です.
まず、アセンブリコードと、極めて単純なケースの最適化の 結果を見るべきである(スーパーマイクロシンセティクスは長い間、誤解を招いてきた)。コンベア実装の理想的なケースにぶつかりやすいのです。
第二に、このコードがどのようにコンパイルされ、どれだけの時間をかけて実行されるかを保証できる人はほとんどいない。
コードに1行/1コマンドを加えるだけで、スピードが劇的に変わるのです。本当の コード/データは、L1/L2キャッシュから出るかもしれないし、それだけかもしれない。
どのような効果があったのでしょうか?理論的/超合理的には、整数コマンドはスピードに役立つと思われますが、実際のコードでは消耗品です。数十倍・数百倍のコードがあるため、対流がなく、整数計算から実数計算へのジャンプが絶えず、最適化には限界があります。
MQL4で任意の型の配列の初期 化が、MQL5に比べて10倍以上遅いのはなぜですか?
MQL4で任意の型の配列の初期 化が、MQL5に比べて10倍以上遅いのはなぜですか?
なぜなら、そこではすべての配列が動的であり、言語が10倍遅くなるからです。
数百本の移動平均線をCanvasで実装した超高速インジケーターです。
100 MAライン(ピリオドステップ10)-計算と画面表示の時間-4-7ミリ秒
1000行MA(期間ステップ1)-計算と表示の時間-20-30ミリ秒。
あまりコードのテストはしていないのですが。バグがあるかもしれません。1ピクセルの太さのバーに対してのみ実装される(このスケールに強制的に合わせられる)。また、画面のリフレッシュレートも最適化されていません。すべての行を計算し、1ティックごとに完全に出力します。
数百本の移動平均線をCanvasで実装した超高速インジケーターです。
100ラインMA(ピリオドステップ10)-計算と画面表示の時間-4-7ミリ秒
1000 MAライン(期間ステップ1)-計算と表示のための時間-20-30ミリ秒
標準的なインジケータでは、すべてが死んでしまう。
クールに、標準的なインジケーターはすべて掛けていたはずです。
そして、1マイルのコードがある...
それもテンプレートでなければできないことかもしれません。1つのインジケーター本体に表示されるインジケーターラインの 数の制限についてはわかりません。
...
1つのインジケーター本体に表示されるインジケーターの行 数の制限を意識していない。
限界はある。最大512個のインジケーターバッファを作成可能 >>https://www.mql5.com/ru/docs/indicators