क्लोज़ की लाइन हर कैंडल की चाल के साथ चलती है। कई लगातार क्लोज़ का औसत लें तो कम ऊबड़-खाबड़ लाइन मिलती है। यहाँ दस कैंडल पर दो मूविंग एवरेज बनाएँगे।

औसत निकालना

तीन संख्याओं का सरल औसत उनका जोड़ तीन से भाग देने पर है। 100, 103 और 101 के लिए:

(100 + 103 + 101) / 3 = 101.333...

मूविंग एवरेज की विंडो का आकार स्थिर रहता है, लेकिन कैंडल के साथ आगे बढ़ता है। तीन-कैंडल विंडो में अगली कैंडल पर नई क्लोज़ आती है और सबसे पुरानी निकलती है।

नई क्लोज़ 105 हो तो अगला औसत (103 + 101 + 105) / 3, यानी 103 है। पहली 100 वाली क्लोज़ इस विंडो में नहीं है।

दस-कैंडल के सरल औसत में वर्तमान और पिछली नौ क्लोज़ चाहिए। वर्तमान के साथ दस पिछली नहीं: दस कुल वैल्यू की संख्या है।

ta के फ़ंक्शन

ta नेमस्पेस में तैयार गणनाएँ हैं। ta.sma(close, 10) दस क्लोज़ का सरल मूविंग एवरेज देता है। SMA का पूरा नाम “simple moving average” है।

दो आर्ग्युमेंट हैं:

  • close: औसत का स्रोत;
  • 10: कैंडल में विंडो का आकार।

पहली नौ कैंडल पर दस क्लोज़ नहीं हैं। वहाँ SMA na है; दसवीं पर पहली वैध वैल्यू आती है। इस शुरुआती अवधि को वार्म-अप भी कहते हैं।

विंडो का आकार सेकंड में अवधि नहीं है। दस दैनिक और दस एक-घंटे वाली कैंडल अलग समय समेटती हैं।

SMA और EMA साथ देखें

EMA, यानी एक्सपोनेंशियल मूविंग एवरेज, नई वैल्यू को अधिक वज़न देता है। ta.ema(close, 10) की लंबाई भी दस कैंडल है, लेकिन सूत्र अलग है।

EMA पहली पूरी विंडो के सरल औसत से शुरू होता है। इसलिए दस की लंबाई पर दोनों लाइनें दसवीं कैंडल से आती हैं। उसके बाद नई कीमत और पिछली EMA के अंतर का एक हिस्सा पुरानी EMA में जुड़ता है। हिस्सा 2 / (10 + 1) है।

moving_averages.py बनाएँ:

"""
@pyne edge
"""
from pynecore.lib import close, color, plot, script, ta


@script.indicator("Two Moving Averages", overlay=True)
def main():
    simple_average = ta.sma(close, 10)
    exponential_average = ta.ema(close, 10)
    plot(simple_average, "SMA 10", color=color.blue, linewidth=2)
    plot(exponential_average, "EMA 10", color=color.orange, linewidth=2)

डेमो डेटा पर चलाएँ। नीली SMA और नारंगी EMA कैंडल के साथ दिखती हैं। ग्राफ़ में उन जगहों को देखें जहाँ कीमत अचानक दिशा बदलती है। दोनों औसत एक ही गति से प्रतिक्रिया दें, यह ज़रूरी नहीं।

PyneIDE में moving_averages.py चलने के बाद कैंडल पर नीली SMA और नारंगी EMA हैं।
उन्हीं क्लोज़ कीमतों से दस की लंबाई वाली SMA और EMA बनती हैं।

औसत पिछली वैल्यू से बनी लाइन है। केवल चिकनी लाइन देखकर भविष्य की दिशा नहीं पता चलती।

हर कैंडल पर गणना क्यों?

ta.sma और ta.ema लगातार निष्पादन के बीच गणना का स्टेट इस्तेमाल करते हैं। यहाँ दोनों हर कैंडल पर चलते हैं।

आगे ऐसा कोड लिखेंगे जो कुछ स्थितियों में ही काम करता है: जैसे क्लोज़ औसत से ऊपर हो तो संकेत बनाना। यह शर्तें और संकेत में सीखेंगे।

तब भी पहले हर कैंडल पर औसत निकालें, फिर उसका इस्तेमाल तय करें। ta.sma केवल बढ़ती कैंडल पर चलाएँ तो बाकी कैंडल छूटेंगी और नतीजा पूरी श्रृंखला के औसत से अलग हो सकता है। अभी याद रखें कि दोनों औसत की गणना हर कैंडल पर हो।

इन दो लाइनों के लिए अपनी वेरिएबल पर Series नहीं चाहिए: वर्तमान वैल्यू दिखाते हैं, simple_average[1] नहीं लेते। आगे अपनी वैल्यू की हिस्ट्री सीधे इंडेक्स करनी हो तो Series[float] दें।

लंबी और छोटी विंडो

लंबाई बढ़ाने पर अधिक पुरानी कीमतें औसत को प्रभावित करती हैं। लाइन आमतौर पर चिकनी होती और बदलाव के पीछे देर से चलती है। छोटी लंबाई में नए बदलाव अधिक दिखते हैं।

उसी डेटा पर करें:

  1. दस वाले दोनों औसत चलाकर पहचाने जाने वाला मोड़ देखें।
  2. दोनों कॉल में लंबाई 30 करें।
  3. शीर्षक भी SMA 30 और EMA 30 करें।
  4. फिर चलाकर वही समय देखें।

शीर्षक इसलिए बदलते हैं क्योंकि "SMA 10" केवल लेबल है। उसका अंक गणना नहीं बदलता। दूसरा आर्ग्युमेंट विंडो तय करता है।

स्वयं करके देखें

दो सरल मूविंग एवरेज बनाएँ: एक पाँच और दूसरा बीस कैंडल का। छोटा नीला, बड़ा नारंगी हो। दोनों के सही शीर्षक दें।

अभ्यास का हल

main() में दोनों गणना और ड्रॉइंग इससे बदलें:

fast_average = ta.sma(close, 5)
slow_average = ta.sma(close, 20)
plot(fast_average, "SMA 5", color=color.blue, linewidth=2)
plot(slow_average, "SMA 20", color=color.orange, linewidth=2)

पाँच वाले में पहली चार, बीस वाले में पहली उन्नीस वैल्यू गायब हैं। वार्म-अप के बाद दोनों वही क्लोज़ श्रृंखला अलग आकार की विंडो में लेते हैं।

विंडो जाँचें

तीन-कैंडल SMA हाथ से जाँच सकते हैं। लंबाई तीन करें, लगातार तीन क्लोज़ चुनें और औसत निकालें। तीसरी कैंडल पर ग्राफ़ वही दिखाता है। पहली दो पर पूरी विंडो नहीं है।