पहली रणनीति
क्रॉसिंग संकेतों से बैकटेस्ट के प्रवेश और निकास नियम बनाएँ।
क्रॉसिंग अध्याय में इंडिकेटर औसत मिलने पर संकेत बनाता था। अब वही घटना सिम्युलेटेड ऑर्डर शुरू करेगी। ऊपर की क्रॉसिंग पर खरीद पोज़िशन खुलेगी और नीचे की पर बंद होगी।
रणनीति क्या करती है?
इंडिकेटर गणना और प्रदर्शन करता है। रणनीति इसके साथ बैकटेस्ट सिम्युलेटर को ऑर्डर देती है। वह ऐतिहासिक कैंडल और नियमों से ऑर्डर, पोज़िशन और नतीजे संभालता है।
पुराने डेटा का यह परीक्षण बैकटेस्ट है। यहाँ सभी ऑर्डर सिम्युलेटेड हैं; Run Pyne code असली ट्रेडिंग खाते में ऑर्डर नहीं देता।
पोज़िशन प्रवेश भरने के बाद मौजूद होल्डिंग है। ऑर्डर निर्देश है; भरना वह घटना है जो पोज़िशन बनाती या बदलती है। इन तीन शब्दों को एक-दूसरे की जगह नहीं लेंगे।
पहले शब्दों में नियम
इस रणनीति के नियम:
- हर कैंडल पर पाँच और बीस वाली SMA निकले।
- ऊपर की क्रॉसिंग पर एक यूनिट लॉन्ग का प्रवेश ऑर्डर दे।
- नीचे की क्रॉसिंग पर
Longप्रवेश से जुड़ी पोज़िशन बंद करे। - गणना बंद ऐतिहासिक कैंडल के डेटा पर हो।
कीमत बढ़े तो लॉन्ग का मूल्य बढ़ता और गिरे तो घटता है। यहाँ शॉर्ट नहीं खोलते।
नियम यह दावा नहीं करता कि हर ऊपर का क्रॉस लाभ देगा। बैकटेस्ट उसी डेटा पर इन कामों से क्या होता, यह जाँचता है।
पूरा प्रोग्राम
crossover_strategy.py बनाएँ:
"""
@pyne edge
"""
from pynecore.lib import close, color, input, plot, script, strategy, ta
@script.strategy(
"Average Crossing Strategy",
overlay=True,
initial_capital=10000,
default_qty_type=strategy.fixed,
default_qty_value=1,
pyramiding=1,
)
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)
if crosses_up:
strategy.entry("Long", strategy.long)
if crosses_down:
strategy.close("Long")
plot(fast_average, "Fast average", color=color.blue, linewidth=2)
plot(slow_average, "Slow average", color=color.orange, linewidth=2)@script.strategy बताता है कि main() रणनीति है। गणनाएँ और दोनों लाइनें वैसे ही हैं। नया strategy नेमस्पेस ऑर्डर के काम और रणनीति डेटा देता है।
डेकोरेटर कई लाइन की कॉल है। उसमें रन सेटिंग हैं; main() के पैरामीटर अपनी गणना के इनपुट हैं।
शुरुआती पूँजी और मात्रा
initial_capital=10000 सिम्युलेशन का शुरुआती बैलेंस है। डेमो के बाज़ार मेटाडेटा इकाइयाँ और कीमत स्तर तय करते हैं।
default_qty_type=strategy.fixed निश्चित मात्रा है। default_qty_value=1 एक यूनिट ऑर्डर है। यह पूँजी का एक प्रतिशत नहीं और ज़रूरी नहीं कि एक मुद्रा इकाई हो।
pyramiding=1 एक दिशा में अधिकतम एक प्रवेश देता है। उदाहरण मौजूद लॉन्ग में नया प्रवेश जोड़कर बड़ा नहीं करता।
सीखते समय छोटी निश्चित मात्रा लेते हैं। नतीजा बदले तो कम अलग आकार-संबंधी कारक एक साथ देखने होंगे।
प्रवेश और बंद करने के नाम
strategy.entry("Long", strategy.long) का पहला आर्ग्युमेंट ऑर्डर पहचान है। Long टेक्स्ट प्रोग्राम चुनता है; दूसरा दिशा देता है।
strategy.close("Long") उसी पहचान का संदर्भ है। नाम मिलना चाहिए। "Buy" से प्रवेश करें तो "Long" बंद करना उसे लक्ष्य नहीं करेगा।
नीचे का क्रॉस यहाँ बंद करता है, शॉर्ट नहीं खोलता। उस नाम की खुली पोज़िशन न हो तो बंद करने को कुछ नहीं।
PyneIDE में चलाना
- पूरा प्रोग्राम सेव करें।
- Run Pyne code और
demoचुनें। - दोनों SMA और ट्रेड संकेत देखें।
- ग्राफ़ के नीचे पैनल खोलकर Trades चुनें।

ट्रेड न दिखे तो देखें कि रणनीति फ़ाइल ही चलाई और @script.strategy बचा है। दोनों इनपुट की असली वैल्यू भी देखें। समान स्रोत और लंबाई की SMA एक-दूसरे को पार नहीं करतीं।
संकेत और ऑर्डर भरने का समय
यहाँ की डिफ़ॉल्ट सेटिंग में बंद कैंडल के डेटा से मार्केट ऑर्डर बनता है। आमतौर पर अगली कैंडल की ओपन पर भरता है। इसलिए संकेत और प्रवेश की कैंडल अलग हो सकती हैं।
यही मार्केट क्लोज़ पर लागू है। नीचे के क्रॉस का बंद करने वाला ऑर्डर अगली ओपन पर भर सकता है।
आखिरी कैंडल ऑर्डर दे तो उसके बाद अगली नहीं है। इसलिए भरना निश्चित नहीं। पहले खुली पोज़िशन भी डेटा के अंत में खुली रह सकती है।
भरने का तरीका सेटिंग है। अगले अध्याय में Properties में भी देखेंगे। नतीजे को उसी भरने के तरीके के साथ समझें जिससे बना है।
स्वयं करके देखें
इनपुट खोलकर तेज़ और धीमी दोनों लंबाई 20 करें। अनुमान लगाएँ: दोनों लाइन कहाँ होंगी और कितनी क्रॉसिंग ट्रेड शुरू करेगी?
अभ्यास का हल
दोनों SMA वही कीमत और उतनी विंडो लेती हैं, इसलिए समान हैं। कोई कैंडल एक को दूसरी से ऊपर या नीचे नहीं करती। इस नियम से कोई ट्रेड नहीं खुलता।
बदले इनपुट सेव करने और दोबारा गणना पूरी होने पर ही ग्राफ़ यह दिखाएगा। बाद में 5 और 20 वापस करें।
एक प्रवेश चुनें
भरा प्रवेश चुनकर पिछली कैंडल के औसत देखें। ऊपर की क्रॉसिंग संकेत कैंडल पर पूरी होनी चाहिए। ट्रेड कीमत को प्रवेश कैंडल की ओपन से मिलाएँ, अपने आप संकेत की क्लोज़ से नहीं।