Pine Script में Bar Close बनाम Intrabar: रीपेंटिंग, अलर्ट और calc_on_every_tick
3 मिनट में पढ़ें · अपडेट:
जो Pine Script हिस्ट्री पर साफ़ दिखती है, वह लाइव ऐसे सिग्नल दे सकती है जो बाद में ग़ायब हो जाते हैं। लगभग हर मामला एक सवाल पर आता है: क्या स्क्रिप्ट बंद हो चुके बार पर काम कर रही है या उस बार पर जो अभी बन रहा है?
यह गाइड इसे नियंत्रित करने वाली हर सेटिंग और लेवल अलर्ट के लिए मेरे इस्तेमाल को बताती है।
हिस्टोरिकल बार और रियलटाइम बार
हिस्ट्री पर Pine आपकी स्क्रिप्ट हर बार के क्लोज़ पर एक बार चलाता है। लाइव बार पर यह हर प्राइस अपडेट पर दोबारा चलती है। close > level जैसी शर्त 10:01 पर सही, 10:03 पर ग़लत और 10:04 पर फिर सही हो सकती है। हिस्ट्री सिर्फ़ आख़िरी जवाब रखती है। यही फ़ासला ट्रेडर्स रीपेंटिंग कहते हैं।
barstate.isconfirmed
barstate.isconfirmed सिर्फ़ बार के आख़िरी अपडेट पर, यानी क्लोज़ होने पर, सही होता है। इसे शर्त में जोड़ने से लाइव बार हिस्ट्री जैसा बर्ताव करता है:
crossUp = ta.crossover(close, level) and barstate.isconfirmed
plotshape(crossUp, style=shape.triangleup, location=location.belowbar)
alertcondition(crossUp, "Close above level")
क़ीमत रफ़्तार की है। सिग्नल बार क्लोज़ पर मिलता है, धीमे टाइमफ़्रेम पर पूरे एक बार बाद।
अलर्ट की फ़्रीक्वेंसी
अलर्ट बनाते समय TradingView पूछता है कि वह कितनी बार फ़ायर हो सकता है:
- Once Per Bar Close: सिर्फ़ तब फ़ायर होता है जब बार शर्त सही रहते हुए क्लोज़ होता है। यह बैकटेस्ट से मेल खाता है।
- Once Per Bar: बार के भीतर शर्त पहली बार सही होते ही फ़ायर होता है, भले ही बार उलटी तरफ़ क्लोज़ हो।
- Once Per Minute और Only Once: कितनी बार फ़ायर हो, इस पर सीमाएँ।
लेवल अलर्ट के लिए मैं 1 या 5 मिनट के चार्ट पर Once Per Bar Close इस्तेमाल करता हूँ। लेवल के पार विक், जो वापस भीतर क्लोज़ हो, ट्रिगर नहीं करती, जिससे ज़्यादातर फ़ॉल्स ब्रेक कट जाते हैं।
स्ट्रैटेजी: calc_on_every_tick और process_orders_on_close
स्ट्रैटेजी डिफ़ॉल्ट रूप से हिस्ट्री और लाइव, दोनों बार पर बार क्लोज़ पर चलती है। दो सेटिंग इसे बदलती हैं:
calc_on_every_tick=trueस्ट्रैटेजी को हर लाइव अपडेट पर चलाता है। हिस्ट्री यह नहीं कर सकती, इसलिए लाइव ट्रेड बैकटेस्ट से अलग होने लगते हैं।process_orders_on_close=trueऑर्डर सिग्नल बार के क्लोज़ पर फ़िल करता है। डिफ़ॉल्ट में वे अगले बार के ओपन पर फ़िल होते हैं। यह क्लोज़-आधारित एग्ज़िट के लिए ठीक है, पर एंट्री को बेहतर दिखा सकता है।
जब तक स्ट्रैटेजी बार क्लोज़ पर ठीक काम न करे, दोनों को बंद रखें। Strategy Tester की बाक़ी मान्यताएँ इंडिकेटर बनाम स्ट्रैटेजी गाइड में हैं।
Bar Magnifier
हिस्ट्री पर स्ट्रैटेजी को हर बार का सिर्फ़ ओपन, हाई, लो और क्लोज़ पता होता है। अगर आपका स्टॉप और टारगेट दोनों एक ही बार के भीतर हैं, तो उसे अंदाज़ा लगाना पड़ता है कि पहले कौन लगा। use_bar_magnifier=true इसे निचले टाइमफ़्रेम के डेटा से तय करता है, पेड TradingView प्लान पर। टाइट स्टॉप और टारगेट पर भरोसा करने से पहले इसे चालू करें।
request.security और ऊँचे टाइमफ़्रेम
डेली हाई को 5 मिनट के चार्ट में खींचना रीपेंटिंग का आम स्रोत है। हिस्ट्री पर डेली बार पहले से पूरा होता है, इसलिए स्क्रिप्ट को दिन के पहले बार से ही अंतिम हाई दिखता है। लाइव में हाई बदलता रहता है। पिछली, पूरी हो चुकी वैल्यू माँगें:
prevHigh = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
lookahead_on के साथ [1] आज के हर बार पर कल का हाई देता है, हिस्ट्री और लाइव दोनों में एक जैसा।
एक चेकलिस्ट
- सिग्नल
barstate.isconfirmedइस्तेमाल करते हैं, या अलर्ट Once Per Bar Close है। - ऊँचे टाइमफ़्रेम की वैल्यू
lookahead_onके साथ[1]इस्तेमाल करती हैं। - स्ट्रैटेजी बार क्लोज़ पर चलती है, और
calc_on_every_tickबंद है। - जब स्टॉप और टारगेट पास-पास हों, तब Bar Magnifier चालू है।
- ट्रेड करने से पहले आप एक हफ़्ते के लाइव अलर्ट की तुलना बैकटेस्ट से करते हैं।
लेवल्स जो नहीं हिलते
मेरे ट्रेड प्लान्स के लेवल्स सेशन से पहले तय हो जाते हैं और पूरे दिन स्थिर रहते हैं, इसलिए उन्हें बनाने वाली स्क्रिप्ट के पास रीपेंट करने को कुछ नहीं होता। Pine Script लेवल्स गाइड दिखाती है कि उन्हें TradingView पर कैसे प्लॉट करें।
FAQ
Pine Script में बार क्लोज़ और इंट्राबार में क्या फ़र्क़ है?
बार क्लोज़ का मतलब है कि स्क्रिप्ट बार पूरा होने पर एक बार काम करती है। इंट्राबार का मतलब है कि वह बार के भीतर हर प्राइस अपडेट पर काम करती है, इसलिए क्लोज़ से पहले सिग्नल आ भी सकता है और ग़ायब भी हो सकता है।
मैं Pine Script अलर्ट को रीपेंट होने से कैसे रोकूँ?
अलर्ट को Once Per Bar Close पर सेट करें, या शर्त में barstate.isconfirmed जोड़ें। ऊँचे टाइमफ़्रेम के डेटा के लिए lookahead_on के साथ पिछले बार की वैल्यू इस्तेमाल करें।
क्या स्ट्रैटेजी बैकटेस्ट इंट्राबार प्राइस इस्तेमाल करता है?
सिर्फ़ बार के भीतर के फ़िल के लिए, और सिर्फ़ तब जब Bar Magnifier चालू हो। हिस्ट्री पर सिग्नल हर बार के क्लोज़ पर निकाले जाते हैं।
स्रोत
- TradingView Pine Script यूज़र मैनुअल: एग्ज़ीक्यूशन मॉडल, रीपेंटिंग, अलर्ट
- TradingView हेल्प सेंटर: Bar Magnifier
केवल शैक्षिक सामग्री। यह निवेश सलाह नहीं है।