記事"SQLite: MQL5 での SQL データベースのネイティブな処理"についてのディスカッション

 

新しい記事 SQLite: MQL5 での SQL データベースのネイティブな処理 はパブリッシュされました:

トレード戦略の開発には、大量のデータの処理が関連しています。 今では、MQL5 で直接 SQLite に基づいた SQL クエリを使用してデータベースを操作できるようになりました。 このエンジンの重要な特徴は、データベース全体がユーザーのPC上の単一のファイルに配置されるということです。

メタエディターでの SQL クエリのデバッグ

データベースを操作するためのすべての関数は、コードが失敗した場合にエラーコードを返します。 次の操作を行うと、次の 4 つのシンプルなルールに従っても問題が発生しません。

  1. すべてのクエリ ハンドルは、使用後に破棄する必要があります。
  2. データベースは完了前にデータベースを閉じる必要があります。
  3. クエリ実行結果をチェックする必要があります。
  4. エラーが発生した場合、クエリは最初に破棄され、データベースは後で閉じられます。

最も難しいのは、クエリが作成されていない場合のエラーを理解することです。 メタエディターでは、*.sqlite ファイルを開いて、SQL クエリを使用してファイルを操作できます。 例として、company.sqlite ファイルを使用してどのように行われるかを見てみましょう。

1. 共通のターミナル フォルダで、company.sqlite ファイルを開きます。

2. データベースを開くと、ナビゲーターに COMPANY テーブルが表示されます。 ダブルクリックします。

3. "SELECT * FROM COMPANY" クエリがステータスバーに自動的に作成されます。

4. クエリは自動的に実行されます。 F9 キーを押すか、または [実行] をクリックして実行することもできます。

5. クエリ実行結果を参照してください。

6. 何か問題がある場合は、エラーがエディタのJournalに表示されます。


SQL クエリを使用すると、テーブル フィールドの統計情報 (合計や平均など) を取得できます。 クエリを作成し、動作するかどうか確認しましょう。

作者: MetaQuotes

 

分かった人は、このタスクの実装を示してください。

  1. 2つのターミナルがあります。
  2. あるシンボルのリアルタイム相場をターミナル1からターミナル2の対応するカスタムシンボルに 転送する必要がある。
 
記事と有用なアプリケーションの良い例に感謝する。
 
fxsaber:

それを理解した人は、そのようなタスクの実装を示してほしい。

  1. 2つのターミナルがあります。
  2. あるシンボルのリアルタイム相場をターミナル1からターミナル2の対応するカスタムシンボルに転送する必要がある。

このタスクの枠組みの中で、両方の場合(Terminal2 のベースを読むときと Terminal1 のベースに書き込むとき)、トランザクションメカニズムを通じて ブロックされなければならないことを正しく理解していますか?


データベースが更新されたことを判断する最も簡単な方法は何ですか?

 
fxsaber:

このタスクのフレームワークでは、両方の場合(Terminal2 でベースを読み取り、Terminal1 でベースに書き込む場合)、トランザクションメカニズムを通じて ブロックされる必要があることを正しく理解していますか?

いいえ、これは別のロックです。ベースがすでに別のMQL5プログラムやMetaEditorで開かれている場合、それを変更しようとすると5124エラーが発生します。

 
Rashid Umarov:

いいえ、これは別のロックです。ベースがすでに他のMQL5プログラムやMetaEditorで開かれている場合、それを変更しようとすると5124エラーが発生します。

データ交換の 可能性は、ファイルを介してよりも少ないことがわかりましたか?

 
fxsaber:

データを共有する可能性は、ファイルを通じてよりも少ないように見えるが?

データベースの実装による

ファイルは常に不便である-シーケンシャルなアクセスと、単一のファイルで作業する場合と同じ問題がある。

 
fxsaber:

データを共有する可能性は、ファイルを通じてよりも少ないように見えるが?

SQLiteはサーバーサイドのデータベースではなく、組み込み型のデータベースです。そのため、異なるプロセスからの 共同利用や同時 利用はできません。

あくまでMQL5での社内利用と、他システムとの共有(同時利用ではない)・転送が目的です。

内蔵データベースの利点は、どのエージェントでも利用でき、リモートやストラテジーテスターで 便利にデータを扱うことができる点です。


1つのターミナルで異なるMQL5 Expert Advisorが稼働している場合、同じデータベースを共有することができます。

 
Renat Fatkhullin:

SQLiteはサーバーサイドのデータベースではなく、組み込みデータベースです。そのため、異なるプロセスからの共有や同時 使用はできません。

同じターミナルで実行されている異なるエキスパート内では、同じデータベースを共有することができます。

ありがとうございます。

 

µl5 用に記述されているものを µl4 で使用することはできますか?

関数やライブラリ操作に互換性はあるのでしょうか? それともμl5専用なのでしょうか?

 
Chiripaha:

µl5で説明されていることは、µl4でも使えますか?

また、µl5 専用なのでしょうか?

ネイティブ SQLite サポートは MetaTrader 5 と MQL5 のみです。

これはライブラリではなく、ストラテジーテストエージェントを 含むシステム全体に深く統合された MQL5 の標準機能です。