MQL5入門(第39回):MQL5におけるファイル処理入門(I)
はじめに
連載「MQL5入門」の第39回へようこそ。今回は、MQL5におけるファイル処理と、プログラム内でのファイル管理の方法に焦点を当てます。ファイルは多くの実際の取引アプリケーションで重要な役割を果たします。市場データの保存、インジケータ値の保存、取引履歴の記録、エラーのログ、MetaTrader再起動後も保持が必要な履歴情報の保存などに使用できます。 この記事は初心者向けに書かれています。コード例はシンプルで理解しやすいように分割されており、各ステップは丁寧に解説されています。また、技術的な概念を現実の状況に結びつけるために、必要に応じて初心者向けの比喩も使用しています。
本記事では、MQL5がどのようにファイルを扱うか、ファイルがコンピュータのどこに保存されるのか、そしてファイルの開き方、読み取り、書き込み、正しいクローズ方法について解説します。さらに、データ分析、戦略ログ、設定保存、異なるMQL5プログラム間でのデータ交換といった実用的なユースケースも紹介します。 本連載の特徴として、プロジェクトベースのアプローチを採用します。ファイル処理を単独の概念として学ぶのではなく、実際のプロジェクトの中で即座に使用します。本記事では、シンプルな取引ジャーナルとして機能するMQL5スクリプトを作成します。このスクリプトは実行されると自動的にファイルを作成し、取引履歴情報(チケット番号、シンボル、注文タイプ、ロットサイズ、エントリー時間、エントリー価格、ストップロス、テイクプロフィット、決済時間、決済価格、損益(ドル)、取引結果)を記録します。
このジャーナルには、取引履歴に加えて口座名、残高、ログイン番号も含まれます。取引履歴は一定期間分がファイルへ転送され、最終更新時刻も記録されます。このプロジェクトを通じて、MQL5におけるファイル処理が、取引データを管理・保存・整理するための再利用可能で構造化された方法として機能することを理解できます。

本プロジェクトは2回に分かれています。まずこの記事では、コード内でファイルを手動生成するのではなく、MetaTrader 5上でFileSelectDialog関数を使用してファイルを直接作成・選択する方法を学びます。その後、選択したファイルを開き、データを書き込み、処理終了後に正しくクローズする方法を解説します。この最初のパートの目的は、MQL5における基本的なファイル処理の流れを理解し、基礎を固めることです。
この基礎を踏まえて、次回の記事では過去の取引データを自動的に取得し、それをジャーナルファイルに保存する方法を紹介します。これによりすべてが統合され、ファイル処理が完全に自動化された実用的な取引ツールの構築方法が明らかになります。
MQL5でファイルを作成・選択するためのFileSelectDialogの使用
まず必要になるのは、対象となるファイルそのものです。たとえば、取引ジャーナル内に口座データを保存しておきたい場合、ソフトウェアはそのデータを書き込むファイルを正確に把握している必要があります。ファイル名をコード内に直接ハードコードする方法は簡単な手段の一つです。これは一部のケースでは動作しますが、特に実際の運用で共有や再利用を前提としたツールでは、非常に制限が多く柔軟性に欠けます。 たとえば、ユーザーにジャーナルの保存場所を選ばせたい場合や、毎回異なるファイルを選択したい場合を考えてみてください。スクリプトやエキスパートアドバイザー(EA)が複数のマシン、口座、環境で使用される場合、この問題はさらに重要になります。このような状況では、コード内に固定ファイル名を強制する方法はもはや理想的ではありません。
このような場合に非常に役立つのがFileSelectDialog関数です。この関数を使用すると、MetaTrader 5はファイルパスを決め打ちするのではなく、ユーザーにどのファイルを使用するかを選ばせることができます。EAやスクリプトを実行すると、画面上にファイル選択ウィンドウが表示されます。このウィンドウでは既存のファイルを参照して選択することも、新しいファイル名を入力することもできます。 この方法の大きな利点は柔軟性と利便性です。既存の取引ジャーナルファイルを選択してデータの追記を続けることもできますし、新しいファイル名を入力すればMetaTraderが自動的にそのファイルを作成します。これにより、手動でファイルを作成したり、保存場所や名前の問題を管理したりする必要がなくなります。
もう一つの大きな利点は、ユーザーにとって使いやすいことです。FileSelectDialogを使用すると、プログラムは通常のデスクトップアプリケーションのように動作します。ファイルの場所、名前、そしてデータ保存の目的がユーザーに明確に示されます。これによりミスが減り、特に初心者にとってツールの使いやすさと安全性が向上します。 この方法を使えば、スクリプトを実行して既存のジャーナルファイルを選択するか新規作成し、そのまま口座情報や取引履歴、更新内容を構造化された形で記録し始めることができます。このアプローチは、完全なファイル制御を維持しながらもシンプルで直感的であるため、信頼性が高くユーザーフレンドリーなMQL5ツールを構築するのに最適です。
例://+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- string arrays_filename[]; string default_filename = "Trading_Journal.csv"; int result = FileSelectDialog("Select a File", NULL,"CSV files|*.csv", FSD_WRITE_FILE,arrays_filename,default_filename); string filename; if(result == 0) { Print("No file selected"); } else if(result > 0) { Print("The trading journal will be saved in ",arrays_filename[0]); filename = arrays_filename[0]; } else { Print(GetLastError()); } }
出力:

解説:
最初の変数には、複数のファイル名を格納することを想定しています。この変数は、複数の文字列を同時に保持できるように設計されているため配列として作られています。これは特にファイル選択ダイアログを扱う際に有用で、ユーザーが複数のファイルを選択する場合や、システムから複数のファイルパスが渡される場合に対応できます。配列を使用することで、プログラムの柔軟性が高まり、将来的な拡張にも対応しやすくなります。現在は単一ファイルのみを扱っていても、将来的に複数ファイルを処理することが容易になります。つまり、これは単一のファイル名ではなく、複数のファイル名やパスを格納できる「箱」のような役割を果たします。
2つ目の変数はバックアップまたは初期ファイル名を表します。この変数の役割は、プログラム起動時やファイル選択ウィンドウが開いた際に、デフォルトとして使用または推奨されるファイル名を指定することです。これにより、トレーダーは毎回ファイル名を入力する必要がなくなり、ユーザー体験が向上します。 このデフォルト名を受け入れることで、プログラムはすでにどのファイルを使用すべきかを把握しています。もし新しいファイルが存在しない場合でも、この名前を用いて自動的にファイルを作成することができます。これは手動入力の手間を省き、ミスを減らすための事前設定のような役割を持ちます。
この行は、ユーザーの操作結果を保持し、MetaTrader 5でファイル選択ウィンドウを開く処理を行います。この戻り値は、ダイアログが正常に終了したかどうか、つまりユーザーがファイルを選択または作成してウィンドウを閉じたかどうかを示します。結果が正の値であれば、プログラムは選択されたファイルを安全に処理できます。一方で、0または負の値は、何も選択されなかったことを意味します。第1引数はダイアログボックスの上部に表示されるタイトルを設定し、より分かりやすく整理されたインターフェースを提供します。

ファイル選択ウィンドウが最初に開くフォルダは第2のオプションで指定されます。このパラメータにNULLを設定すると、MetaTraderは特定の開始ディレクトリを強制せず、代わりにデフォルトの作業ディレクトリであるMQL5\Filesフォルダからダイアログを開始します。 この動作はMetaTraderのファイルシステム標準に準拠しており、異なる環境間での互換性を維持するのに役立ちます。また、ユーザーが特定の固定パスに制限されないため、利便性と移植性も向上します。
3つ目のパラメータはファイルフィルタリングを制御し、ダイアログ内で表示・選択できるファイルの種類を定義します。この形式は縦棒「|」で区切られたシンプルな構造になっています。前半はユーザーに表示されるラベルであり、後半はMetaTraderが表示を許可するファイルパターンです。
たとえば「CSV files|*.csv」と指定すると、ダイアログにはCSVファイルであることを示すラベルが表示され、実際には*.csvに一致するファイルだけが選択対象として表示されます。

これにより、ユーザーは扱っているファイルの種類を明確に理解できます。縦棒の後に続く「*.csv」は、CSV拡張子を持つファイルのみを表示するというルールをMetaTraderに指示しています。このフィルタに一致しないファイルは表示されないため、ユーザーが誤ってサポートされていないファイル形式を選択することを防げます。また、このフィルタは他のファイル形式にも変更可能です。たとえばログファイルフィルタでは.logのみを表示し、テキストファイルフィルタでは.txtのみを表示できます。複数の形式を1つのフィルタにまとめることで、ユーザーは複数のサポート形式から選択することも可能になります。これにより操作が分かりやすくなり、プログラムが認識できるファイルのみを確実に開くことができます。
4つ目の引数は、ユーザーがウィンドウ内で行える操作を制御し、ファイルダイアログの動作を決定します。FSD_WRITE_FILEのようなモードでは、ユーザーは既存のファイルを選択するだけでなく、新しい未作成のファイル名を入力することも可能であり、MetaTraderはそのファイルを自動的に作成します。これは取引ジャーナルのように、新規作成と既存ファイルの追記の両方が必要な場合に特に便利です。
複数のダイアログオプションを組み合わせることで、MQL5はより高度な動作を可能にします。例えばあるモードでは、複数ファイルの同時選択が可能になります。複数の動作を許可したい場合、必要に応じて、フラグを組み合わせて複数の動作を有効化できます。これによりMetaTraderは、ファイル作成や複数ファイル選択の有効化を含め、複数の機能を同時に有効にするよう指示されます。ファイル処理ロジックがどれほど単純または高度であるかに応じて、この設計によりファイルダイアログは非常に柔軟で、さまざまなユースケースに適応できるものになります。
5つ目のパラメータは、ファイル選択処理の結果を保持するために使用されます。これはダイアログ内で新しく入力されたファイル名、またはユーザーが選択した既存ファイル名のいずれかになります。ユーザーが選択を確定すると、この変数にはダイアログから直接ファイル名が格納され、それらのファイルは後続の処理、例えばデータの読み取り、新規エントリの追加、または新しい情報の書き込みなどに利用できるようになります。ファイルダイアログは複数ファイル選択が有効な場合、複数のファイル名を返す可能性があるため、単一の値ではなく配列として設計されています。これにより、現在のプロジェクトが単一ファイルのみを扱っている場合でも、複数ファイル選択の状況との互換性が保証されます。この構造によってシステムはより柔軟になり、すべての選択されたファイル名が正確に記録されることが保証されます。
最後のパラメータは、ダイアログに表示されるデフォルトのファイル名を定義します。

これは時間の節約になり、ユーザーにとって有用なガイダンスとしても機能します。ユーザーがそのまま確定した場合、この名前が自動的に使用されます。ファイルが存在しない場合は、その名前でシステムがファイルを生成し、手動入力によるミスを防ぎながら処理を効率化します。その後、プログラムはファイル選択処理の結果を処理します。ユーザーがキャンセルした場合は「ファイルが選択されませんでした」という通知が出力されます。ファイルが選択された場合は、その名前を保存し、ファイルの場所を出力します。プログラムは予期しないエラーが発生した場合でもそれを検出し表示することで、ファイルダイアログのすべての結果を安全に処理することができます。
MQL5におけるファイル作成
前章では、FileSelectDialog関数について説明しました。この関数は、ユーザーが既存のファイルを選択したり、新しいファイル名や保存場所を入力したりできるようにするものです。しかし、FileSelectDialog自体は実際にファイルを作成するわけではありません。その役割はユーザー入力を取得し、ファイルの名前と保存場所を決定することに限定されています。本章では、FileOpen関数を紹介し、MQL5プログラム内でファイルを使用できる状態にする方法について説明します。FileOpenは、FileSelectDialogによってファイル名と保存場所が決定された後、そのファイルを開く、あるいは新規作成します。この処理は、プログラムとファイルを接続し、安全なデータの読み書きを可能にするため、非常に重要なステップです。
FileSelectDialogとFileOpenを組み合わせることで、柔軟性と制御性の両方を実現できます。ユーザーがファイルの名前と保存場所を選択し、プログラム側がそのファイルを正しく生成・準備することで、ファイル操作が可能になります。この方法はMQL5のファイル処理をより信頼性が高く、ユーザーフレンドリーなものにします。特に、口座データのエクスポートや取引履歴の記録といった実用的な用途において有効です。
例:
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- string arrays_filename[]; string default_filename = "Trading_Journal.csv"; int result = FileSelectDialog("Select a File", NULL,"CSV files|*.csv", FSD_WRITE_FILE,arrays_filename,default_filename); string filename; if(result == 0) { Print("No file selected"); } else if(result > 0) { Print("The trading journal will be saved in ",arrays_filename[0]); filename = arrays_filename[0]; } else { Print(GetLastError()); } int handle = FileOpen(filename, FILE_WRITE|FILE_CSV|FILE_SHARE_READ|FILE_ANSI, ','); if(handle == INVALID_HANDLE) { Print("Error opening file for writing. Error code: ", + GetLastError()); } else if(handle != INVALID_HANDLE) { Print("File Sucessfully Opened"); FileClose(handle); } }
解説:
MQL5では、FileOpenを使用することでプログラムがファイルへアクセスできるようになり、データの書き込みや読み取りが可能になります。FileSelectDialogを通じて選択または入力されたファイル名が存在しない場合、FileOpenはその名前でファイルを即座に作成します。一方で、ファイルがすでに存在する場合は単にそのファイルを開くだけです。これらの処理はすべてバックグラウンドでおこなわれるため、画面上にファイルが開いているようには見えません。そのため、ファイルを手動で開いたり編集したりすることは避けるべきです。そうしないと、FileOpenがエラーで失敗する可能性があります。
FileOpenの第1引数はファイル名であり、MQL5がどのファイルを開くまたは作成するかを判断するために使用されます。通常これはFileSelectDialogで事前に選択された名前です。第2引数はファイルのオープンモードを指定します。この例ではFILE_WRITEによりファイルへの書き込みが可能になります。またFILE_CSVは、そのファイルをカンマ区切り値(CSV)として扱うようMQL5に指示し、取引ジャーナルのような構造化データに適しています。さらにFILE_SHARE_READにより、プログラムが書き込み中でも他のプログラムが同時に読み取ることが可能になります。FILE_ANSIは文字エンコーディングを標準的な読み取り可能形式に設定します。
第3引数は区切り文字で、この例ではカンマが使用されます。これはCSVファイルにおいて各データ列を分割する重要な要素であり、MQL5に対してデータの構造をどのように整理するかを指示します。これらのパラメータを組み合わせることで、FileOpenは正しい形式でデータを書き込める状態を作り、必要に応じて他のプログラムからも安全に読み取れるファイルを準備します。これは取引履歴の記録や口座データの保存の基盤となります。
FileOpenを使用すると、ハンドルが返されます。これは、プログラムが操作しているファイルに対する個別の識別IDとして機能します。これは、MQL5に対してどのファイルを読み取るのか、または書き込むのかを指示するチケットやキーのようなものと考えることができます。開いた各ファイルにはハンドルが割り当てられ、そのハンドルは後続のすべての操作で対応するファイルへアクセスするために使用されます。このようにすることで、ソフトウェアは複数のファイルを同時に扱っても混同することなく処理できます。ファイルのオープン処理が成功したかどうかを確認することは非常に重要です。ソフトウェアはハンドルがInvalid Handleに等しいかどうかを判定します。これはファイルが作成またはオープンされなかったことを示す値です。この場合、GetLastErrorがエラーコードを返し、原因を説明するエラーメッセージが出力されます。原因としては、ファイルが使用中であること、権限不足、その他の問題が考えられます。
次に、ハンドルの有効性が確認されます。これはファイルが正常に生成またはオープンされたことの証明になります。この場合、プログラムはファイルが書き込み準備完了であることをメッセージとして出力します。有効なハンドルのみにファイル操作を制限することで、エラーを防ぎ、データの安全性を確保できます。FileClose関数は、FileOpenで開かれたファイルを適切に閉じるために使用されます。どのファイルが閉じられるかは与えられたハンドルによって決まります。書き込まれたすべてのデータを正しく保存し、システムリソースを解放するためには、ファイルを必ず閉じる必要があります。ファイルを開いたままにしておくと、データが完全に書き込まれない可能性があり、MetaTraderが停止するまで他のプログラムやスクリプトがそのファイルにアクセスできない場合もあります。
比喩的な説明
FileOpenは、プログラムに対してデータを保存・取得するための個人用ロッカーを提供するものと考えることができます。選択したロッカーは、存在しない場合にはFileOpenによって即座に作成され、学校で新しいロッカーを選ぶときのように扱われます。すでに存在する場合は、その内容にアクセスするために単にロッカーを開くだけです。これらの処理はすべてバックグラウンドでおこなわれるため、画面上にロッカーが開く様子は表示されません。そのため、ロッカーがすでに使用中である間に手動で同時アクセスをおこなうとエラーの原因になるため避けるべきです。
ロッカー番号をラベルとして書くことは、FileOpenの第1引数を使用することに相当します。これはプログラムに対してどのロッカーを開くか、または作成するかを指示するもので、通常はFileSelectDialogで事前に選択した名前が使われます。ロッカーの使用ルールは第2引数によって定義されます。たとえばFILE_ANSIは保存されるデータを標準的で読み取り可能な形式にし、FILE_WRITEは新しいデータの書き込みを可能にし、FILE_CSVはデータを構造化された区切り形式で整理し、FILE_SHARE_READは他のプログラムが内容を変更せずに閲覧できるようにします。
ロッカーの仕切りに相当するのが第3引数であり、異なる種類のデータを分ける役割を持ちます。この場合、各データはカンマで区切られ、列として整理された形で保存されます。この構成は、取引ジャーナルのように口座履歴、取引、数値データを整理して読みやすく保つために特に有用です。これらのオプションを組み合わせることで、FileOpenは安全に取引データを保存・取得できる環境を構築します。
最後に、FileOpenが返すハンドルはロッカーの鍵に相当します。すべてのロッカーには固有の鍵があり、プログラムは以後のすべてのファイル操作でこの鍵を使用します。ロッカーを開いた後、プログラムはその鍵が有効かどうかを確認します。無効な場合はエラーが表示され、原因が示されるためロッカーは作成または開かれません。有効な鍵であれば、エラーや競合のリスクなく安全にデータの保存や読み取りが可能です。
FileClose (handle)は、データの保存や取得が完了した後にロッカーを施錠する操作に相当します。鍵(ハンドル)を使って最後にロッカーを閉じることで、その中のすべてのデータは安全に保管されます。ロッカーを閉じれば必要に応じて他者も安全に利用できますが、閉め忘れると他のユーザーやプログラムが正しくアクセスできず、内部のデータが完全に保護されない可能性があります。ロッカーを閉じることで、すべての処理が完了し保存され、鍵は再び開けるまで無効な状態になります。
MQL5におけるファイルへのデータ書き込み
次のステップは、FileOpen関数を使用して新しく作成されたファイルにデータを書き込むことです。前述の通り、ファイルを開く際にFILE_WRITE権限を付与しているため、このプログラムはファイルへの書き込みが可能になっています。この権限がなければデータを保存することはできず、ファイルは読み取り専用となります。ファイルへの書き込みをおこなうことで、口座履歴、取引データ、その他必要な情報を保存できるようになり、取引ジャーナルとして機能するようになります。
これまでのセクションと同様に、各プロセスを丁寧に説明し、MQL5におけるファイル書き込みの仕組みを理解できるよう、シンプルな例を用いて解説します。まず最初におこなうべきことは、取引ジャーナルのヘッダーとなる初期情報を書き込むことです。1行目には口座名、2行目には口座残高が書き込まれます。3行目には口座ログイン情報が記録されます。その後、データ取得の開始時刻が追加され、続いてデータ範囲の終了時刻が記録されます。最後に、そのファイルがいつ更新されたかを示す最終更新時刻が記録されます。
これらの情報をファイルの先頭に書き込むことで、取引ジャーナルに構造的な基盤を与えます。これにより、ファイルを処理するプログラムや後から読むユーザーが、個々の取引データを見る前に全体のコンテキストを容易に理解できるようになります。
例:
int handle = FileOpen(filename, FILE_WRITE|FILE_CSV|FILE_SHARE_READ|FILE_ANSI, ','); if(handle == INVALID_HANDLE) { Print("Error opening file for writing. Error code: ", + GetLastError()); } else if(handle != INVALID_HANDLE) { Print("File Sucessfully Opened"); string account_name = AccountInfoString(ACCOUNT_NAME); double account_balance = AccountInfoDouble(ACCOUNT_BALANCE); long account_login = (long)AccountInfoInteger(ACCOUNT_LOGIN); FileWrite(handle, "Account Name: " + account_name); FileWrite(handle, "Account Balnce: " + DoubleToString(account_balance)); FileWrite(handle, "Account Login: " + IntegerToString(account_login)); FileWrite(handle, "Start Time: ", start_time); FileWrite(handle, "End Time: ", end_time); FileWrite(handle, "Last Update: ", TimeCurrent()); FileClose(handle); }
出力:

解説:
1行目では、MetaTrader 5から取得した口座名を文字列変数に格納します。通常、この口座名はブローカーに登録した名前であり、関数はプラットフォームに問い合わせることで現在アクティブな取引口座を特定します。これにより、ソフトウェアはどの取引口座が使用されているかを常に把握できます。2行目では、口座残高を取得し、小数値(double型)として保存します。これは現在口座にある資金の総額です。取引、利益計算、リスク管理などにおいて小数を正確に扱う必要があるため、double型を使用することで精度の高い保存が可能になります。
3行目では、口座のログイン番号(口座ID)を取得します。これは口座を識別するための固有番号です。元は整数ですが、long型として保持することで、大きな数値でも精度を失うことなく扱うことができます。取引ジャーナルへの記録や自動追跡を行う際、このログイン番号は対象口座を正確に特定するために役立ちます。start_timeという変数が定義されます。これはinput変数であり、プログラムを変更せずにユーザーが設定を直接変更できるようにするものです。この変数には特定の日時が格納されており、この例では2026年1月1日0時を示します。これは履歴データの取得や解析を開始する時点を指定します。
次に、end_timeという別のinput型datetime変数を定義します。これは2026年1月31日0時に設定されています。この変数は履歴データの取得を終了する時点を示します。start_timeとend_timeを組み合わせることで時間範囲が定義され、その範囲内のデータのみが処理対象となります。input変数を使用することで、コードを変更せずに期間を自由に調整できるため、EAやスクリプトの柔軟性が向上します。
1行目には口座名がファイルに書き込まれます。「Account Name:」というラベルと実際の名前を組み合わせて記録することで、このファイルがどの口座に属しているかを明確に示します。複数口座を扱う場合やファイルを共有する場合にも非常に有用です。2行目には口座残高が記録されます。残高は小数を含む数値であるため、書き込み前に文字列へ変換する必要があります。これにより、値が正しくファイルに保存され、後から読みやすい形式になります。この行は、ジャーナル作成時点での口座残高を示すため、時間経過による資金変化を追跡するのに役立ちます。
3行目には口座ログインIDが書き込まれます。このIDは口座を一意に識別する整数値です。文字列に変換することでファイルに可読な形で保存されます。ログインIDを記録することで、データが正しい口座と確実に紐付けられます。4行目と5行目には、データ転送の開始時刻と終了時刻が記録されます。プログラムはstart_timeを起点として対象期間の履歴を記録し始め、end_timeで終了します。これにより、ジャーナルがカバーする時間範囲が明確になり、データの範囲を正しく理解できるようになります。
最後の行には最終更新時刻が記録されます。これはサーバーの現在時刻を取得して書き込むもので、ファイルが最後に更新されたタイミングを示します。スクリプトを繰り返し実行する場合、この情報は変更履歴を追跡する上で重要です。これらの行全体が取引ジャーナルのヘッダーを構成し、後続の履歴データに対する重要なコンテキストを提供します。この構造により、ジャーナルは整理され、可読性が高く、後からデータを追記する準備が整った状態になります。
結論
本記事では、MQL5におけるFileSelectDialogおよびFileOpen関数を使用して、ファイルを作成・管理する方法を学びました。ファイルを選択または新規作成する方法、適切な権限で安全にファイルを開く方法、そして口座名、残高、ログイン情報、データ取得期間、最新更新時刻などの重要な口座情報を書き込む方法について理解しました。本記事はMQL5におけるファイル管理の入門であり、機能的で整理されたユーザーフレンドリーな取引ジャーナルを構築するための基礎を提供します。次の記事では、指定された期間内の取引履歴をジャーナルへ出力する方法を扱います。
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/21160
警告: これらの資料についてのすべての権利はMetaQuotes Ltd.が保有しています。これらの資料の全部または一部の複製や再プリントは禁じられています。
この記事はサイトのユーザーによって執筆されたものであり、著者の個人的な見解を反映しています。MetaQuotes Ltdは、提示された情報の正確性や、記載されているソリューション、戦略、または推奨事項の使用によって生じたいかなる結果についても責任を負いません。
プライスアクション分析ツールキットの開発(第60回): 構造分析のための客観的なスイングベースのトレンドライン
MQL5取引ツールのアクセシビリティ課題を克服する(第1回):MQL5インジケータに状況対応型音声アラートを追加する方法
MQL5とデータ処理パッケージの統合(第7回):銘柄間連携のためのマルチエージェント環境の構築
プライスアクション分析ツールキットの開発(第59回):幾何学的非対称性を用いたフラクタル保ち合いからの高精度ブレイクアウトの識別
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索