Skrip atau strategi memberikan hasil yang berbeda setelah menyegarkan halaman (repaint)

Data historis tidak mencakup catatan pergerakan harga secara intra-bar; hanya pembukaan, tertinggi, terendah dan penutupan (OHLC). Ini menyebabkan sebuah skrip terkadang berkerja secara berbeda pada data historis dan secara real-time, dimana hanya harga pembukaan yang diketahui dan kemana harga umumnya akan bergerak beberapa kali sebelum nilai final tertinggi, terendah dan penutupan tercatat setelah bar real-time tersebut tertutup.

Jika kita menambahkan sebuah skrip pada chart, tunggulah hingga skrip tersebut mengkalkulasikan sejumlah bar real-time lalu muat ulang halamannya, maka terkadang kita akan melihat adanya sedikit perubahan dari plot skrip tersebut. Perilaku ini adalah satu dari beberapa tipe perilaku yang umumnya dikenal sebagai repaint indikator. Ini adalah sebuah tipe dari repaint yang menjadi perhatian kami disini dan kami akan menganjurkan saat untuk menggunakan repaint tersebut. Ini disebabkan oleh fakta bahwa saat beberapa fitur tertentu digunakan didalam skrip maka kalkulasinya akan jauh berbeda antara bar histori dengan real-time nya.

Tipe perilaku lainnya yang dikategorikan sebagai repaint mencakup plotting dengan offset negatif pada bar sebelumnya dan menggunakan informasi masa mendatang yang belum tersedia melalui panggilan yang tidak sesuai terhadap sebuah fungsi security, yang dapat menambahkan ketidak tersediaan data real-time kedalam kalkulasi skrip

Tidak semua indikator akan mengalami repaint sebagaimana yang kita diskusikan disini. Dalam sebagian kasus ini akan tergantung pada ada atau tidaknya suatu fungsi atau susunan bahasa tertentu yang digunakan untuk menyusun kodenya. Harap dicatat bahwa efek repain ini bukanlah sebuah bug; melainkan sebagai hasil dari perbedaan mendasar antara bar histori dan informasi bar real-time di TradingView.

Kita dapat menemukan repaint dalam kasus-kasus berikut ini:

1. Strategi yang menggunakan calc_on_every_tick=true. Sebuah strategi dengan parameter calc_on_every_tick = false juga dapat mengalami repaint, namun lebih minimal.

2. Menggunakan security untuk meminta data dari reolusi yang lebih tinggi dari resolusi simbol utama chart:

// Add this study on 1 minute chart
//@version=4
study("My Script")
c = security(syminfo.tickerid, "5", close)
plot(close)
plot(c, color=color.red)

Studi ini akan melakukan kalkulasi yang sangat berbeda pada data real-time dan histori, tidak tergantung pada nilai parameter lookahead (lihat Memahami lookahead).

3. Menggunakan security untuk meminta data dari resolusi yang lebih rendah dari resolusi simbol utama chart (info lebih lanjut disini):

// 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)

Jika lookahead=false, repaint akan terjadi. Saat lookahead=true, kemungkinan repaint akan berkurang namun tetap dapat terjadi saat update 1 dan 5 menit saling overlap.

4. Seluruh skrip yang kalkulasinya bergantung pada sebuah titik mula. Data intrahari akan disejajarkan dengan awal dari minggu, bulan atau tahun tergantung dari resolusinya. Oleh karenanya, hasil yang dikeluarkan oleh skrip yang demikian dapat berbeda dari waktu ke waktu. Kasus-Kasus dimana skrip akan mengandalkan sebuah titik mula:

  • saat skrip tersebut menggunakan fungsi valuewhen, barssince atau ema (dikarenakan ciri khas dalam algoritmanya)
  • seluruh strategi backtesting (terlepas dari bagaimana parameter calc_on_every_tick didefinisikan)

Terdapat ketergantungan antara resolusi dan penyelarasan titik mula:

  • 1–14 menit — sejajar dengan awal minggu
  • 15–29 menit — sejajar dengan awal bulan
  • dari 30 menit keatas — sejajar dengan awal tahun

Limitasi panjang histori berikut juga diperhitungkan saat memproses datanya:

  • 40.000 bar historis untuk skema Ultimate 
  • 30.000 bar historis untuk skema Elite
  • 25.000 bar historis untuk skema Expert
  • 20.000 bar historis untuk skema Premium
  • 10.000 bar historis untuk skema Pro dan Pro+
  • 5000 bar historis untuk skema lainnya

5. Perubahan dalam data histori, sebagai contoh, saat terjadi split.

6. Hadirnya variabel-variabel berikut ini didalam skrip biasanya mengarah pada terjadinya repaint: