MQL4 (MT4)の各種API、変数の利用方法等について、ChatGPTに聞いてみました。
一覧にしていますので、参考にしてもらえたらと思います。
使用GPTs:EA Creator
事前定義変数(The predefined Variables)
MQL4プログラム(エキスパートアドバイザー、スクリプト、またはカスタムインジケーター)が起動される際、現在の価格チャートの状態を反映する一連の事前定義された変数がサポートされています。
以下に事前定義された変数一覧を示します。詳細は「MQL4(MT4) の事前定義変数(Predefined Variables)と使用例」をご参照ください。
| 変数名 | 説明 |
|---|---|
| _Digits | 現在のシンボルの小数点以下の桁数 |
| _Point | 現在のシンボルのポイントサイズ(見積もり通貨) |
| _LastError | 最後に発生したエラーコード |
| _Period | 現在のチャートの時間枠 |
| _RandomSeed | 擬似乱数ジェネレータの現在の状態 |
| _StopFlag | プログラム停止フラグ |
| _Symbol | 現在のチャートのシンボル名 |
| _UninitReason | 初期化解除の理由コード |
| Ask | 現在のシンボルの最新の売り手価格(アスク価格) |
| Bars | 現在のチャートのバー数 |
| Bid | 現在のシンボルの最新の買い手価格(ビッド価格) |
| Close | 各バーの終値を含むシリーズ配列 |
| Digits | 現在のシンボル価格の小数点以下の桁数 |
| High | 各バーの最高価格を含むシリーズ配列 |
| Low | 各バーの最低価格を含むシリーズ配列 |
| Open | 各バーの始値を含むシリーズ配列 |
| Point | 現在のシンボルのポイント値(見積もり通貨) |
| Time | 各バーのオープン時間を含むシリーズ配列 |
| Volume | 各バーのティックボリュームを含むシリーズ配列 |
イベントハンドリング関数
イベント受信用の関数です。
MQL4言語では、いくつかの事前定義されたイベントの処理が提供されています。これらのイベントを扱う関数は、MQL4プログラム内で定義されなければならず、関数名、戻り値の型、パラメータ(存在する場合)およびその型は、イベントハンドラ関数の説明に厳密に準じる必要があります。
クライアントターミナルのイベントハンドラは、戻り値の型とパラメータの型によって、このまたはそのイベントを処理する関数を識別します。対応する関数に対して、以下の説明に合致しないパラメータが指定されたり、別の戻り値の型が示されたりした場合、その関数はイベントハンドラとして使用されません。
| 関数名 | 概要 |
|---|---|
| OnInit | エキスパートアドバイザーやインジケータがチャートに読み込まれた時に一度だけ呼ばれる初期化関数です。初期設定やリソースの準備に使用されます。 |
| OnDeinit | エキスパートアドバイザーやインジケータがチャートから削除される時、またはMT4が閉じられる時に呼ばれる終了関数です。使用したリソースの解放などの後処理に使用されます。 |
| OnStart | スクリプトが実行された時に呼ばれる関数です。エキスパートアドバイザーでは使用されません。 |
| OnCalculate | カスタムインジケーターが新しい価格データを受け取った時に呼ばれる関数です。価格データの分析やインジケーター値の計算に使用されます。 |
| OnTick | 新しい市場のティックデータ(価格更新)が到着した時にエキスパートアドバイザーによって呼ばれる関数です。トレードの決定や価格分析に使用されます。 |
| OnTimer | 設定された時間間隔で定期的に呼ばれる関数です。定期的なタスクの実行や状態のチェックに使用されます。 |
| OnTester | バックテスト中に呼ばれる関数です。バックテストの最後に特定の処理を行うために使用されます。 |
| OnChartEvent | チャートイベント(マウス操作、キーボード入力、カスタムイベント)が発生した時に呼ばれる関数です。ユーザーの操作に応じた処理やインタラクティブな機能の実装に使用されます。 |
イベント設定関数
イベント設定用の関数です。
これらの関数を使用することで、特定の時間に定期的に実行する必要があるコードや、カスタムイベントに応じて動作するコードを実装することが可能になります。これは、自動取引システムや複雑なアルゴリズムを持つインジケータで特に有用です。各関数を使用する際は、特定のイベントが発生したときに適切なアクションを取るように、関連するイベントハンドラ関数を適切に実装する必要があります。
| 関数名 | 概要 |
|---|---|
| EventSetMillisecondTimer | ミリ秒単位でタイマーイベントを設定します。指定された時間間隔後にOnTimer()イベントを発生させるために使用します。 |
| EventSetTimer | 秒単位でタイマーイベントを設定します。指定された時間間隔後にOnTimer()イベントを発生させるために使用します。 |
| EventKillTimer | タイマーイベントを削除します。EventSetTimerまたはEventSetMillisecondTimerによって設定されたタイマーを停止し、OnTimer()の呼び出しを停止します。 |
| EventChartCustom | カスタムチャートイベントを生成します。カスタムイベントを処理するためにOnChartEvent()関数内で使用されます。 |
トレード関数
トレード用の関数です。
取引活動を管理するために意図された関数群です。
トレード関数は、エキスパートアドバイザーやスクリプトで使用できます。取引口座の状態を変更するOrderSend()、OrderClose()、OrderCloseBy()、OrderModify()、OrderDelete()などのトレード関数は、エキスパートアドバイザーが取引を許可されている場合(エキスパートアドバイザーやスクリプトのプロパティで「ライブトレードを許可」チェックボックスが有効になっている場合)のみ呼び出すことができます。
取引の許可または禁止は、取引許可セクションで説明されている様々な要因に依存しています。
| 関数名 | 概要 |
|---|---|
| OrderClose | 指定されたチケット番号、ロット数、クローズ価格、スリッページを指定して特定の注文を閉じるために使用されます。成功した場合、真を返します。 |
| OrderCloseBy | 2つの相反する注文を相殺するために使用され、一方の注文を閉じ、もう一方には相当する利益または損失が記録されます。 |
| OrderClosePrice | 最後に閉じられた注文のクローズ価格を返します。注文が選択されている必要があります。 |
| OrderCloseTime | 注文が閉じられた正確な日時を返します。注文が閉じられていない場合は、ゼロを返します。 |
| OrderComment | 注文に関連付けられたコメントを返します。 |
| OrderCommission | 注文にかかるコミッションの金額を返します。 |
| OrderDelete | 指定されたチケット番号の保留中の注文を削除します。成功した場合、真を返します。 |
| OrderExpiration | 保留注文の有効期限を日時形式で返します。有効期限が設定されていない場合は、ゼロを返します。 |
| OrderLots | 注文のロット数を返します。 |
| OrderMagicNumber | 注文に割り当てられたマジックナンバーを返します。これは注文を識別するためにEAによって使用される数値です。 |
| OrderModify | 既存の注文のパラメータ(価格、ストップロス、テイクプロフィット、有効期限等)を変更します。成功した場合、真を返します。 |
| OrderOpenPrice | 注文が開かれた価格を返します。 |
| OrderOpenTime | 注文が開かれた正確な日時を返します。 |
| OrderProfit | 選択された注文の詳細情報をエキスパートログに出力します。 |
| OrderProfit | 注文から得られた利益または損失を返します。 |
| OrderSelect | 指定されたチケット番号の注文を選択するか、全注文の中から特定の注文を選択します。成功した場合、真を返します。 |
| OrderSend | 新しい注文を送信します。注文のタイプ、量、価格、ストップロス、テイクプロフィット等を指定できます。成功した場合、注文のチケット番号を返します。 |
| OrdersHistoryTotal | アカウントの取引履歴に含まれる注文の総数を返します。これには閉じられた注文とキャンセルされた注文が含まれます。 |
| OrderStopLoss | 注文のストップロスレベルを返します。 |
| OrdersTotal | 現在開いている注文の総数を返します。 |
| OrderSwap | 注文にかかるスワップ料金を返します。 |
| OrderSymbol | 注文が関連する通貨ペアを返します。 |
| OrderTakeProfit | 注文のテイクプロフィットレベルを返します。 |
| OrderTicket | 注文のユニークなチケット番号を返します。 |
| OrderType | 注文のタイプ(買い、売り、買い停止、売り停止、買いリミット、売りリミット)を表す整数値を返します。 |
グラフィックオブジェクト関数
グラフィックオブジェクト関連の関数です。
指定されたチャートに関連するグラフィックオブジェクトを操作するための関数群です。現在のチャート上のオブジェクトを操作する場合、直接アクセスが使用され、関数呼び出し中に指定されたオブジェクトの存在が事前にチェックされ、失敗した場合は直ちにエラーコードが返されます。現在のもの以外のチャートのオブジェクトに関数を使用する場合、事前チェックが行われず、そのチャートのキューに関数がそのまま追加される非同期関数呼び出しが使用されます。
グラフィックオブジェクトのプロパティを設定する関数や、ObjectCreate()、ObjectMove() 操作は、実際にはチャートへのコマンド送信に使用されます。これらの関数が成功した場合、コマンドはチャートイベントのキューに追加されます。グラフィックオブジェクトのプロパティの視覚的な変更は、キューからのチャートイベントの処理によって実装されます。
そのため、これらの関数を呼び出した後にグラフィックオブジェクトの視覚的な更新が即時に行われるとは期待しないでください。一般的に、チャート上のグラフィックオブジェクトは、新しい見積もりの到着、チャートウィンドウのサイズ変更などの更新イベントに基づいて、端末によって自動的に更新されます。グラフィックオブジェクトの更新を強制するには、ChartRedraw() コマンドを使用します。
| 関数名 | 概要 |
|---|---|
| ObjectCreate | チャート上に新しいオブジェクトを作成します。 |
| ObjectName | 指定されたインデックスにあるオブジェクトの名前を取得します。 |
| ObjectDelete | チャートから指定された名前のオブジェクトを削除します。 |
| ObjectsDeleteAll | 特定のウィンドウ、またはすべてのウィンドウからオブジェクトを削除します。 |
| ObjectFind | 指定された名前のオブジェクトが存在するウィンドウのインデックスを返します。 |
| ObjectGetTimeByValue | 指定された価格に対応する時間をオブジェクトから取得します。 |
| ObjectGetValueByTime | 指定された時間に対応する価格をオブジェクトから取得します。 |
| ObjectMove | 指定されたオブジェクトを新しい位置に移動します。 |
| ObjectsTotal | チャート上のオブジェクトの総数を返します。 |
| ObjectGetDouble | 指定されたオブジェクトのプロパティ値(double型)を取得します。 |
| ObjectGetInteger | 指定されたオブジェクトのプロパティ値(整数型)を取得します。 |
| ObjectGetString | 指定されたオブジェクトのプロパティ値(文字列型)を取得します。 |
| ObjectSetDouble | 指定されたオブジェクトのプロパティ値(double型)を設定します。 |
| ObjectSetInteger | 指定されたオブジェクトのプロパティ値(整数型)を設定します。 |
| ObjectSetString | 指定されたオブジェクトのプロパティ値(文字列型)を設定します。 |
| TextSetFont | テキストオブジェクトのフォント名、サイズ、スタイル、重さを設定します。 |
| TextOut | チャートに直接テキストを描画します。 |
| TextGetSize | 指定されたテキストのサイズを取得します。 |
| ObjectDescription | オブジェクトの説明を取得します。 |
| ObjectGet | オブジェクトのプロパティを取得します。 |
| ObjectGetFiboDescription | フィボナッチオブジェクトのレベル説明を取得します。 |
| ObjectGetShiftByValue | 指定された価格に対応するオブジェクトのシフトを取得します。 |
| ObjectGetValueByShift | 指定されたシフトに対応するオブジェクトの価格を取得します。 |
| ObjectSet | オブジェクトの特定のプロパティを設定します。 |
| ObjectSetFiboDescription | フィボナッチオブジェクトのレベル説明を設定します。 |
| ObjectSetText | オブジェクトにテキストを設定します。 |
| ObjectType | オブジェクトのタイプを取得します。 |
アカウント情報関数
アカウント情報関連の関数です。
現在のアカウント情報を取得するための関数群です。
| 関数名 | 概要 |
|---|---|
| AccountInfoDouble | アカウントの数値情報をdouble型で返します(例: バランス、エクイティなど)。 |
| AccountInfoInteger | アカウントの数値情報をlong型で返します(例: レバレッジ、ストップアウトレベルなど)。 |
| AccountInfoString | アカウントの文字列情報を返します(例: アカウント名、通貨など)。 |
| AccountBalance | アカウントの現在のバランスを返します。 |
| AccountCredit | アカウントのクレジット額を返します。 |
| AccountCompany | アカウントを提供するブローカー会社の名前を返します。 |
| AccountCurrency | アカウントの通貨を返します。 |
| AccountEquity | アカウントのエクイティ(資産額)を返します。 |
| AccountFreeMargin | アカウントの利用可能なマージンを返します。 |
| AccountFreeMarginCheck | 指定されたシンボルとロット数で取引を行った場合の、アカウントの利用可能なマージンを計算します。 |
| AccountFreeMarginMode | アカウントのマージン計算モードを返します。 |
| AccountLeverage | アカウントのレバレッジを返します。 |
| AccountMargin | アカウントの使用中のマージンを返します。 |
| AccountName | アカウントの名前を返します。 |
| AccountNumber | アカウントの番号を返します。 |
| AccountProfit | アカウントの現在の浮動損益を返します。 |
| AccountServer | アカウントを提供するサーバーの名前を返します。 |
| AccountStopoutLevel | ストップアウトレベル(マージンコールレベル)を返します。 |
| AccountStopoutMode | ストップアウトの計算モードを返します。 |
カスタムインジケータ関数
カスタムインディケータ関連の関数です。
カスタムインディケータを作成する際に使用されるグループ関数です。これらの関数は、エキスパートアドバイザーやスクリプトを書く際には使用できません。
| 関数名 | 概要 |
|---|---|
| HideTestIndicators | テスト中にグラフ上のインディケータを隠すかどうかを設定します。チャート上での表示を制御するのに使用されます。 |
| IndicatorSetDouble | インディケータの設定可能なdouble型プロパティ(例: 最小値、最大値)を設定します。これはインディケータの表示範囲やスケールを調整するのに使われます。 |
| IndicatorSetInteger | インディケータの設定可能なinteger型プロパティ(例: 描画スタイル、幅)を設定します。インディケータの見た目をカスタマイズするのに役立ちます。 |
| IndicatorSetString | インディケータの設定可能なstring型プロパティ(例: 名前)を設定します。インディケータの識別や説明に使用されます。 |
| SetIndexBuffer | インディケータ計算結果を格納するバッファを設定します。インディケータのデータを格納する配列を割り当てるのに必要です。 |
| IndicatorBuffers | インディケータが使用するバッファの数を設定します。計算に必要なデータ配列の数を定義します。 |
| IndicatorCounted | 既に計算されたバーの数を返します。これにより、新たに計算が必要なデータのみを処理できます。 |
| IndicatorDigits | インディケータの価格データの表示精度(小数点以下の桁数)を設定します。チャート上での価格表示を制御します。 |
| IndicatorShortName | インディケータの短縮名を設定します。チャートのデータウィンドウに表示される名前です。 |
| SetIndexArrow | インディケータのバッファに対して表示する矢印記号を設定します。特定の条件を示すマーカーとして利用されます。 |
| SetIndexDrawBegin | インディケータが描画を開始するバーの数を設定します。これにより、過去の特定のポイントから描画を開始できます。 |
| SetIndexEmptyValue | インディケータのバッファで未定義の値を表すために使用する値を設定します。空のデータポイントを示すのに使用されます。 |
| SetIndexLabel | インディケータの各バッファのラベルを設定します。データウィンドウに表示される各バッファの説明テキストです。 |
| SetIndexShift | インディケータの描画をずらすバーの数を設定します。インディケータの表示を時間軸に沿って前後に移動させることができます。 |
| SetIndexStyle | インディケータの線のスタイル、太さ、色を設定します。インディケータの視覚的表現をカスタマイズするのに使われます。 |
| SetLevelStyle | インディケータのレベル線のスタイルと色を設定します。特定の価格レベルや意味のある閾値を示すのに使用されます。 |
| SetLevelValue | インディケータのレベル線の値を設定します。これにより、チャート上に表示される水平線の位置を定義できます。 |
テクニカルインディケータ関数
テクニカルインディケータ関連の関数です。
標準およびカスタムインディケータの計算を目的とした関数群です。
エキスパートアドバイザー(または他のMQL4プログラム)が任意のインディケータの値を取得するためには、そのインディケータがチャートに表示されている必要はありません。要求されたインディケータは、呼び出したモジュールのスレッドでロードされ、計算されます。
任意のインディケータは、現在のチャートのデータだけでなく、利用可能な任意のシンボル/期間のデータに基づいて計算することができます。別のチャートからデータ(シンボル名および/またはタイムフレームが現在のものと異なる)が要求される場合、対応するチャートがクライアントターミナルで開かれていなかった状況が発生し、必要なデータをサーバーから要求する必要があります。この場合、エラーERR_HISTORY_WILL_UPDATED(4066 – 要求された履歴データが更新中です)がlast_error変数に設定され、再度要求する必要があります(ArrayCopySeries()の例を参照)。
すべてのインディケータ関数には、少なくとも2つのパラメーター(シンボルと期間)があります。シンボルのNULL値は現在のシンボルを意味し、期間の0値は現在のタイムフレームを意味します。
| 関数名 | 概要 |
|---|---|
| iAC | Accelerator Oscillatorの値を計算します。 |
| iAD | Accumulation/Distributionインディケータの値を計算します。 |
| iADX | 平均方向移動指数 (Average Directional Movement Index) の値を計算します。 |
| iAlligator | ビル・ウィリアムズのアリゲーターインディケータの値を計算します。 |
| iAO | Awesome Oscillatorの値を計算します。 |
| iATR | 平均真の範囲 (Average True Range) の値を計算します。 |
| iBearsPower | ベアパワーインディケータの値を計算します。 |
| iBands | ボリンジャーバンドの値を計算します。 |
| iBandsOnArray | 配列データに基づいてボリンジャーバンドの値を計算します。 |
| iBullsPower | ブルパワーインディケータの値を計算します。 |
| iCCI | 商品チャネル指数 (Commodity Channel Index) の値を計算します。 |
| iCCIOnArray | 配列データに基づいて商品チャネル指数の値を計算します。 |
| iCustom | カスタムインディケータの値を計算します。 |
| iDeMarker | DeMarkerインディケータの値を計算します。 |
| iEnvelopes | エンベロープインディケータの値を計算します。 |
| iEnvelopesOnArray | 配列データに基づいてエンベロープインディケータの値を計算します。 |
| iForce | フォースインデックスの値を計算します。 |
| iFractals | フラクタルインディケータの値を計算します。 |
| iGator | ゲーターオシレータの値を計算します。 |
| iIchimoku | 一目均衡表の値を計算します。 |
| iBWMFI | 市場係数インディケータ (Market Facilitation Index) の値を計算します。 |
| iMomentum | モメンタムインディケータの値を計算します。 |
| iMomentumOnArray | 配列データに基づいてモメンタムインディケータの値を計算します。 |
| iMFI | 資金流量指数 (Money Flow Index) の値を計算します。 |
| iMA | 移動平均の値を計算します。 |
| iMAOnArray | 配列データに基づいて移動平均の値を計算します。 |
| iOsMA | 移動平均のオシレータ (OsMA) の値を計算します。 |
| iMACD | 移動平均収束発散 (MACD) の値を計算します。 |
| iOBV | オンバランスボリューム (On Balance Volume) の値を計算します。 |
| iSAR | パラボリックSARの値を計算します。 |
| iRSI | 相対力指数 (Relative Strength Index) の値を計算します。 |
| iRSIOnArray | 配列データに基づいて相対力指数の値を計算します。 |
| iRVI | 相対活性指数 (Relative Vigor Index) の値を計算します。 |
| iStdDev | 標準偏差インディケータの値を計算します。 |
| iStdDevOnArray | 配列データに基づいて標準偏差インディケータの値を計算します。 |
| iStochastic | ストキャスティクスオシレータの値を計算します。 |
| iWPR | ウィリアムズ%Rインディケータの値を計算します。 |
注意点
- カスタムインディケーターの開発時にこれらの関数を使用しますが、エキスパートアドバイザーやスクリプトでの使用はできません。
- 各関数のパラメータは、計算するインディケーターの特性や必要な入力値によって異なります。適切なパラメータ値を設定することが重要です。
- インディケータの計算結果を解釈する際は、その指標が示す市場状況を正確に理解する必要があります。各インディケータの理論背景や使い方を学ぶことが推奨されます。
- インディケータのパフォーマンスや効率性を考慮して、計算に必要なデータ範囲や期間を適切に設定してください。不必要に長い期間のデータを計算に含めると、パフォーマンスに影響を及ぼす場合があります。