FX機械学習その1「MT5から価格を取得してテクニカル指標計算してチャートを描画する」

実現したいこと

いつシグナルでたかを確認したいのでPythonでMT5の情報を取得して自由に使いたい。

  1. リアルタイムでMT5から価格データを読み取りPythonで可視化
  2. テクニカル指標を計算してPythonで可視化したい

作るファイルは4つです。

  • mt5_price_set_DB.py
  • technical_set_DB.py
  • app.py
  • main.py

データの工場をつくるイメージでデータは流れ作業のように下流工程へ渡ります。

データを取得する工程では

  • 起動時にMT5の過去足1000本を取得してデータベースへ保存します。
  • データベースへ保存したらそのあとは1秒間隔で最新の価格を取得し続けます。

テクニカル指標を計算する工程では

  • 起動時に過去1000本のテクニカル指標を計算して価格データと同じ時系列のテーブルに保存されます。
  • データベースへ保存したあとは1秒間隔で最新のテクニカル指標を計算し続けます。

データを表示する工程では

  • データベースへ保存された値を1秒間隔で取得して表示します。

mt5_price_set_DB.py

このコードは、MetaTrader5 APIを使用して、外国為替市場の価格情報をリアルタイムに取得し、SQLiteデータベースに保存するPythonプログラムです。以下に、コードの詳細を解説します。

  • importステートメントで、MetaTrader5、sqlite3、datetime、sleep、typingモジュールをインポートしています。
  • PriceSetDBというクラスが定義されています。このクラスには、データベースの初期化、テーブルの作成、データの挿入、最後の1分間のデータの取得、データの更新、バーの取得、データの存在の確認、そして実行を行うためのメソッドが含まれています。
  • PriceSetDBクラスの__init__メソッドは、db_filesymbolという2つの引数を受け取り、それぞれデータベースファイルとシンボル名を設定します。conn属性は、データベース接続用のSQLite3コネクションオブジェクトを格納するために使用されます。
  • connect_dbメソッドは、SQLite3のconnect関数を使用してデータベースに接続し、conn属性にコネクションオブジェクトを割り当てます。
  • disconnect_dbメソッドは、データベース接続を閉じます。
  • create_tableメソッドは、データベース内にテーブルを作成するSQLクエリを実行します。
  • insert_dataメソッドは、引数としてタプルデータを受け取り、データベースに挿入します。タプルは、シンボル名、時間、オープン価格、高値、安値、終値、最大スプレッドの順で並べられます。data_existsメソッドを使用して、既存のレコードがある場合は挿入されません。
  • get_last_minuteメソッドは、データベースから最後の1分間のデータを取得し、タプル形式で返します。symbol属性とtime属性が含まれます。time属性は、フォーマットされた時間文字列です。最後のレコードがない場合は、Noneが返されます。
  • update_last_minuteメソッドは、引数としてタプルデータを受け取り、データベース内の最後のレコードを更新します。タプルは、更新する高値、低値、終値、最大スプレッド、そしてレコ
  • ードのIDです。idは主キーとして定義されているため、レコードの識別子として使用されます。
  • get_barsメソッドは、指定されたシンボル名、時間枠、およびバーの数に基づいて、MetaTrader5 APIを使用して価格情報を取得し、データベースに挿入します。
  • initialize_mt5メソッドは、MetaTrader5 APIを初期化し、データベースに接続し、テーブルを作成し、最初の価格バーを取得します。
  • data_existsメソッドは、指定された時間のレコードが既にデータベースに存在するかどうかを確認します。
  • runメソッドは、initialize_mt5メソッドを呼び出し、それ以降はループし、価格情報を取得し、データベースに挿入または更新します。1秒ごとにスリープします。
  • __name__ == "__main__"の条件分岐は、スクリプトが直接実行された場合にのみ、プログラムが実行されるようにします。db_filesymbolを指定して、PriceSetDBオブジェクトを作成し、runメソッドを呼び出します。
  • このコードは、MetaTrader5 APIを使用してリアルタイムの価格情報を取得し、それをSQLiteデータベースに保存するPythonプログラムです。

technical_set_DB.py

このコードは、価格データをSQLiteデータベースから取得し、移動平均とRSIという2つのテクニカル指標を計算し、同じデータベースにそれらの値を保存するPythonプログラムです。以下に、コードの詳細を解説します。

  • importステートメントで、numpy、sqlite3、talib、datetime、sleepモジュールをインポートしています。
  • データベースファイル名と通貨ペア名を指定して、SQLite3データベースに接続します。
  • 移動平均の期間とRSIの期間を設定します。
  • ALTER TABLEクエリを使用して、price_dataテーブルにmarsiカラムが存在しない場合は追加します。
  • 無限ループを開始し、price_dataテーブルから価格データを取得します。取得した価格データをリストに変換し、Numpy配列に変換します。
  • Numpyのtalibライブラリを使用して、移動平均とRSIを計算します。
  • price_dataテーブルに計算されたテクニカル指標を保存します。
  • 1秒待機し、ループを続けます。
  • commitメソッドを使用して、変更をデータベースにコミットします。
  • データベース接続を閉じます。

このコードは、PythonとSQLite3を使用して、外国為替市場の価格情報から移動平均とRSIという2つのテクニカル指標を計算し、同じデータベースにそれらの値を保存するプログラムです。

app.py

このコードは、FlaskとPlotlyを使用して、FXのリアルタイム価格とテクニカル指標を表示するWebアプリケーションを作成するためのものです。

アプリケーションは2つのエンドポイントがあります。 / は、リアルタイムチャートを表示するために使用されます。 /data は、最新の価格データを返すために使用されます。

get_data関数は、データベースから最新の1000レコードを取得して、JSON形式で返します。 取得されるデータには、時間、始値、高値、安値、終値、スプレッド、移動平均線、RSIなどが含まれます。

index関数は、リアルタイムチャートを描画するためにJinja2を使用して、テンプレートをレンダリングします。テンプレートは、Bootstrapを使用して、チャートを表示するためのコンテナーを作成し、Plotlyを使用してチャートを描画します。アプリケーションは、価格、移動平均線、RSI、スプレッドなどを表示するために、複数のチャートを使用しています。リアルタイムデータを取得し、チャートを更新するために、JavaScriptとjQueryを使用します。

アプリケーションは、 app.run() 関数を呼び出すことで実行されます。デバッグモードで実行されるため、エラーが発生した場合にはスタックトレースが表示されます。

main.py


このコードは3つのPythonスクリプトをサブプロセスとして実行するためのものです。

最初に、subprocessモジュールをインポートします。subprocessモジュールには、別のプロセスを起動して、そのプロセスの出力を受け取る機能があります。

if __name__ == "__main__":ブロックは、このスクリプトが直接実行された場合にのみ、以下のコードが実行されるようにします。

Popenメソッドを使って、3つのPythonスクリプトをそれぞれ別々のサブプロセスとして起動します。これにより、それらのスクリプトは同時に実行されます。3つのスクリプトをそれぞれ異なる変数p1p2p3に代入します。

wait()メソッドは、サブプロセスが完了するまで、親プロセスを待機させます。つまり、p1.wait()は、price_set_DB.pyが終了するまで、プログラムの実行をブロックします。

同様に、p2.wait()は、technical_set_DB.pyが終了するまで、プログラムの実行をブロックします。

最後に、p3.terminate()は、app.pyの実行を終了します。これにより、Webアプリケーションが停止します。

実行する

main.pyを実行するとブラウザでチャートを描画してくれます

noteでマガジンを始めました。

  • 完全版ゴトー日EA
  • 完全版朝スキャEA
  • ユロドルアノマリーEA
  • 月末アノマリーEA
  • ポンドルアノマリーEA
  • ブレイクアウトEA
  • 完全版RSI逆張りEA
  • Web認証システム

ソースコード付きです。

ホソノP自作EA

Gotobi Teriyaki
19,800円
設置が簡単♪ゴトー日のEA
  • ゴトー日のEAです

もうやってるよね? タリタリの自己アフィリエイト

海外FXキャッシュバック口座開設ならTariTali(タリタリ)
海外業者にはキャッシュバック必須です。タリタリを使うと自己キャッシュバックが受け取り可能に。IB乗り換えもOK。
\スプレッドの40%が戻ってくる /
ドル円1LOT約400円キャッシュバック
  • -
    コピー

この記事を書いた人

最近のコメント

  1. アバター
  2. アバター
  3. アバター
  4. アバター
  5. アバター