インジケーターのリペイント

From TradingView Wiki
Jump to: navigation, search
Language: English  • 日本語 • Русский

ヒストリカルデータには、バーの中の価格の動きは含まれません。この事がリアルタイムデータとヒストリカルデータで、スクリプトの動作に違いを引き起こします。スクリプトをチャートに追加して、多くのバーが表示されるのを待ってから、その後ページをリロードすることで、この違いを確認することができます。この特性は、インジケーターのリペイントと呼ばれます。これが発生する理由にはいくつかあります。

次のケースでリペイントを確認できます。

1. ストラテジーでパラメーター calc_on_every_ticktrue に設定する。ストラテジーで calc_on_every_tick = false にパラメーターを設定した場合でも、ストラテジーの計算開始地点が未来に移動する(分足で週に1度)関係から、(頻度は少ないですが)リペイントが発生する事があります。

2. security 関数を使用して、チャートの時間足よりも大きい時間足のデータを要求した場合。

// Add this study on 1 minute chart
//@version=3
study("My Script")
c = security(tickerid, "5", close, lookahead=false) // 'lookahead=true' also causes the 'repainting problem'
plot(close)
plot(c, color=red)

この様なインジケーターは、lookahead パラメーター(詳細は、先読みの理解をご確認下さい)の利用に関わらず、リアルタイムデータとヒストリカルデータで異なる計算が行われます。

3. security 関数を使用して、チャートの時間足よりも小さい時間足のデータを要求した場合。

// Add this study on 5 minute chart
//@version=3
study("My Script")
c = security(tickerid, "1", close, lookahead=false)
plot(close)
plot(c, color=red)
  • このケースでは、チャートの時間軸を伸ばさない限り、1分足のデータを5分足チャートで表示することは不可能な為、分足データの一部が必然的に失われます。
  • lookahead=false の場合にはリペイントが起こりえます。lookahead=true の時はリペイントは起こりません(例外があります。1分足と5分足の更新タイミングが前後する場合に、稀にスクリプトがリペイントされる可能性があります)。

(Lookahead は、バーのどの部分を表示するか(最初または最後)を決定するパラメーターです。詳細は先読みの理解を確認してください)

4. すべてのスクリプトの計算結果は開始地点に依存します。イントラデイデータは、時間足により週/月/年の始めで調整されます。その為、そういったスクリプトで生成される結果は時々異なる可能性があります。こちらは開始地点に依存するスクリプトの例です。

  • あらゆるバックテストストラテジー

調整位置と時間足には次の依存関係があります。

  • 1-14分 - 週の初めに合わせます
  • 15-29分 - 月の初めに合わせます
  • 30分以上 - 年の始めに合わせます

データ処理の際には、次の履歴の長さの制限が考慮されます:

  • すべてのProプランで10,000ヒストリカルバー
  • Proプラン以外のユーザーは5000本のヒストリカルバー

5. 株式分割などによるヒストリカルデータ自体の変更。

6. スクリプトで以下の変数を利用している場合。

  • barstate.isconfirmed, barstate.isfirst, barstate.ishistory, barstate.islast, barstate.isnew, barstate.isrealtime
  • timenow
  • n

前の項目: ハウツー, 次の項目: Pineのコンパイルエラー, メニューに戻る: Pineスクリプトチュートリアル