最近、というか直感的に感じていたのですが、JForexは過去のデータや終値が微妙な感じで修正される時があります。
今回は私が気づいた、自動売買のプログラミングをする時に気をつけなくてはいけないJForexのバグ!?特徴!?を説明したいと思います。
リアルタイム・ティック値で値動きを記録してみました。
以下はドル円の5分足での1本前の終値です。
<3月9日UTC>
00:00:01 114.415
00:00:01 114.415←修正が起きている
00:00:00 114.412
00:00:00 114.412
00:00:00 114.412
00:00:00 114.412
23:59:59 114.394<3月8日UTC>
16:40:00 114.639
16:40:00 114.639←修正が起きている
16:40:00 114.635
16:39:59 114.631
16:39:59 114.631
16:39:59 114.631
3月9日UTCの終値の動きを説明すると、
23:59:59(3月8日)まで 114.394の終値を付けています。
これは、23:55:00につけた終値ですね。
次に00:00:00(3月9日)に114.412の終値を付けました。
ところが、その後00:00:01に修正が起こり、114.415の終値に変更になりました。
これは細かいところですが、凄く気をつけなくてはいけないところです。
なぜなら、自動売買のシステムは114.412の値に反応して動くからです。
ある意味これは自動売買をする時にJForexに潜むリスクと言っていいかもしれません
こういうことが実はJForexでは頻繁に起こっています。
なぜこれが起こっているのか考えてみました。
多分、終値ができるタイミング付近で、デューカスコピー側に保留注文があると注文成立後に修正があり得る
これは予想でしかないのですが、多分、終値ができるタイミング付近で、デューカスコピーに保留注文があると注文成立後に修正があり得るということではないかと予測しています。
例えば、先ほどの例で言えば、終値ができるタイミングが00:00:00でした。
この時(00:00:00)に、一旦JForexは114.412を作成します。
↓
ですが、保留注文が00:00:00が存在していました。
↓
そして、その注文が00:00:01に成立。114.639に終値が修正されます。
これはあくまで仮説ですがこういうことが中で起こっているのではないかと考えられます。
ちなみにこの現象は00:00:00など、時間足、30分足、5分足などの終値が作られ、注文が多く生まれそうな時ほど発生確率が高い気がします。
対策1:「価格データの履歴が抜け落ちることを避けるため、全てのティックを処理する」に設定
これはJForexのアドバンスト設定で設定できます。ティックの配信の速度が落ちようが、自動売買の場合、正しい、終値、始値が必要だと思います。
テクニカルのデータをティック値とっても、「更新の遅れを避けるために古いティックをスキップをする」とは微妙な違いが生まれます。
ちなみに、過去のデータもテクニカルデータの流れをみていると修正される時があります。
ですから、できるだけ正確な値を取るため、自動売買をするなら、「価格データの履歴が抜け落ちることを避けるため、全てのティックを処理する」に設定するべきだと思います。
対策2:リアルタイムのティック値での判断を自動売買でパラメーターに含めないほうが良いかもしれません
過去データの終値が不安定ならば、リアルタイムのティック値はもっと不安定な印象を受けます。
昔、リアルタイムのティック値を含めてプログラムを組んでいたら、多分、上手くデータが取れずに、例外が発生した場合がありました。
(これは私の書き方が悪かった可能性もあります)
もしかしたら、あれはティック値の歯抜けなのかもしれません。
ですから、リアルタイムのティック値で判断する場合は、ある程度のリスクがそこに含まれるということを覚悟したほうが良いかもしれませんね。
いずれにしても、新たな検証が今後も必要だなと思った次第でございます^^
また何かありましたら報告いたしますね♪
管理人オリジナルJForexツールが貰える!デュカースコピーキャンペーンについてはこちらから