MQL移植シリーズ¶
このシリーズについて
「とあるMetaTraderの備忘秘録」様の記事を投稿日順にたどり、MQL4コードはMQL5へ移植し、文章で示された技術アイデアは検証可能なインジケータへ再構成するシリーズです。
単なる移植ではなく、なぜそのロジックが有効なのか、MQL5での実装のポイントを詳しく解説します。
テーマ別に探す¶
全109本をテーマで分けています。タブを切り替えると、そのテーマの記事が番号順に並びます。新しい順に見たいときは、下の「記事一覧」へ。
- #01 一目三役好転インジケータ
- #05 Bollinger Bands-Fibo
- #07 一目の幅(水平時間差)
- #10 AllAverages v2.5
- #12 SMMA=2×EMA−1?
- #14 3本HMA判定
- #15 SMA基準とEMA基準のボリンジャーバンド
- #20 MAの間に雲を描く
- #28 シフトの違うMAの間へ雲を描く
- #45 MTF補間を確定足だけで再設計
- #64 アンディの雲をMT5へ
- #65 アンディの雲をMTF化
- #69 アンディの雲転換を縦線で記録
- #83 MAクロスへ終値タグを付ける
- #84 MAクロスを次足始値で仮想約定する
- #89 形成中の日足EMAをたどる
- #98 値幅に合わせて期間を変える移動平均
- #26 バッドティック候補を異常ヒゲから探す
- #30 経済指標後60分の値動きを測る
- #32 バックテスト後の確認チャートを毎回同じ見た目にする
- #36 バックテストの「99%」は信頼できる?MT5で履歴データの品質を点検する
- #55 古いsymbols.sel改変をやめる
- #73 最適化9パスの勝率をCSVへ
- #76 H1の5分ずれを壊さず調べる
- #77 5日ごとのランダム方向を検証する
- #78 M1のTick VolumeをOHLC経路で見積もる
- #87 最適化パスごとにSL・TP決済を数える
- #94 日足の値幅を年ごとに比べる
- #96 2つのグリコ戦略を1万回比べる
- #100 複数銘柄のテストをまとめて実行
- #101 複数のsetを順番にテスト
- #102 最適化を段階的に進める
- #103 直近25時間の安値を時刻でそろえる
- #18 FirstとPrevious
- #39 Level IIは接続先しだい
- #40 日本語変数名は今も使える?
- #41 「+」なしで整数を足す
- #42 口座種別をDLLなしで判定
- #56 アクティブタブを断定しない
- #61 日時をUnix秒へ変換する
- #63 filesフォルダの外へ書かない
- #71 偽Tickを送らない
- #74 再初期化しても同じ形か
- #79 TimeCurrentはどの銘柄の時刻か
- #81 iCustomの入力を省略すると何が返る?
- #105 同じ高値が並んだら
- #106 ブレークポイントで値を追う
- #108 MQL5からDLL関数を呼び出す
- #110 仮想建玉をネット建玉へ対応づける
記事一覧¶
-
【移植#110】仮想建玉をネット建玉へ対応づける — 反対売買の相殺を合成値で確認
MT5は口座によってネットティングまたはヘッジの建玉方式を使います。
ネットティングでは同じ銘柄の反対売買が既存の純建玉を減らし、同量なら閉じます。 -
【移植#108】MQL5からDLL関数を呼び出す — .NETの静的メソッドを小さく試す
2010年の原記事は、GSLのウェーブレット関数を呼び出すためのDLL関数を作る導入です。
ここではMQL5公式の.NET連携を使い、C#の静的メソッドへ数値を渡して結果を表示します。 -
【移植#107】DLLの許可状態を点検する — MT5の端末設定とプログラム設定を分けて見る
2010年の「ダイバージェンス」は他ブログの紹介が中心で、移植するコードや仕様がありません。次の技術記事「初めてのDLL(1)」を題材にします。
DLLを実際に読み込む前に、端末全体とこのプログラムの許可状態を標準APIで確認できます。 -
【移植#106】ブレークポイントで値を追う — PT Multistation記事からMT5デバッガへ
2010年の記事は、MQL4互換のPT Multistationでブレークポイント停止とステップ実行、変数確認を試しています。
現在のMetaEditorにはMQLプログラム用デバッガがあり、停止中にウォッチ式・コールスタック・一段ずつの実行を確認できます。 -
【移植#105】同じ高値が並んだら — iHighestの同値選択を実測する
iHighest()が返すのは最大値の位置ですが、公式リファレンスは同値最大が複数ある場合の選び方を定めていません。
MT5 Build 6230の合成データでは、同じ最高値が3本あるとき shift 1(最新)が返りました。 -
【移植#104】前日の高値・安値・中間値を引く — 確定日足の3本線
2010年6月9日のMT4ツールを、前の確定日足の高値・安値・中間値を表示するMT5インジケーターへ移します
日足の確定値を1本取得し、3つの水平線を描画します。中間値は(高値+安値)÷2です -
【移植#103】直近25時間の安値を時刻でそろえる — 欠損バーを0と混同しない
配列の
L[0]を現在のH1足、L[1]を1時間前として並べる考え方をMT5へ移します
必要な25個の時刻を先に決め、その時刻と一致するバーだけをCopyRates()の結果から探します -
【移植#102】最適化を段階的に進める — 探索数と相互作用を比べる
入力値の組合せが多いとき、関係が薄い変数群を分けて順に探索すると計算を減らせます
5×5の例では全探索25回に対し、二段階なら10回で同じ最大値を見つけました -
【移植#101】複数のsetを順番にテスト — MT5の入力値とレポートを照合する
setファイルごとにMT5テスト設定を用意し、同じEAを別々の入力値で順番に実行できます
実行した値はログとレポートで照合し、レポート名を分けて上書きを防ぎます -
【移植#100】複数銘柄のテストをまとめて実行 — MT5のSymbol Optimization
MT5には、Market Watchで選択した銘柄ごとに同じEA・期間・入力値をテストするモードがあります
設定ファイルから起動する場合はOptimization=3を指定します -
【移植#99】Comment風の文字表示を整える — OBJ_LABELで複数行へ分割
Comment()では変えられない文字のフォント・大きさ・色を、OBJ_LABELで指定します
改行と長い行を分割し、各行を独立したラベルとして並べます -
【移植#98】値幅に合わせて期間を変える移動平均 — レンジ内へ収まる適応ルール
移動平均がその足の高値と安値の間に入るよう、期間を短く調整します
条件を満たした足の次は期間を1つ長くし、レンジが続くと徐々に長くなります -
【移植#97】5秒・15秒・30秒足をティックから描く — MT5で刻むサブ分足
実ティックを時間区切りでまとめ、秒単位のローソクをチャートオブジェクトとして描きます
ティックがなかった区間には足を作らず、履歴が届くまで初期表示を待ちます -
【移植#96】2つのグリコ戦略を1万回比べる — 乱数と期待値を分けて読む
1:1:1と2:2:1の手の出し方を、500回勝負×1万試合で比較します
3・6・6歩のルールでは、1ラウンドの得点差の期待値は理論上ちょうど0です -
【移植#95】履歴を読み直してもローソクを重ねない — 時刻キーと所有範囲で再同期
履歴が後から追加されたり、途中の欠損が補われたりすると、MT5は
prev_calculatedを0に戻します
描画名をバー時刻から作り、全再計算時には自分の名前の範囲だけ消して再描画します -
【移植#94】日足の値幅を年ごとに比べる — ATR(1)で見る相場環境
ATR期間を1にした日足のTrue Rangeを、暦年ごとに色分けして表示します
日足の高値安値だけでなく、前日終値からの窓も値幅に含まれます -
【移植#93】チャートスケールをオート/固定で切り替える — キー操作を2つのボタンへ
MT4のダイアログ操作や外部キー送信を使わず、MT5標準のチャートAPIで表示幅を切り替えます
「Fix scale」はクリック時のBidを中心に指定pips幅を設定し、「Auto scale」は端末の自動調整へ戻します -
【移植#92】ZigZagの各スイングをpips/hで表示 — 変わる折れ点も見分ける
ZigZagの隣り合う折れ点ごとに、価格差と時間差から平均速度を計算します
直近の折れ点は価格の更新で移動・変更されるため、速度表示も変わることがあります -
【移植#91】トレンドラインの平均速度をpips/hで表示 — 画面の角度に頼らない
画面上の角度はズームや価格軸の倍率で変わるため、価格差を時間で割った平均速度を表示します
チャート上のトレンドラインの2点から、符号付きのpips/hを計算します -
【移植#90】MTFサポート・レジスタンスを自動更新 — フラクタルの更新範囲を見直す
MTF指標の再計算範囲は、最長の参照時間足が影響するチャート足まで広げます
フラクタルの確定に必要な右側の足も考慮し、最大時間足比の3倍に余白を加えます -
【移植#89】形成中の日足EMAをたどる — H1確定値から軌跡を描く
日足EMAを、各H1確定終値を仮の日足終値として計算し直して表示します
まだ確定していない日足の値や、後から確定した日足終値は過去の軌跡に使いません -
【移植#88】前週最後のバーは何本前? — 日曜0時と実在する足で探す
サーバー時刻の日曜0時を週の境界にし、その前後に実在する足を探します
月曜の始値時刻や日足の本数は固定せず、前週最後の足が現在の足から何本前かを表示します -
【移植#87】最適化パスごとにSL・TP決済を数える — コメントではなく決済理由を見る
MT5の決済履歴には、SL・TPなどの実行理由を示す
DEAL_REASONがあります
各最適化パスの決済ディールだけを理由別に数え、実pass IDと入力値をCSVに残します -
【移植#86】Bid・Askから離れた水平線を引く — pointsと複数インスタンスの扱い
最新BidまたはAskから指定したpointsだけ離れた水平線を、チャートへ1本表示します
インスタンスIDを分ければ同じチャートに複数置け、手動で消した線の再生成も選べます -
【移植#85】色つきRCIとStochasticを同じ窓で比べる — 似た線でも計算は別
RCIは終値の時間順位と価格順位を比べ、Stochasticは終値が期間内の高値・安値のどこにあるかを測ります
同じ30本で計算しても、EURUSD H1の検証500本では正規化した2線の差が最大1.487でした -
【移植#84】MAクロスを次足始値で仮想約定する — インジケーター内損益線の読み方
確定したSMA10/20クロスを、その次の足の始値で反転したと仮定して損益線を描きます
固定20ポイントのコストは入力した見積もりで、過去の実スプレッドやStrategy Testerの約定結果ではありません -
【移植#83】MAクロスへ終値タグを付ける — 表示価格と約定価格を分ける
SMA13とSMA16がクロスした確定足へ、その足の終値を価格タグで表示します
タグは過去の終値です。シグナル発生時のBidや、その価格で売買できた証拠ではありません -
【移植#82】平滑平均足を方向バーにする — 赤と白に残す情報、捨てる情報
平滑平均足の方向を、高さ1の赤白バーにしてサブウィンドウへ表示します
元コードは方向に応じて並べ替えた高値・安値を平滑化して比較します。平均足の実体だけの比較とは異なります -
【移植#81】iCustomの入力を省略すると何が返る? — 6通りの呼出しと3バッファを照合
MT5の
iCustom()は値そのものではなくハンドルを返し、CopyBuffer()で各バッファを読みます
省略・明示・異なる入力を、終値×係数という答えの分かる指標で比較します -
【移植#80】通貨強弱は何本のペアで決まるか — xMeterの構成バイアスを可視化
xMeter型の数値は、当日高安の中で現在Bidがどこにあるかを0〜9へ離散化し、通貨ごとに平均した値です
12ペアの構成は不均衡で、USDは6本、CADはUSDCADの1本だけなので、同じ「通貨強弱」でも根拠の幅が違います -
【移植#79】TimeCurrentはどの銘柄の時刻か — Market Watchのクォート鮮度を横断監査
TimeCurrent()は、Market Watchで選択されているいずれかの銘柄について最後に受信したクォートのサーバー時刻です
各銘柄のMqlTick.time_mscとの差を並べると、全体の基準時刻に対して更新が遅い銘柄を切り分けられます -
【移植#78】M1のTick VolumeをOHLC経路で見積もる — 履歴を書き換えないwhat-if監査
旧MT4のTick Volume書き換え案を、確定M1を読むだけのwhat-if監査へ置き換えました
EURUSD 2,000本では、1.2倍見積りは記録済み総量の10.74%、3.0倍は23.07%でした -
【移植#77】5日ごとのランダム方向を検証する — 固定seedの読み取り専用ベースライン
旧EAのランダム売買を、注文を出さない5暦日区間の比較器へ置き換えました
固定seedの54区間は独立計算と全件一致し、別seedでは33/54区間の方向が変わりました -
【移植#76】H1の5分ずれを壊さず調べる — M1再集計でOHLCを照合
H1が毎時00分から始まっているかを、確定足だけで確認します
同じ時間帯のM1からOHLCとTick Volumeを作り直し、H1と全件照合します -
【移植#75】TIIの20越え・80割れ通知 — 同じ名前でも式が違う
TIIの「20越え」と「80割れ」を、形成中ではなく確定した足で一度だけ検出します
M.H. Peeの原典式と、旧TII_RLHに見られる別の計算解釈を同じチャートへ重ねました -
【移植#74】再初期化しても同じ形か — 差分計算と全計算を500本照合
IndicatorCounted()を0扱いにする原典の応急処置を、差分計算と全履歴計算の一致を測る監査へ作り替えました
確定足だけを比べ、値がずれた位置には赤い印を出します。全再計算はリペイントする数式そのものを直す方法ではありません -
【移植#73】最適化9パスの勝率をCSVへ — OnTesterとフレームで取りこぼさない
各テスト終了時に
TesterStatistics()から総取引数と勝ち取引数を取得し、勝率を計算します
FrameAdd()で各エージェントから送り、FrameNext()の実pass IDとFrameInputs()の入力値をCSVへ記録します -
【移植#72】必要な日だけPivotを引く — 前日値幅で描く4つのFiboZone
原典の計算式を確認し、Pivotの上下に「前日値幅の0.500〜0.618倍」と「1.000〜1.382倍」の帯を描きます
表示は直近1〜20日分。前の確定日足だけを使い、日付の境目で線を区切ります -
【移植#71】偽Tickを送らない — MT5タイマーの周期と取りこぼしを測る
MT4の内部メッセージ送信や無限ループを使わず、MT5標準の
OnTimer()でTick非依存の周期処理へ置き換えます
要求周期、実測間隔、価格時刻が変わらなかった回数、統合されたTimer枠の推定値を同じ画面へ表示します -
【移植#70】1970年ダミー足をやめる — MT5履歴を指定日まで段階取得
1970年のダミー足や履歴ファイル改変を使わず、MT5の標準時系列APIへ置き換えました
1回500本ずつ古い側を要求し、対象日時を覆う確定足と同期状態を2回連続で確認します -
【移植#69】アンディの雲転換を縦線で記録 — 確定H1だけで陽転・陰転を追う
確定したH1の先行スパンAとBを比べ、上下関係が入れ替わった位置だけを記録する
雲を26本先へ表示するバー差も縦線へ反映し、見えている雲の転換位置へそろえる -
【移植#68】5本引けばどれかは当たる — ラインの「当たり判定」が値幅の何割かを測る
1日の値幅へ5本ラインを引き±5pipsを許容すると、値幅の半分が「当たり判定」で埋まる
確定したスイング高安が帯へ入った割合を数え、帯が占める面積の割合と比べる -
【移植#67】QQEを同じ物差しで重ねる — 50中央の高速・低速2ライン
2つのQQEを別々に重ねると、オートスケールの違いで振幅を正しく比較できない
RSI平滑線を1つのサブウィンドウへまとめ、0〜100固定軸の中央を50にする -
【移植#66】点在シグナルを線で結ぶ — DRAW_SECTIONとDRAW_NONEの安全な切替
点在する確定シグナルだけを1本の線で結ぶなら
DRAW_SECTIONを使う
矢印や丸印を消すときは透明色にせず、描画方式をDRAW_NONEへ切り替える -
【移植#65】アンディの雲をMTF化 — 確定H1をM15へ安全に重ねる
H1で計算したアンディの雲を、時刻対応を取ってM15チャートへ重ねる
形成中のH1足は使わず、確定済みの上位足だけで階段表示または補間表示する -
【移植#64】アンディの雲をMT5へ — 一目の雲を平行移動して描く
転換線と基準線から先行スパンA、期間高安から先行スパンBを計算する
2本の雲境界を26本先へ平行移動し、その間を2色で塗り分ける -
【移植#63】filesフォルダの外へ書かない — MT5共通領域の書き込みを監査
絶対パスやDLLでMT5の外部フォルダへ書き込む設計は採用しない
FILE_COMMONで端末間共有が可能な安全な共通領域へ書き込む -
【移植#62】Linear Regressionの謎を解く — 終値をすべて含む平行チャネル
中心線は計算区間の終値に対する線形回帰で求める
上下線は中心線に平行で、区間内の全終値を含む幅にする -
【移植#61】日時をUnix秒へ変換する — MT5のdatetimeを往復検証
年月日時分秒をUnixエポック秒へ変換し、MT5の
datetimeとして扱う
StructToTime()とTimeToStruct()で変換後の往復一致を確認する -
【移植#60】DDEをやめて口座スナップショットをCSVへ — 複数MT5を表計算で集計
旧MT4のDDEMap.dllとExcelのライブ接続をそのまま持ち込まない
AccountInfo*で残高・評価額などを読み、共通CSVへ時刻付きで追記する -
【移植#59】QQEの矢印を確定足だけにする — メインチャートへ安全に表示
QQEの計算線とメインチャート矢印を別インジケータへ分ける
RSI平滑線の50クロスを、確定したバーだけで判定する -
【移植#58】QQE-VTをMT5へ — RSI平滑線とクロスをサブウィンドウで確認する
VT/CT系QQEの狙いを、標準RSI・平滑処理・クロス表示へ分解してMT5へ移植する
iRSI()とCopyBuffer()でデータを取得し、計算不能な初期区間を無理に描画しない -
【移植#57】MODE_STOPLEVELを書き換えない — MT5の停止距離を読み、条件だけを比較する
旧MT4の
MODE_STOPLEVELを業者ファイルへ書き戻す方法はMT5移植の対象にしない
SYMBOL_TRADE_STOPS_LEVELとSYMBOL_TRADE_FREEZE_LEVELを読み、仮想値との判定差を表示する -
【移植#56】アクティブタブを断定しない — MT5標準イベントで最後の操作チャートを追跡
MT4のWin32 DLLによるMDIアクティブ判定を、そのままMT5へ持ち込まない
OnChartEvent()で観測できた最後のクリック・キー入力を端末全体で共有する -
【移植#55】古いsymbols.sel改変をやめる — 固定スプレッドのカスタム銘柄をMQL5で作る
旧MT4の内部ファイル書き換えやオフライン起動を使わず、MT5標準のカスタム銘柄を作ります
元ティックの時刻とBidを保ち、Askだけを指定ポイント幅へ置き換えてスプレッド条件を固定します -
【移植#54】キー送信をやめる — 複数チャートの時間足をMQL5で一括変更
DLL、キー送信、外部常駐ツールを使わず、MT5のチャート操作APIだけで時間足をそろえます
ChartSetSymbolPeriod()のtrueを完了扱いせず、変更後に全チャートの時間足を再読します -
【移植#53】Delete→Undoをやめる — 選択中オブジェクトを安全に読む
旧MT4の「一度削除してUndoする」判定を使わず、MT5の
OBJPROP_SELECTEDを読みます
毎ティック全走査せず、チャートイベントと低頻度タイマーを併用し、走査件数に上限を設けます -
【移植#52】HST直書きをやめる — 日足CSVをMT5カスタムシンボルへ安全に取り込む
旧MT4のHSTバイナリを直接組み立てず、MT5のカスタムシンボルAPIへ日足CSVを渡します
日付、数値、時系列順、重複、OHLC、出来高を先に検査し、1行でも異常なら履歴を書き換えません -
【移植#51】指値注文を通信に使わない — 期限付き停止指令を検証するリモートHALTガード
指値注文を通信メッセージにせず、HTTPSの短い応答から
HALTとRESUMEだけを受け取ります
期限切れ、未来時刻、別チャンネル、別対象、古い連番は拒否し、異常な応答で停止状態を解除しません -
【移植#50】12通貨の指標値を1枚へ — 確定足を揃えるトレンド・コンセンサス
12通貨ペアのEMA20とEMA50を、同じH1確定時刻へ揃えて1画面に集約します
欠損銘柄を有効数と分け、最低8銘柄が揃わない限り80%到達を成立させません -
【移植#49】DLL共有メモリをやめて共通ファイルへ — 2つのMT5価格を鮮度付きで比較する
共有メモリDLLを使わず、同じPC上のMT5同士でBidとAsk、更新時刻を受け渡します
一時ファイルからの置換、送信元・銘柄・価格・未来時刻・鮮度の検査で書きかけや取り違えを拒否します -
【移植#48】アイコン改造をやめて端末識別バッジへ — 複数MT5を色と別名で見分ける
端末のアイコンファイルを置換せず、MT5チャートへ任意の別名と色を大きく表示します
口座種別、接続、端末・口座・実行プログラムの売買許可を標準APIから確認できます -
【移植#47】生のHSTを読まずに履歴を一括CSV化 — 3通貨×500本をCopyRatesで書き出す
古いHSTバイナリを直接解析せず、MT5の
CopyRates()から確定足を取得します
初期設定では3通貨×500本を別々のCSVへ出力し、古い足から新しい足へ並べます -
【移植#46】DDEをやめて共有ファイルへ — Excel→MT5の文字列受信を安全にする
古いDDEクライアントを再現せず、Excel等が出力したUTF-8ファイルをMT5が読み取る方式へ変更しました
更新時刻、必須ヘッダー、空欄、未来時刻、期限切れを検査し、異常なメッセージは受理しません -
【移植#45】MTF補間を確定足だけで再設計 — 30分足バンドを5分足へ滑らかに投影する
30分足の値を5分足へそのまま複製すると、6本ごとに値が飛ぶ階段状の線になります
未確定の30分足終値を過去へ埋めず、2本の確定足を次の30分区間で補間する方式へ再設計しました -
【移植#44】Homeキー連打を卒業 — MT5のM1履歴を3通貨ずつ順番に同期する
MT4時代のHomeキー疑似連打を、MT5の
CopyRates()による履歴要求へ置き換えました
3通貨を同時に走らせず、1件ずつ同期してバー数・同期状態・失敗をパネル表示します -
【移植#43】プロファイル指定でMT5を起動 — ワークスペースを8項目で監査する
MT5では
/profile:で既存プロファイル、/config:で詳細な起動設定を指定できます
原典のMarketWatch=をそのまま使わず、Symbol Setの保存と起動後の実状態監査に分けます -
【移植#42】口座種別をDLLなしで判定 — 標準APIと表示プライバシーを検証する
MQL4時代のウィンドウタイトル解析を使わず、MQL5の
AccountInfoInteger()で口座種別を判定します
数値関数の自作版は32ケースで標準関数と照合し、「書ける」と「同じ仕様」を分けて確認します -
【移植#41】「+」なしで整数を足す — ビット演算を境界値まで検証する
XORで桁上がりを除く和、ANDと左シフトで桁上がりを作り、
+なしの整数加算を再現します
乗算はシフト加算法へ広げ、正数・負数20ケースと64bit範囲外4ケースを検証します -
【移植#40】日本語変数名は今も使える? — MQL5の仕様境界を実機で確かめる
現行MetaEditorでは日本語の変数名・関数名と、原典で化けた7文字が0エラー・0警告で動きました
ただし、MQL5公式仕様が識別子として明記するのは英字・数字・アンダースコアだけです -
【移植#39】Level IIは接続先しだい — MT5で板情報の有無を確かめる
Level IのBid・Askと、Level IIの板情報は別物です
MT5の標準APIで板を購読し、非対応ならLevel Iだけを表示します -
【移植#38】MT5チャートを一時的に隠す — Pキーで戻せるプライバシーシールド
価格チャート、軸、注文ライン、ワンクリック取引などを黒いシールドで一時的に隠します
Pキーで解除し、もう一度押すと再遮蔽します。削除時には適用前の設定へ戻します -
【移植#37】東京9–17時を1本の足にする — セッションOHLCをMQL5で可視化
東京時間9:00〜17:00の確定M1足を、日ごとの始値・高値・安値・終値へ集計します
MT4のオフライン日足を、通常チャート上のセッションボックスとしてMQL5へ再構成しました -
【移植#36】「99%」を鵜呑みにしない — バックテスト履歴の証拠をMQL5で点検する
バックテスト画面の大きな百分率だけでなく、その数字が何を測っているかを確認します
確定M1足5,000本のOHLC、時刻順、ギャップ、出来高、スプレッド記録を点数化せず表示します -
【移植#35】メール本文の改行を送信前に整える — SendMail用CRLFプリフライトをMQL5で作る
LF・CR・CRLFが混在したメール本文を、送信前にCRLFへ統一します
元記事の「失敗メールが残って後続も失敗したように見える」事例から、件名とログを対応づける大切さを読み直します -
【移植#34】7行のCTSLをほどいて再構成する — Gann Swing OscillatorをMQL5へ
VisualTraderの短いCTSL式を、高値・安値の連続更新から順番に分解します
最後の非ゼロ信号を保持する処理を、MQL5では明示的な±1の状態遷移として再構成しました -
【移植#33】確定足と予報を分けるメール通知 — MACDゼロクロスを同一バー1回だけ送る
MACDのゼロラインクロスを、確定足または形成中バーのどちらで判定するか選べます
初回の過去通知と同一バーの連打を防ぎ、通貨・時間足・価格・時刻をそろえた本文を作ります -
【移植#32】バックテスト後の確認チャートを毎回同じ見た目にする — tester.tpl向け表示プリセット
MT5では、単体テスト後に開く確認チャートへ
tester.tplを適用できます
配布インジケーターはGreen on Black、SMA20/50、設定確認パネルを一度に作ります -
【移植#31】EAのアイデアを実装可能な仕様にする — 8項目の要件チェックをチャート表示
EAやインジケーターの依頼前に、売買条件を8項目へ分解して曖昧さを減らします
未定義値や範囲外の設定があれば、MT5チャート上でNEEDS DEFINITIONと表示します -
【移植#30】経済指標後60分の値動きを測る — 初動・最大変動・戻りを同じ基準で記録
経済指標後の反応は「動いた印象」ではなく、同じ時間窓と基準価格でそろえて測ります
発表直前のM1終値を基準に、5分後・60分後・最大上昇・最大下落・戻りを計算します -
【移植#29】複数のMT5で状態ファイルを共有する — FILE_COMMONで安全に受け渡す
複数のMT5で実行時データを共有するなら、まずMQL5標準の
FILE_COMMONを使います
共有するのは小さな状態ファイルだけに絞り、端末設定やMQL5フォルダ全体は結合しません -
【移植#28】シフトの違うMAの間へ雲を描く — 表示時刻をそろえてから塗りつぶす
横シフトが違う2本のMAは、同じバッファ番号同士を結ぶだけでは表示時刻が一致しません
共通シフトを決め、各MAの値を同じ横位置へ再配置してからDRAW_FILLINGで塗ります -
【移植#27】OCO両建て注文の状態遷移を可視化する — 実注文なしでキャンセル順序を検証
基準価格の上に買い逆指値、下に売り逆指値を置いたOCO状態をチャートで再現します
片側へ到達したら反対側ラインを消し、同一バーで両方へ到達した場合は曖昧状態として分けます -
【移植#26】バッドティック候補を異常ヒゲから探す — 中央値TRで要確認バーを絞る
過去50本のTrue Range中央値を基準に、2倍以上の上ヒゲ・下ヒゲを要確認候補として表示します
EURUSD・1時間足の直近1000本では上ヒゲ2件、下ヒゲ2件、最大2.55倍を検出しました -
【移植#25】RSIの平均方法を選べるようにする — SMA・EMA・SMMA・LWMAと確定MTF
RSI内部の値上がり幅・値下がり幅を、SMA・EMA・SMMA・LWMAの4方式から選べます
シグナル線を追加し、MTFでは確定済みの上位足だけを下位足へ表示します -
【移植#24】LWMA版MACDのクロスをチャートへ表示する — 確定足だけに矢印を出す
12期間LWMAと26期間LWMAの差をMACD本線とし、9期間LWMAのシグナル線とのクロスを検出します
形成中の0番バーを除外し、確定したバーだけへ上向き・下向き矢印を表示します -
【移植#23】チャートの窓幅をpipsで測る — 前足終値と次足始値の差を可視化
前足の終値と次足の始値を比較し、上窓と下窓をpips単位で表示します
直近1000本で上窓16件・下窓4件を検査し、最大13.7pipsの差を確認しました -
【移植#22】ダブルゼロを価格タグで意識する — 水平線を増やさず節目を表示
末尾にゼロが並ぶ価格を、チャートを横切る水平線ではなく右端の価格タグで表示します
3桁・5桁銘柄の1pipを補正し、表示間隔をpips単位で指定できるMQL5版にしました -
【移植#21】平均足をサブウィンドウへ描く — 背景色で隠さずDRAW_COLOR_CANDLESで表示
MQL4で背景色の棒を重ねていた表示を、MQL5の
DRAW_COLOR_CANDLESへ置き換えました
平均足の始値・高値・安値・終値と色番号を、合計5本のバッファでサブウィンドウへ描きます -
【移植#20】MAの間に雲を描く — DRAW_FILLINGで上昇・下降を塗り分ける
12EMAと26EMAの間を塗り、短期が上なら赤、下なら青の雲として表示します
MQL4のペアになったDRAW_HISTOGRAMを、MQL5専用のDRAW_FILLINGへ置き換えました -
【移植#19】オシレーター通知 — Slow StochasticクロスとWilliams %R到達を確定足で知らせる
Slow Stochasticは%Kと%Dのクロス、Williams %Rは-20/-80の外側へ入った瞬間を検出します
形成中の足では通知せず、確定した足を新しく認識したときに一度だけポップアップと音を出します -
【移植#18】FirstとPrevious — インジケータの参照順をMQL5で可視化
Firstは最初、Previousは直前のインジケータを参照。
5・10・20・30LWMAの配置順で参照先を実測します。 -
【移植#17】CSVスナップショット出力 — MT5の過去バーをExcelへ定期連携
直近OHLCVを、古い順・重複なしのCSVへ定期更新。
Excelへ渡しやすいスナップショット式を実MT5で検証します。 -
【移植#16】ゼロライン中央固定MACD — 不可視バッファで自動スケールを上下対称にする
最大絶対値の正負を不可視線として追加し、ゼロを中央へ固定。
MACDの値を変えずに、MT5の自動スケールだけを上下対称にします。 -
【移植#15】SMA基準とEMA基準のボリンジャーバンド — 中心線の違いをMT5で比較
共通の標準偏差を使い、中心線だけをSMAとEMAで切り替えて比較。
反応速度の差が上下バンドへどう現れるかを実チャートで確かめます。 -
【移植#14】3本HMA判定 — 色・エントリー・決済をMQL5で1本化
MQL4では4本に分かれた3本HMAと判定を1ファイルへ統合。
黄色の意味を定義し直し、確定足と反転時の決済も整理します。 -
【移植#13】OnChart RCI — 同値の順位問題をMQL5で解き直す
5種類のRCIが一致しなかった同値順位の問題を再検証。
平均順位と旧版互換を切り替え、確定足でMA周辺へ表示します。 -
【移植#12】SMMA=2×EMA−1?— 期間換算をMT5で確かめる
SMMA(N)とEMA(2N−1)の平滑化係数を数式で確認。
実MT5で2本を重ね、最新差と直近500本の最大差を表示します。 -
【移植#11】ADX2Pairs — 2通貨のADXでクロス円の動き出しを探す
USDJPY・AUDUSD・AUDJPYのWilder式ADXを時刻同期。
構成通貨の強さと、3通貨のADXが同時に上向く場面をAUDJPY上へ表示します。 -
【移植#10】AllAverages v2.5 — 21種の移動平均を詰め込んだ名作をMT5で
2009年に公開された伝説的インジケータ「AllAverages_v2.5」の全ロジックをMQL5に完全移植。SMA, EMAからT3, Jurik, Hull Moving Averageまで、全21種類のMAを網羅。
-
【移植#09】OnChartオシレータ — メインチャートにRSIを重ねて表示する
メインチャートの移動平均とATRを利用して生成したバンド内にRSIやStochasticをマッピング。
視線の移動なく過熱感とボラティリティを把握可能。 -
現在表示しているチャートの上に、別の通貨ペアのチャート(ローソク足やライン)を重ねて表示。
時間軸の同期処理により、正確な相関関係を把握可能。 -
価格の変動幅ではなく、「時間の経過幅」に着目。
転換線や雲のクロスが発生してから「何本経過したか」をヒストグラム化。 -
【移植#06】三角裁定トレンド判定 — 合成通貨の歪みを狙う
USDJPY, GBPUSD, GBPJPY の3通貨ペアのレートから「理論的なGBPJPY」を計算。
実際のレートとの乖離(歪み)からトレンド発生を早期に検知。 -
【移植#05】BB-Fibo — ボリンジャーバンド × フィボナッチ
ボリンジャーバンドの標準偏差(σ)の代わりに、ATRにフィボナッチ係数を掛けたバンドを描画。
相場のボラティリティ伸縮を美しく捉える。 -
通常のタイムチャートではなく、Tick(約定)ベースのチャートをサブウィンドウに生成。
さらにTickデータに対して移動平均線(MA)を適用。 -
【移植#03】JPN_Time_SubZero — 日本時間グリッド + 未来予測
MT5のチャートに日本時間を表示し、さらに「未来の時間」にもグリッド線を描画。
サイクル分析や目標時間の予測に必須のツール。 -
【移植#02】SwingPoint View — 直近の高値/安値を可視化
ZigZag的な高値・安値を検出し、その価格と発生時刻をチャート上に表示。
ダウ理論に基づくトレンド判定の補助に。 -
【移植#01】一目三役好転インジケータ — 強い売買シグナルを検出
一目均衡表の「三役好転/三役逆転」を自動検出。
基準線・転換線のクロス、遅行スパン、雲の位置関係を判定。
MQL4→MQL5 移植のポイント¶
MQL4からMQL5への移植で特に注意が必要な点:
| 項目 | MQL4 | MQL5 |
|---|---|---|
| インジケータ呼び出し | iMA(..., shift) | iMA(...) でハンドル取得後、CopyBuffer() |
| 注文処理 | OrderSend() | CTradeクラスを使用 |
| 配列の方向 | 時系列がデフォルト | ArraySetAsSeries()で明示的に指定 |
| エラー処理 | GetLastError() | 同じだが、ResetLastError()との併用推奨 |
元ネタについて¶
とあるMetaTraderの備忘秘録
2009年〜2013年に活動されていたMQL4の技術ブログ。 膨大な量のTips、インジケータ、EAが公開されており、今なお参考になる内容が多数あります。
関連用語¶
- 用語集 - 移動平均
- 用語集 - SMA
- 用語集 - EMA
- 用語集 - T3
- 用語集 - RSI
- 用語集 - ATR
- 用語集 - ボラティリティ
- 用語集 - 時間論
- 用語集 - 三角裁定
- 用語集 - 合成通貨
- 用語集 - フィボナッチ
- 用語集 - Tick
- 用語集 - サイクル分析
- 用語集 - 三役好転
- 用語集 - 一目均衡表
- 用語集 - 三役逆転
- 用語集 - CopyBuffer
- 用語集 - CTrade
- 用語集 - ArraySetAsSeries


