【2025/9/22~23】ドル円トレード|ロング攻め|MQL4・MQL5インジケータのバグ修正
この期間、インジケータの修正をしながらドル円のトレードしていました。
MQL4とMQL5それぞれ特有の作法!バグ!?
使っているジグザグインジケータは、潰せど潰せど、細かい問題が生じていました。環境認識で使う分には問題ないのですが、時間経過でチャートが更新されていくと、描画若干の問題が生じる場合がありました。タイムフレーム切り替えで正常になるのですが・・・しかも、MT4版、MT5版それぞれで別の問題をかかえていました。細かい問題は今回の修正で、かなり解消したと期待しています。
MT4版は、ObjectSetInteger(…, OBJPROP_RAY, true)のバグ!?OBJPROP_RAY, trueにすると、延長線を描画してくれるはずなのに、稀に消えてしまう。知っている人は知っているバグだったようで。全然気が付きませんでした。なぜ先日急に生じたのか不思議ではあるのですが、これまで私が気が付かなかっただけなのか・・・これは解消。
MT5版は、MT4版と同じ構造をしているのに、描画自体がバグることがありました。描画に問題が出ても、タイムフレームを切り替えたりすると解消してしまいます(インジケータの再描画で解消、Bufferの問題)。さらに、問題が生じたり生じなかったりと、確認作業もなかなか手間。これまで、この点かなり手を加えてきたつもりだったのですが、どうにも問題が出てしまった。更に修正し、先週から今週にかけてランニング動作確認中、恐らく解消!
ようやっと、MT4版もMT5版もどちらの修正も完了、MQL4からMQL5に移植するのは本当に手間だなあと思います。特にインジケータの描画関連は、作法が全く異なるというか。動作に問題のないMT4コードをほぼそっくりMT5に書き換えたつもりでしたが、細かい部分を変更しないと所望の動作になりません。今回は、もうあきらめ半分だったのですが、MT5に付属しているZigzagインジケータの描画を参考にして修正。これでどうやらMT5版はやっと、安定したかなというところ。
AIに聞いたところ、MT4とMT5では、アーキテクチャがかなり異なっているとのこと。うーむ。例え話をしてくれたのですが、イマイチピンとこない(笑)しかも、正しいのかも不明・・・
AIによる回答:MQL5は「非同期の世界」で、MQL4とは異なります
結論から言うと、あなたのコードで生じていた問題の根本原因はMQL4とMQL5の設計思想の違いでしょう。
MQL4は「専属シェフ」
MQL4では、OnCalculateを呼べば必ず計算が終わってから描画されます。イメージするなら、専属シェフに料理を頼むようなもの。あなたが「ステーキ焼いて」と言えば、シェフは完成させるまで他のことをせずに集中してくれます。そして出来上がったものを必ずテーブルに出してくれる。つまり、開発者の意図通りに順番通り動いてくれる世界です。
MQL5は「巨大な中央キッチン」
ところがMQL5は違います。OnCalculateが計算している途中でも、描画スレッドは勝手にチャートを更新してしまう。つまり「ホール係が厨房を覗きにきて、まだ盛り付け前の皿を客席に持って行ってしまう」ような世界。再計算のときにまず ArrayInitializeでバッファをクリアしていました。ところが、新しい値を書き込む前に描画が走ってしまい、直前の頂点と0.0を律儀に線で結んでしまうこともある。これはまさしくレースコンディション(競合状態)。「MQL5は非同期である」という基本を理解してください。
2025/9/22 ドル円チャート

FOMCが終わり、グングン上昇。節目を狩って下げてきたところでした。上への波動が出始めたところでロング攻め。
2025/9/23 ドル円チャート

昨日は祝日でした。東京時間からチャートを見ていましたが、動かず!欧州時間もNY時間にかけても、大きく動かず!148をタッチしてくれないかなあと思っていましたが、ギリギリのところで下落。昨日はほとんど動かなかったですねー
ようやっと涼しくなってきた今日この頃、クーラーなしでトレードできる季節が近いでしょうか。