【開発の裏側㉟】同じ足が2回入っていた。MT5で出なかったのは、別の不具合に隠されていたからでした

【開発の裏側㉟】同じ足が2回入っていた。MT5で出なかったのは、別の不具合に隠されていたからでした

記事
IT・テクノロジー
どうも、FXトレーダー兼システムエンジニアのナオトです。

自分の開発用に使っているインジケーターの話です。
1分足を集めてファイルに書き出し、別のプログラムがそれを読む、という裏方の道具です。MT4版とMT5版があります。



ある日、書き出したファイルの中身を、外から1本ずつ確かめてみました。
すると、MT4版のデータに、まったく同じ足が2回入っているところが4か所ありました。時刻も、始値も高値も安値も終値も同じです。直近の4分ぶんでした。



原因は、確定した1分足を追加する道が、2本あったことです。

1本は、値動きが来るたびに呼ばれる処理の中で、足が確定したら追加する道。
もう1本は、タイマーで定期的に呼ばれる処理の中で、確定した足を数えて追加する道です。

チャートを1分足で表示していると、この2本が同じ足を両方とも積んでいました。
直し方は、追加する前に、いちばん新しい足の時刻と比べて、同じかそれより古ければ積まない、という見張りを両方の道に入れることでした。



気になったのは、同じ作りのMT5版では、重複が出ていなかったことです。

調べると、MT5版ではためておく足の数が上限の5万本に達していて、タイマー側の追加の処理が、上限に達したら抜ける、という1行で丸ごと飛ばされていました。
タイマー側が動いていないので、重複も起きない。重複が出なかったのは、偶然でした。



しかも、その1行そのものが、2つ目の不具合でした。

ためておく足は、古いものから押し出す作りなので、上限に達しても新しい足を積み続けられるはずです。
ところが、上限で抜けてしまうので、5万本に達した時点で、タイマー側の新しい足の取り込みが止まっていました。

1つ目の直しで重複の見張りを入れたので、この1行は安心して消せました。



2つの不具合が、互いを隠していたわけです。
MT4では重複が出て、MT5ではタイマー側の取り込みが止まる。同じ作りなのに、表に出る症状が違いました。

この件で見つけられたのは、書き出したファイルを、外から1本ずつ確かめたからです。
画面の表示が正しく見えても、中身が正しいとは限りません。

インジケーターやEAの点検と作り直しのご依頼も受けています。


最後までお読みいただき、ありがとうございました。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す