Разработка торговых стратегий связана с обработкой больших объемов данных. Теперь прямо в MQL5 вы можете работать с базами данных с помощью SQL-запросов на основе SQLite. Важным преимуществом данного движка является то, что вся база данных содержится в единственном файле, который находится на компьютере пользователя.
完全なGROUP BYの場合、通常のインデックスは役に立たない――テーブルは結局丸ごと読み込まれるし、「SCAN ... USING INDEX」という実行計画は、実質的にスキャンと同じだ。 クエリのすべての列がインデックスに含まれている必要があり、その場合、実行計画は「SEARCH ... USING COVERING INDEX」となり、テーブルの行まで処理が進むことはありません。その場合は×5の速度向上となります。
一方、インデックスが実際に効果を発揮するのは、パネルが再描画のたびに実行する1文字単位の抽出処理です:WHERE SYMBOL=? AND ENTRY=1 — インデックスなしでは711ミリ秒、インデックスありでは208ミリ秒です。
SQLite:MQL5におけるSQLデータベースのネイティブ操作
による簡単なクエリの例
繰り返しになりますが、私自身はもちろん、データベースを一切使用せず、インデックスと必要なメソッドを備えた軽量なクラスを使用しています。これにより、リソース消費とパフォーマンスの面で明らかなメリットが得られます。
学生向けではないかもしれませんが、やはり「おもちゃ」には違いありません。というのも、SQLite を使う前に、 履歴をすべて「掘り起こして」、項目ごとにテーブルに格納しなければならないからです。 これには膨大な時間がかかります。もしこれをMQL5に組み込むなら、注文や取引の履歴の読み取りも、直接テーブルで行う必要があります…私見ですが
さらに深く掘り下げてみた(AI「Opus 5」を活用し、テスト環境を構築して、50万件の取引データ、20の銘柄、20のマジックナンバーを用いた合成データを生成し、パフォーマンス測定を実施した)。
余談ですが、MonetDB/eとの比較も興味深いでしょう。SQLiteと同様に組み込み型のサーバーレスですが、いくつかの理由から、複雑なクエリでは格段に高速であるはずです。もちろん、適切なスキーマが前提ですが :-)
余談ですが、MonetDB/eとの比較も興味深いでしょう。SQLiteと同様に組み込み型のサーバーレスですが、いくつかの理由から、複雑なクエリでは格段に高速であるはずです。もちろん、スキーマが適切であることが前提ですが :-)