कीमत दस कैंडल तक औसत से ऊपर रहे तो close > average दस बार सत्य हो सकता है। केवल नीचे से ऊपर जाने की घटना चिह्नित करनी हो, तो पिछली कैंडल का संबंध भी चाहिए।

स्थिति और उसकी शुरुआत

मान लें अभी और पिछली कैंडल पर औसत 100 है। पिछली क्लोज़ 99, वर्तमान 101 है। अभी कीमत औसत से ऊपर भी है और पिछली कैंडल से तुलना में उसे पार भी कर चुकी है।

अगली क्लोज़ 102 हो तो ऊपर ही है। नया ऊपर की ओर क्रॉस नहीं है, क्योंकि पिछली कैंडल पर भी ऊपर थी।

ta.crossover(first, second) तब सत्य है जब पहली वैल्यू अभी दूसरी से बड़ी है और पिछले निष्पादन पर छोटी या बराबर थी। ta.crossunder नीचे की दिशा का साथी है।

वर्तमान बराबरी अभी क्रॉसिंग नहीं। पहली केवल दूसरी तक पहुँचे तो > असत्य है। पिछली कैंडल की बराबरी के बाद अभी ऊपर जाना क्रॉस हो सकता है।

ऊपर होना और ऊपर की ओर क्रॉस करनाबंद भाव केवल तीसरी कैंडल पर औसत को ऊपर की ओर पार करता है। चौथी कैंडल पर वह ऊपर रहता है, लेकिन नया संकेत नहीं बनता। पिछली कैंडल पर दोनों मान बराबर हों, तब भी क्रॉसओवर हो सकता है। close: 99 → 100 → 101 → 102. average: 100 → 100 → 100 → 100. close > average: False → False → True → True. ta.crossover(close, average): False → False → True → False.बंद भावaverage = 100991FalseFalse1002FalseFalse1013TrueTrue1024TrueFalseकैंडलclose > averageta.crossover(close, average)
ऊपर होना और ऊपर की ओर क्रॉस करनाबंद भाव केवल तीसरी कैंडल पर औसत को ऊपर की ओर पार करता है। चौथी कैंडल पर वह ऊपर रहता है, लेकिन नया संकेत नहीं बनता। पिछली कैंडल पर दोनों मान बराबर हों, तब भी क्रॉसओवर हो सकता है।

दो मूविंग एवरेज की क्रॉसिंग

मूविंग एवरेज के दो औसत लेते हैं। छोटा तेज़ वाला नीला और लंबा धीमा नारंगी होगा। हरा त्रिकोण तेज़ के ऊपर जाने और लाल नीचे जाने को बताएगा।

cross_signals.py बनाएँ:

"""
@pyne edge
"""
from pynecore.lib import close, color, input, location, plot, plotshape, script, shape, ta


@script.indicator("Average Crossings", overlay=True)
def main(
    fast_length: int = input.int(5, title="Fast length", minval=1, maxval=200),
    slow_length: int = input.int(20, title="Slow length", minval=1, maxval=200),
):
    fast_average = ta.sma(close, fast_length)
    slow_average = ta.sma(close, slow_length)
    crosses_up = ta.crossover(fast_average, slow_average)
    crosses_down = ta.crossunder(fast_average, slow_average)
    plot(fast_average, "Fast average", color=color.blue, linewidth=2)
    plot(slow_average, "Slow average", color=color.orange, linewidth=2)
    plotshape(crosses_up, "Cross up", style=shape.triangleup,
              location=location.belowbar, color=color.green)
    plotshape(crosses_down, "Cross down", style=shape.triangledown,
              location=location.abovebar, color=color.red)

डेमो पर 5 और 20 डिफ़ॉल्ट से चलाएँ। संकेत केवल क्रॉस वाली कैंडल पर आते हैं। नीली लाइन लंबे समय नारंगी के ऊपर रहे तो हर कैंडल पर नया हरा संकेत नहीं मिलेगा।

cross_signals.py में तेज़ और धीमा औसत तथा हरे-लाल क्रॉसिंग संकेत हैं।
दो मूविंग एवरेज की क्रॉसिंग अलग घटनाओं के रूप में दिखती हैं।

क्रॉसिंग अलग लाइन में क्यों निकालते हैं?

ta.crossover और ta.crossunder हर कैंडल पर चलते हैं। इसलिए उनका पिछला निष्पादन पिछली प्रोसेस की गई कैंडल का है।

क्रॉसिंग केवल किसी दूसरी शर्त पर कॉल करें तो कॉल का पुराना स्टेट पिछली कैंडल का होना ज़रूरी नहीं। लाइन और संकेत अलग टाइम सीरीज़ देख सकते हैं।

इसलिए पिछले अध्याय का नियम: ज़रूरी स्टेट वाले नतीजे हर कैंडल पर निकालें, फिर तैयार वैल्यू से निर्णय करें।

यहाँ भी वार्म-अप दिखता है

बीस वाली SMA बीसवीं कैंडल से वैध है। पहली वैध वैल्यू पर पिछली बीस वाली SMA गायब है, इसलिए दो पूरी कैंडल से क्रॉस तय नहीं कर सकते।

शर्त को दोनों औसत की वर्तमान और पिछली वैल्यू चाहिए।

संकेत पाने के लिए na को शून्य से न बदलें। असली औसत बनने से पहले नकली शून्य औसत झूठी क्रॉसिंग बना सकता है।

डेटा का समय

किताब में बंद ऐतिहासिक कैंडल पर प्रोग्राम चलाते हैं। दैनिक क्लोज़ से बना संकेत उस कैंडल के बंद होने पर ज्ञात डेटा लेता है।

बन रही कैंडल की क्लोज़ बदल सकती है। बीच में दिखी क्रॉसिंग अंत तक गायब हो सकती है। इसे बंद कैंडल की जाँच से न मिलाएँ।

पुराने ग्राफ़ का संकेत अपने आप उसी कैंडल पर ट्रेड नहीं बनाता। इंडिकेटर संकेत खींचता है; ऑर्डर और उसके भरने का समय रणनीति में देंगे।

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

कॉपी price_crossings.py बनाएँ। दो औसत के क्रॉस के बजाय क्लोज़ के धीमे औसत से ऊपर या नीचे जाने को दिखाएँ। धीमा औसत ग्राफ़ पर रखें।

अभ्यास का हल
crosses_up = ta.crossover(close, slow_average)
crosses_down = ta.crossunder(close, slow_average)

संकेत दोनों लॉजिकल वेरिएबल इस्तेमाल करते हैं, इसलिए plotshape नहीं बदलना है। शीर्षक Price cross up और Price cross down करना उपयोगी है।

तेज़ औसत इस्तेमाल न हो तो गणना, ड्रॉइंग और इनपुट हटाएँ। स्क्रीन केवल उपयोग की सेटिंग देगी।

एक क्रॉसिंग समझें

हरे संकेत की कैंडल चुनें। उस पर और पिछली पर दोनों लाइन की वैल्यू देखें। वे दो तुलना बताएँ जिनसे संकेत सत्य हुआ। रणनीति जाँचने में भी यही काम आएगा।