ストラテジーのアラートのトリガーとチャート上の注文が一致しない主な理由
以下のストラテジーの機能を使用している場合、リアルタイムと過去データでの検証時で、注文の約定に差異(いわゆるリペイント)が生じる可能性があります。
その結果、ストラテジーのアラートのトリガーと、チャート上に表示される注文の位置が一致しなくなります。
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) に記載されているように、値動きを仮定して計算します。
この「実際の値動き」と「推定された値動き」の違いにより、トレーリング注文はリアルタイムと過去データで異なる価格で約定する可能性があります。
これが結果として、アラートとチャート上でのストラテジー計算結果の不一致につながります。