MQL移植シリーズ¶
このシリーズについて
「とあるMetaTraderの備忘秘録」様の記事を投稿日順にたどり、MQL4コードはMQL5へ移植し、文章で示された技術アイデアは検証可能なインジケータへ再構成するシリーズです。
単なる移植ではなく、なぜそのロジックが有効なのか、MQL5での実装のポイントを詳しく解説します。
記事一覧¶
-
【移植#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


