マルチタイムフレームは気をつけないとリペイント処理されてしまう
トレーディングビューでマルチタイムフレームのPINEスクリプトを書くと以下のようなコードとなる。
plot(security(syminfo.tickerid, "60", sma(close, 10)), color=color.blue, offset=0, linewidth=3)
このコードのままだと、
どーやらリペイントというものが発生していて、先読みしてしまうことで、ローソク足が確定する前の情報をよんで描画してしまうという現象が起きる。
初回の読み込み時は問題ないけど、、、ずーっと表示してると、チャートがグチャグチャになってしまうので、、、まともに使えないやんってことになる。
また、ストラテジーのコードを書くとこの先読みのリペイント現象が発生してしまうことでめちゃくちゃ利益でそうなものがかけてしまう。マルチタイムフレームを使ったストラテジーには気をつけないと…ほんと、騙されてしまう。でも、tradingviewでは、こういったリペイント処理されちゃってるコードが多いのも事実です
security()は、Pineスクリプトで使用できる、高い時間枠からデータを取得するための関数です。これにより、低い時間枠のチャートに高い時間枠のデータを表示することができます。security()関数を正しく使用することで、リペイントを回避し、正確なバックテスト結果を得ることができます。リペイントは、インジケータがリアルタイムバーで結果が変化することを示し、バックテスト結果が無効になる可能性があるため、回避する必要があります。
=>過去の記事
ここで掲載した及川式のPINESCRIPTはリペイントしちゃってるので(汗)、
及川式 天才チャートをtradingviewで再現する方法!
及川式の天才チャートがMT4で公開さているのに、 わざわざトレーディングビュー(TradingView)で 表示する必要があるのか? なーんて思うかもしれないけど 常にMT4の画面が見れるわけじゃない。 気軽にどこでも天才チャートを確認した...
リペイントなしにしたい場合は、次に紹介するコードを参考に修正してください。
トレーディングビューでのリペイントを防ぐ方法
リペイントを防ぐ方法としては、security関数にオプションつけて実行するだけでOKのようだ。
f_secureSecurity(_symbol, _res, _src) => security(_symbol, _res, _src[1], lookahead = barmerge.lookahead_on)
plot(f_secureSecurity(syminfo.tickerid, "60", sma(close, 10)), color=color.blue, offset=0, linewidth=3)
参考にした情報
How to avoid repainting when using security() - PineCoders FAQ — PineCoders作成のインジケーター — TradingView
ここでは、いろいろなリペイントする、しないの比較が一括でできるpinescriptが掲載されており参考になる。f_secureSecurityを使うやり方が一番シンプルで簡単なやり方となるようです。
それにしても、、、これだけ違いがでるのかぁ・・・。