สคริปต์หรือกลยุทธ์ให้ผลลัพธ์ที่แตกต่างกันหลังจากรีเฟรชหน้าจอใหม่ (รีเพ้นท์ติ้ง)

ข้อมูลในอดีตไม่ได้รวมข้อมูลการเคลื่อนไหวของราคาภายในวันเอาไว้ แต่มีเฉพาะราคาเปิด สูง ต่ำ และปิด (OHLC) เท่านั้น นี่ยังผลให้บางครั้งสคริปต์สามารถทำงานและให้ผลลัพธ์ที่แตกต่างออกไปเมื่อทำงานบนบข้อมูลในอดีตและทำงานบนข้อมูลเรียลไทม์ ในที่ซึ่งเราทราบเฉพาะราคาเปิดเท่านั้น และราคาจะมีการเคลื่อนไหวหลายๆ ครั้งก่อนที่ในที่สุดราคาจะสร้างจุดสูงสุด ราคาต่ำสุด และราคาปิดจะถูกกำหนดหลังจากแท่งเรียลไทม์ได้ปิดลง

หากเราเพิ่มสคริปต์ลงในชาร์ตและรอจนกว่าจะคำนวณในแท่งเรียลไทม์จำนวนหนึ่งแล้วจึงโหลดหน้าเว็บอีกครั้ง บางครั้งเราจะเห็นการพล็อตของสคริปต์เปลี่ยนแปลงเล็กน้อย พฤติกรรมนี้เป็นหนึ่งในพฤติกรรมที่แตกต่างกันสองสามประเภทที่มักเรียกกันว่า อินดิเคเตอร์รีเพ้นท์ติ้ง มันเป็นประเภทของรีเพ้นท์ติ้ง ที่เกี่ยวข้องกับเราที่เราจะอ้างอิงถึงเมื่อใช้คำว่า รีเพ้นท์ติ้ง มันเป็นเพราะความจริงที่ว่าเมื่อมีการใช้ฟีเจอร์บางอย่างในสคริปต์ มันจะคำนวณแตกต่างกันบนแท่งข้อมูลในอดีตและแท่งแบบเรียลไทม์

อีกประเภทหนึ่งของพฤติกรรมที่หมายถึงถึงรีเพ้นท์ติ้งอย่างถูกต้องหรืออาจจะไม่ถูกต้องนั่นคือ การพล็อตโดยใช้การชดเชยเชิงลบลงบนแท่งที่ผ่านมาและใช้ข้อมูลในอนาคตที่ไม่ได้อยู่ผ่านจากการเรียกใช้ฟังก์ชัน security ซึ่งสามารถนำข้อมูลที่ไม่มีอยู่จริงในข้อมูลเรียลไทม์ไปใช้ในการคำนวณ

ไม่ใช่อินดิเคเตอร์ทุกตัวที่ได้รับผลกระทบจากถึงรีเพ้นท์ติ้งประเภทที่เราพูดถึงกันในที่นี้ ในกรณีส่วนใหญ่แล้วมันขึ้นอยู่กับว่าฟังก์ชั่นบางอย่างหรือโครงสร้างภาษาบางอย่างถูกใช้ในการโค้ดดิ้งหรือไม่ โปรดทราบว่าเอฟเฟกต์การถึงรีเพ้นท์ติ้งนี้ไม่ใช่ข้อผิดพลาด มันเป็นผลมาจากความแตกต่างโดยธรรมชาติระหว่างการทำงานของแท่งในอดีตกับข้อมูลแท่งเรียลไทม์บน TradingView

เราจะเห็นการรีเพ้นท์ติ้งในกรณีต่อไปนี้:

1. กลยุทธ์มีการใช้ calc_on_every_tick=true กลยุทธ์ที่มีพารามิเตอร์ calc_on_every_tick=false อาจมีแนวโน้มที่จะมีการรีเพ้นท์ติ้ง แต่ในระดับที่น้อยกว่า

2. การใช้ security สำหรับการร้องขอข้อมูลจากกรอบเวลาที่ใหญ่กว่ากรอบเวลาของสัญลักษณ์หลักของชาร์ต:

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

การศึกษานี้จะคำนวณแตกต่างกันตามข้อมูลเรียลไทม์และข้อมูลในอดีตโดยไม่คำนึงถึงค่าของพารามิเตอร์ lookahead (ดู Understanding 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)

หาก lookahead=false การรีเพ้นท์ติ้งจะเกิดขึ้น เมื่อ lookahead=true การรีเพ้นท์ติ้งอาจเป็นไปได้น้อย แต่ทว่ามันอาจจะยังคงเกิดขึ้นเมื่อมีการการอัปเดตระหว่าง 1 นาที และ 5 นาทีซึ่งกันและกัน

4. สคริปต์ทั้งหมดที่คำนวณขึ้นอยู่กับจุดเริ่มต้นของกรอบเวลา ข้อมูลภายในวันจะได้รับการจัดให้ชิดกับจุดเริ่มต้นของสัปดาห์ เดือน หรือปี ขึ้นอยู่กับกรอบเวลา ด้วยเหตุนี้ผลลัพธ์ที่สร้างโดยสคริปต์ดังกล่าวอาจแตกต่างกันเป็นครั้งคราว กรณีเหล่านี้คือกรณีที่สคริปต์จะต้องพึ่งพาจุดเริ่มต้น:

  • เมื่อมันมีการใช้ฟังก์ชั่น  valuewhenbarssince หรือ ema (เนื่องจากคุณสมบัติที่ผิดปกติในอัลกอริทึม)
  • กลยุทธ์การทดสอบย้อนหลังใด ๆ (ไม่ว่าจะกำหนดพารามิเตอร์ calc_on_every_tick ไว้อย่างไร)

มีการอ้างอิงพึ่งพาระหว่างกรอบเวลาและการจัดตำแหน่งของจุดเริ่มต้น:

  • 1–14 นาที — จัดชิดกับจุดเริ่มต้นของสัปดาห์
  • 15–29 นาที — จัดเรียงกับจุดเริ่มต้นของเดือน
  • ตั้งแต่ 30 นาทีขึ้นไป — ปรับให้เข้ากับต้นปี

ข้อจำกัดของความยาวแท่งในอดีตต่อไปนี้ถูกนำมาพิจารณาเมื่อประมวลผลข้อมูล:

  • 10,000 แท่งในอดีตสำหรับแผนการใช้งาน Pro ทั้งหมด (Pro, Pro+ และ Premium)
  • 5000 แท่งในอดีตสำหรับแผนการใช้งานอื่น ๆ

5. การเปลี่ยนแปลงข้อมูลในอดีต ตัวอย่างเช่นเนื่องจาก การแยกข้อมูล

6. การมีตัวแปรต่อไปนี้ในสคริปต์มักนำไปสู่การรีเพ้นท์ติ้ง: