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

 

Renat Fatkhullin:

1つのターミナルで起動した異なるMQL5 Expert Advisor内で、同じデータベースを共有することができます。

1つのターミナルで 同じデータベースを使用した2つのExpert Advisorの動作をテストしました。どちらのExpert Advisorも2秒間のタイマーで1つのファイルにデータを書き込みます。

Expertアドバイザーの名前が違うだけです。

2020.02.19 17:56:14.624 SecondExpertDataBase (GBPUSD,H1)        16:56:14: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:16.627 SecondExpertDataBase (GBPUSD,H1)        16:56:16: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:18.616 SecondExpertDataBase (GBPUSD,H1)        16:56:18: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:20.630 SecondExpertDataBase (GBPUSD,H1)        16:56:20: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:22.078 FirstExpertDataBase (USDCHF,H1)         16:56:21: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:22.629 SecondExpertDataBase (GBPUSD,H1)        16:56:22: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:24.071 FirstExpertDataBase (USDCHF,H1)         16:56:24: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:24.619 SecondExpertDataBase (GBPUSD,H1)        16:56:24: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:26.070 FirstExpertDataBase (USDCHF,H1)         16:56:26: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:26.619 SecondExpertDataBase (GBPUSD,H1)        16:56:26: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:28.079 FirstExpertDataBase (USDCHF,H1)         16:56:27: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:28.625 SecondExpertDataBase (GBPUSD,H1)        16:56:28: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:30.079 FirstExpertDataBase (USDCHF,H1)         16:56:30: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:30.617 SecondExpertDataBase (GBPUSD,H1)        16:56:30: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:32.069 FirstExpertDataBase (USDCHF,H1)         16:56:32: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:32.627 SecondExpertDataBase (GBPUSD,H1)        16:56:32: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:34.073 FirstExpertDataBase (USDCHF,H1)         16:56:33: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:34.627 SecondExpertDataBase (GBPUSD,H1)        16:56:34: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:36.616 SecondExpertDataBase (GBPUSD,H1)        16:56:36: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:38.079 FirstExpertDataBase (USDCHF,H1)         16:56:38: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:38.615 SecondExpertDataBase (GBPUSD,H1)        16:56:38: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:40.072 FirstExpertDataBase (USDCHF,H1)         16:56:40: added 1 record on USDCHF to timer.sqlite
2020.02.19 17:56:40.618 SecondExpertDataBase (GBPUSD,H1)        16:56:40: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:42.630 SecondExpertDataBase (GBPUSD,H1)        16:56:42: added 1 record on GBPUSD to timer.sqlite
2020.02.19 17:56:44.617 SecondExpertDataBase (GBPUSD,H1)        16:56:44: added 1 record on GBPUSD to timer.sqlite


以下はMetaEditorでのデータベースの表示です。


ファイル:
 
Chiripaha:

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

MQL4 では、MQL 用のラッパーを介してネイティブの Sqlite3_32.dll を使用できます。

/*
 * MT4 用 SQLite インターフェース
 */

#import "sqlite3_wrapper.dll"
int sqlite_exec (string db_fname, string sql);
int sqlite_table_exists (string db_fname, string table);
int sqlite_query (string db_fname, string sql, int& cols[]);
int sqlite_next_row (int handle);
string sqlite_get_col (int handle, int col);
int sqlite_free_query (int handle);
#import

これはMQL用のラッパーです。SQLite3Wrapper.dllと 混同しないでください。

しかし、まだオンラインかどうかはわかりません。

UPD: https://github.com/Shmuma/sqlite3-mt4-wrapper
Shmuma/sqlite3-mt4-wrapper
Shmuma/sqlite3-mt4-wrapper
  • Shmuma
  • github.com
Database file is by default stored to . If you specify a full path as database filename, it's used. Terminal data path TERMINAL_DATA_PATH can be known by the following instruction. Open MT4 Open [File] menu Click "Open Data Folder" Sample Many sample scripts in under . Precautions Argument mess MT4 build 610 has a weird bug when dll function...
 
fxsaber:

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

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

もう1つニュアンスがあります。(日付が伸びている)気配値のような、ばらばらにならず、値が伸びている一貫性のあるデータをデータベースに保存することは、非常に高価な操作です。ツリーはバランスが取れておらず、1つの枝は無限に成長し、エンジンは定期的にツリーのバランスを調整します(これはゴミ収集よりも悪いことです)。もしかしたら、これはインデックス付きテーブルにしか適用されないのかもしれない。あるいは、この数年間使っていなかった間に、すでに解決されていたのかもしれない。試してみないとわからない。もしかしたら、開発者も分析してくれるかもしれない。

 

データベースインポート()

簡単なスクリプト

void OnStart()
  {
  string filename="DOMdb.db";
  int database=DatabaseOpen(filename, DATABASE_OPEN_READWRITE  );
  DatabaseImport(database,             // DatabaseOpenで受け取ったデータベースハンドル
                     "DOMtb",             // データ挿入用のテーブル名
                     "AllDOM.csv",          // データをインポートするためのファイル名
                       0,             // フラグの組み合わせ
                      ";",         // データ・セパレーター 
                        0,         // 何行目をスキップするか 
                      "//"     // コメントを定義する文字列
   );
   
  }

2020.02.20 15:09:27.171 MQL5 'DOMcopy.ex5'に新しいサポートされていないバージョンがあります。

version 5 build 2323 latest meta-editorも同じで、デバッグがうまくいきません。

何か未完成なのでしょうか?

 

DatabaseImport関数は まだ公開されていません。

リリースをお待ちください。

 
この話題には関係ないかもしれませんが:なぜ開発者はまだMS SQL Serverへの接続を実装していないのでしょうか?
 
Rashid Umarov:

DatabaseImport関数はまだ公開されていない。

公開をお待ちください。

バージョン5ビルド2326も同じなので、いつ安定版が出るか待ちましょう。

 
IuriiPrugov:

バージョン5ビルド2326は、安定版を待つことと同じことであり、いつですか?

取引、自動売買システムとテスト取引戦略に関するフォーラム。

MetaTrader 5ビルド2340の新バージョン:テスターでアカウント設定を管理し、Pythonとの統合を拡大する

メタクォーツ, 2020.02.20 14:55

2020年2月21日(金)、MetaTrader 5プラットフォームの更新版がリリースされます。アップデートには以下の変更が含まれます:

  1. MetaEditor:SQLiteデータベースを便利に操作する機能を追加しました。

    前回のプラットフォームアップデートでは、MQL5から直接SQLiteデータベースを操作するためのサポートを追加しました。主な機能はMetaEditorのユーザーインターフェイスから利用できるようになりました。

    • データベースの作成と接続
    • テーブルの表示とクイックデータクエリ
    • SQLクエリの作成と実行、変更のロールバック

    動作
    データベースを素早く作成するには、"MQL5 Wizard "を使用します。ここですぐに最初のテーブルを作成し、フィールドのリストを定義することができます。




    データベースを作成すると、"Navigator "の新しいセクションに移動します。データを扱う作業はすべてこのセクションから行います。左側には、データベースのテーブルが表示されます。最初の1,000レコードを素早く照会するには、テーブル名をダブルクリックします。ここで他のデータベースを作成したり開いたり、テーブルを操作することもできます。エディターのメイン部分は、データベースを操作する場所です。テーブルをデータで満たし、検索と選択を行い、SQLクエリーを入力するなど、 。






    MetaTrader 5でのデータベース操作の詳細については、記事"SQLite: Native Work with SQL Databases in MQL5"をお読みください。

    .
  2. MetaEditor:多言語プロジェクトのサポートを追加し続けています。このバージョンでは、Pythonスクリプトを扱うための機能を拡張しました:

    • MQL5ウィザード "を使って、必要なライブラリの依存関係をすぐにコードに含めることができます。
    • ナビゲーターに特別なアイコンが追加され、エディターでシンタックスハイライトができるようになりました。
    • MetaEditorを通してスクリプトを実行すると、Pythonコンソール(stdout, stderr)からのメッセージが "Errors "セクションに表示されます。




    エディタでスクリプトを実行するには、"Compile "をクリックしてください: .





    Pythonを使用するには、MetaEditorの "Settings / Compilers "セクションでPythonへのパスを指定することを忘れないでください。また、MetaTrader 5ライブラリを使用するには、 。
    pip install MetaTrader 5
    Pythonとの統合については、

  3. MQL5: Pythonとの統合を完全に再設計しました。多くの新機能が追加され、コマンド名が変更されました。

    新しいコマンドの名称
    既存のコマンドの 名称が変更されました:
    MT5Initialize       -> initialize
    MT5Shutdown         -> shutdown
    MT5TerminalInfo     -> terminal_info
    MT5Version          -> version
    MT5CopyRatesFrom    -> copy_rates_from
    MT5CopyRatesFromPos -> copy_rates_from_pos
    MT5CopyRatesRange   -> copy_rates_range
    MT5CopyTicksFrom    -> copy_ticks_from
    MT5CopyTicksRange   -> copy_tick_range

    新しいコマンド
    サポートされるコマンドのリストが大幅に拡張されました。取引と取引履歴の操作、金融商品と現在の口座に関する情報の取得の機能が追加されました。

    • account_info() - 現在の口座に関する情報を取得。AccountInfoInteger,AcountInfoDouble,AccountInfoString のアナログ。
    • positions_total() - 未決済ポジションの数を取得する。PositionsTotal のアナログ。
    • positions_get(symbol, ticket) - シンボルまたはチケットでオープンポジションを取得する。
    • orders_total() - 注文数を取得する。OrdersTotal の類似。
    • orders_get(symbol, ticket) - シンボルまたはチケットごとの未決済注文を取得。
    • history_orders_total(from, to) - 指定した時間間隔の履歴の注文数を取得する。
    • history_orders_get(from, to, position, ticket) - 指定した時間間隔の履歴から、チケット別またはポジション別に注文を取得します。
    • history_deals_total() - 履歴のディール数を取得します。HistoryDealsTotal の類似。
    • history_deals_get(from, to, position, ticket) - 指定された時間間隔で、チケットまたは位置によるフィルタリングで履歴から取引を取得します。
    • symbol_info(symbol) - 金融商品に関する情報を取得します。SymbolInfoIntegerSymbolInfoDoubleSymbolInfoString の類似。
    • symbol_info_tick(symbol) - シンボルの最後のティックを取得する。SymbolInfoTick の類似。
    • symbol_select(symbol, enable) - 「Market Watch」でシンボルを有効/無効にする。SymbolSelectの 類似。
    • order_check(request) - 注文の証拠金をチェックする。OrderCheck の類似。
    • order_send(request) - 注文をサーバーに送信する。OrderSend の類似。
    • order_calc_margin(action, symbol, volume, price) - 注文のマージン計算。OrderCalcMargin の類似。
    • order_calc_profit(action, symbol, volume, price_open, price_close) - 利益の計算。OrderCalcProfitの 類似。

    チャート上でのPythonスクリプトの実行
    Pythonスクリプトは、通常のMQL5プログラムと同様に、プラットフォームのチャート上で直接実行することができます。それらは "Navigator "に特別なアイコンで表示されます。



    スクリプトのメッセージは "Tools / Experts "セクションに表示されます。スクリプトがMetaTrader 5ライブラリを 使用している場合、商品、口座、取引に関する情報を受け取ることができます。

    Pythonスクリプトは、他のMQL5スクリプトやExpert Advisorと並行して同じチャート上で実行できます。スクリプトの実行がループしている場合にスクリプトを停止するには、チャートからスクリプトを削除するだけです。

    追加の保護機能
    サードパーティのPythonライブラリを使用する際、お客様の口座をさらに保護するため、ターミナル設定に「Disable automatic trading via external Python API」オプションが追加されました。




    このオプションが明示的に無効化されている場合に限り、Pythonスクリプトによる取引が許可されます。 。

  4. MQL5: MQL5プログラムの再起動とMQL5プログラムからのカスタムインジケーターの再作成が大幅に高速化されました。場合によっては、スピードが数百倍になりました。


  5. DatabaseImport
    ファイルからテーブルにデータをインポートします。
    long  DatabaseImport(
       int           database,          // DatabaseOpenで受け取ったデータベースハンドル
       const string  table,             // データ挿入用のテーブル名
       const string  filename,          // データをインポートするためのファイル名
       uint          flags,             // フラグの組み合わせ
       const string  separator,         // データ・セパレーター 
       ulong         skip_rows,         // 何行目をスキップするか 
       const string  skip_comments      // コメントを定義する文字列
       );

    DatabaseExport
    テーブルまたは SQL クエリの実行結果を CSV ファイルにエクスポートします。ファイルは UTF-8 エンコーディングで作成されます。
    long  DatabaseExport( 
       int           database,           // DatabaseOpenで受け取ったデータベースハンドル 
       const string  table_or_sql,       // テーブル名またはSQLクエリ 
       const string  filename,           // データ・エクスポート用のCSVファイル名 
       uint          flags,              // フラグの組み合わせ 
       const string  separator           // CSVファイルのデータ区切り文字 
       );

    DatabasePrint
    テーブルまたは SQL クエリの実行結果を Expert Advisor ログに出力します。
    long  DatabasePrint(
       int           database,          // DatabaseOpenで受け取ったデータベースハンドル
       const string  table_or_sql,      // テーブルまたはSQLクエリ
       uint          flags              // フラグの組み合わせ
       );

  6. MQL5: ファイルまたはフォルダを作成/開くためのシステムダイアログを呼び出すFileSelectDialog関数を追加しました。
    int  FileSelectDialog(
       string   caption,              // ウィンドウのタイトル
       string   initial_dir,          // 開始フォルダ
       string   filter,               // 拡張フィルター
       uint     flags,                // フラグの組み合わせ
       string&  filenames[],          // ファイル名を含む配列
       string   default_filename      // デフォルトのファイル名
       );
    この新しい関数により、MQL5プログラムとの便利なユーザー・インタラクションを実装できます。

  7. MQL5: DEAL_FEE(取引を行うための支払い)がENUM_DEAL_PROPERTY_DOUBLE列挙に追加されました。実際には、これはブローカーが請求できる別のタイプの手数料です。

  8. テスター:ストラテジーをテストする際に、取引限度額、証拠金設定、手数料など、独自の取引口座設定を行う機能を追加しました。これにより、ブローカーの異なる取引条件をシミュレートする可能性がさらに高まります。
    .




    一般設定
    このセクションでは、同時に口座に持つことができるオープンオーダーとポジションの最大数を設定することができます。また、ここでは、テストされたプログラムが取引を許可されないセッションを設定することができます。


    証拠金
    ここでは、証拠金がどのように確保され、テスト中にどのポジション会計システムが使用されるかを完全に制御することができます: .

    • リスク管理 - リスク管理モデル:OTCと取引所取引、ネッティングとヘッジ。これらに関する詳細情報はヘルプに あります。
    • 「マージンコール」レベル - 口座の資金レベルで、到達するとマージンコール状態に切り替わります。
    • ストップアウト」レベル - 口座が注文を引き出し、取引ポジションを閉じることを強制される資金レベル。どちらのレベルも、パーセント単位と金額単位で指定できます。最初の場合、レベルは口座の「Funds」インジケータの値として定義されます。Percentage" オプションが選択されている場合、レベルは口座の "Margin Level" インジケーターの値 (Funds/Margin*100) として定義されます。
    • Unrealised - このフィールドでは、現在の未実現損益をフリーマージン (
      ) でどのように処理するかを指定します。
      • 未実現損益を使用しない - 未決済ポジションを計算に考慮しません。
      • 未実現損益を使用する - 未決済ポジションの損失と利益を計算に使用します。
      • 未実現利益を使用する - 利益のみを使用する。
      • 含み損を使用 - 損失のみを使用します。
    • Daily fixed (日次固定) - このフィールドでは、取引日中にトレーダーが確定した利益/損 失が、フリーマージン
      でどのように考慮されるかを指定します。
      • Use daily fixed profit/loss - 取引日中に確定した損益を自由証拠金に考慮します。
      • 日次固定損失を使用する - 取引日中に確定した損失のみを自由証拠金に考慮します。日中、累積利益は別口座(「Locked」)に固定されます。取引日の終了時に、累積利益は解放され(ゼロになり)、口座残高に反映されます(自由証拠金に計上)。
    • このオプションは、"Use daily fixed loss" オプションが有効な場合にのみ利用できます。このオプションが有効な場合、取引日の終わりに、その日に蓄積された利益が解放され、残高に記録されます(それに応じて自由証拠金に計上されます)。そうでない場合は、そうなりません。


    手数料
    このセクションでは、すべての取引でどのように手数料を請求するかを完全にコントロールすることができます。 .

    • すなわち、取引量/取引高に関係なく同額を請求することも、取引量/取引高に応じて手数料を変動させることもできます。関連情報は仕様書に表示されています。
    • 手数料は、取引成立時に即時に請求される場合と、取引日/取引月の終了時に請求される場合があります。
    • 手数料は、取引の方向性(エントリー、エグジット、またはその両方)に応じて課金されます。
    • 手数料はロットごと、または取引ごとに請求されます。
    • 手数料は、金額、パーセント、またはピップ数で請求することができます。



  9. Tester: "Market Watch "から全てのシンボルに対して数回のテストパスが行われる場合、"Market Scan "モードでの作業が最適化され、大幅に高速化されます。
  10. テスター:利益をpipsで計算する際、取引やポジションのサイズが考慮されるようになりました。以前は、1ロットのように出来高を考慮せずに計算されていました。
  11. テスター:チャート管理の最適化結果が改善されました。通常のオプティマイゼーション・チャートを拡大する際、スクロールが可能になりました。
    . チャートのポイントをダブルクリックすると、パス表の対応する結果がハイライトされるようになりました。
  12. MetaEditor: "Navigator" に SQLite データベースファイル (*.db;*.sdb;*.sqlite;*.db3;*.s3db;*.sqlite3) の表示を追加。
  13. MetaEditor: プロジェクトのプロパティを保存する際のエラーを修正。


このアップデートは、LiveUpdateシステムを通じて提供されます。


 

安定版 5 ビルド 2340 実行時に同じDatabaseImport が 表示される

2020.02.22 14:01:42.338 MQL5 'DOMcopy.ex5'にサポートされていない新しいバージョンがあります。

 

こんにちは!

インジケーターでデータベースへの接続を作成しようとしたのですが、なぜかうまくいきませんでした。

どのプログラムでデータベースを使うことができるのでしょうか?