ストラテジーのアラートのトリガーとチャート上の注文が一致しない主な理由

以下のストラテジーの機能を使用している場合、リアルタイムと過去データでの検証時で、注文の約定に差異(いわゆるリペイント)が生じる可能性があります。

その結果、ストラテジーのアラートのトリガーと、チャート上に表示される注文の位置が一致しなくなります。

1) calc_on_every_tick(ティックごとに再計算)のオプションを有効にしている場合

このオプションが無効な場合、ストラテジーはリアルタイム・過去データの双方において、各バーの確定(クローズ)時に1回だけ計算されます。

一方、このオプションが有効になっている場合、リアルタイムではバー形成中の各ティックごとに再計算が行われます。

このような「バー形成中の再計算」により、過去データでの計算時には発生しなかった追加の注文が発注・約定される可能性があります。これが、アラートとチャート上でストラテジーの計算結果に差異が生じる原因となります。

2) calc_on_order_fills(注文が約定した後に再計算)のオプションを有効にしている場合

このオプションが有効な場合、バーの形成中に注文が約定すると、その時点でのOHLCでストラテジーが再計算されます。

しかし、バーが確定した後にページを更新した場合、ストラテジーは同様に注文の約定時に再計算されますが、今度はバーの確定時点でのOHLCに基づいて計算が行われます。これは通常、過去のバーにおける再計算では、バー内の価格変動に関する情報は存在しないためです。

そのため、リアルタイムと過去データでは注文が異なるタイミングで実行される可能性があり、アラートとチャート上のストラテジーの計算結果が一致しないことがあります。

3) トレーリング注文を使用する場合

トレーリング注文の約定価格は、バー内の価格変動と trail_offset パラメーターに依存します。

リアルタイムでは、価格はバー内で不規則に変動します。つまり、価格は何度も上昇と下降を繰り返します。しかし、過去データでの計算時には、バー内部の実際の値動きに関する情報は利用できません。そのためサーバーは、こちらの記事 (https://www.tradingview.com/pine-script-docs/v5/concepts/strategies/#broker-emulator) に記載されているように、値動きを仮定して計算します。

この「実際の値動き」と「推定された値動き」の違いにより、トレーリング注文はリアルタイムと過去データで異なる価格で約定する可能性があります。

これが結果として、アラートとチャート上でのストラテジー計算結果の不一致につながります。