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

Pyne code किसे कहते हैं?

हम प्रोग्राम Pyne code में लिखते हैं। यह बाज़ार के डेटा को प्रोसेस करने के लिए बनाई गई अपनी प्रोग्रामिंग भाषा है। कोड बताता है कि सिस्टम क्या गणना करे, क्या दिखाए और किस शर्त पर कोई काम करे।

एक इंडिकेटर, उदाहरण के लिए, पिछली दस कैंडल की औसत कीमत निकालकर कीमतों के ग्राफ़ पर उसकी लाइन खींच सकता है। कीमतों का ग्राफ़, जिसे अंग्रेज़ी में chart कहते हैं, समय के साथ कीमत का बदलाव दिखाता है। रणनीति प्रवेश और निकास के नियम भी देती है: जैसे कोई शर्त पूरी होने पर खरीद की पोज़िशन खोलना। पुराने डेटा पर इसे चलाकर देख सकते हैं कि चुनी हुई निष्पादन शर्तों के तहत नियमों से कौन-से ट्रेड बनते। इसे बैकटेस्ट कहते हैं।

किताब में पहले सरल इंडिकेटर बनाएँगे। उनसे डेटा और भाषा सीखेंगे, फिर ट्रेडिंग नियम लिखेंगे।

Python से इसका क्या संबंध है?

Pyne code, Python के लिखने के नियम इस्तेमाल करता है। इन्हें सिंटैक्स कहते हैं: ये तय करते हैं कि कोष्ठक कहाँ आएँ और आपस में जुड़ी लाइनें कैसे पहचानी जाएँ। पहले Python सीखना ज़रूरी नहीं; किताब के उदाहरणों से आवश्यक नियम सीखेंगे।

इसीलिए फ़ाइलों का एक्सटेंशन .py है, जैसा Python में होता है। PyneCore इंस्टॉल हो तो Pyne code को Python रनटाइम में भी चला सकते हैं। Python चलाने का वातावरण देता है; PyneCore, Pyne का खास व्यवहार और फ़ंक्शन लाइब्रेरी देता है।

प्रोग्राम डेटा पर कैसे काम करता है?

उदाहरणों में बाज़ार का डेटा कैंडल की श्रृंखला के रूप में मिलता है। एक कैंडल एक अवधि का डेटा समेटती है, जिसमें उसकी शुरुआती और अंतिम कीमत शामिल हैं। दैनिक डेटा में एक कैंडल एक दिन है।

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

यह सामान्य Python प्रोग्राम से अलग व्यवहार है। फ़ाइल की शुरुआत का @pyne मार्कर PyneCore को बताता है कि कोड इसी तरह तैयार और चलाना है। कोड समझाने वाले अध्याय में मार्कर का सही रूप और उदाहरणों में उसके साथ लिखे edge का अर्थ देखेंगे।

यह वेक्टर आधारित प्रोसेसिंग से कैसे अलग है?

Python आधारित ट्रेडिंग फ़्रेमवर्क में एक-एक कैंडल पर चलने वाले और वेक्टर आधारित, दोनों तरह के समाधान हैं। वेक्टर आधारित प्रोसेसिंग में संख्याओं की पूरी श्रृंखला पर काम करते हैं: जैसे सभी कैंडल के औसत और खरीद संकेत एक साथ निकालना। डेटा आमतौर पर टेबल या ऐरे में रखते हैं।

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

चरण एक सरल फ़ंक्शन में लिखते हैं

कई कैंडल-दर-कैंडल फ़्रेमवर्क में रणनीति के लिए क्लास बनानी होती है। क्लास संबंधित डेटा और कामों को समेटती है; उसमें बने फ़ंक्शन मेथड कहलाते हैं। तब सेटिंग और ट्रेडिंग नियम फ़्रेमवर्क के तय मेथड में लिखते हैं, और क्लास के डेटा के ज़रिए कीमत या पोज़िशन लेते हैं।

Pyne code के उदाहरणों में एक main() फ़ंक्शन में लिखते हैं कि क्या गणना करनी है और किस शर्त पर काम करना है। हर प्रोसेस की गई कैंडल पर फ़ंक्शन की लाइनें एक के बाद एक चलती हैं: पहले वैल्यू निकालें, फिर शर्त जाँचें, अंत में संकेत बनाएँ या ऑर्डर दें। कैंडल पर आगे बढ़ना PyneCore संभालता है।

इसलिए शुरुआत में क्लास बनाना, इनहेरिटेंस सीखना या प्रोग्राम को फ़्रेमवर्क के अलग-अलग मेथड में बाँटना ज़रूरी नहीं। सरल उदाहरणों के लिए वेरिएबल, फ़ंक्शन कॉल और शर्तें पर्याप्त हैं; इन्हें अगले अध्यायों में सीखेंगे।

नियम समय के क्रम में समझ सकते हैं

यह ट्रेडिंग का निर्णय सोचने के तरीके के करीब है: “अभी की कीमत और अब तक की चाल देखूँ। शर्त पूरी हो तो प्रवेश करूँ। पोज़िशन खुली रहे तब तक निकलने की शर्त देखूँ।” कोड में भी इसी क्रम में घटनाएँ देख सकते हैं, और डिबगर से किसी कैंडल पर वेरिएबल जाँच सकते हैं।

गलती से भविष्य का डेटा इस्तेमाल करना कठिन होता है

वेक्टर आधारित प्रोसेसिंग में पूरा डेटा उपलब्ध हो सकता है। गलत दिशा में शिफ़्ट या गलत औसत की वजह से उस कीमत को भी गणना में ले सकते हैं जो निर्णय के समय ज्ञात नहीं थी। जैसे जनवरी के फैसलों में पूरे साल का औसत इस्तेमाल करना बाद के महीनों की कीमतें भी लेना होगा। प्रोग्राम फिर भी चलकर अच्छे दिखने वाले नतीजे दे सकता है; गलती पकड़ना कठिन हो सकता है। इसे भविष्य की जानकारी का पक्षपात, अंग्रेज़ी में look-ahead bias, कहते हैं।

Pyne की अपनी टाइम सीरीज़ वर्तमान और पहले प्रोसेस की गई कैंडल की वैल्यू देती हैं। हिस्ट्री माँगकर अगली कैंडल की कीमत नहीं पढ़ सकते। इससे भविष्य का डेटा अनजाने में इस्तेमाल होने की संभावना घटती है और निर्णय के आधार जाँचना आसान होता है।

फिर भी डेटा तैयार करते समय ध्यान चाहिए। बाहरी डेटा में पहले से ऐसी जानकारी हो जो बाद में ज्ञात हुई थी, तो कैंडल-दर-कैंडल निष्पादन अकेले उसे नहीं पहचान सकता।

गति में समझौता हो सकता है

कुछ प्रोग्रामों में कैंडल-दर-कैंडल निष्पादन, अच्छी तरह लिखी वेक्टर गणना से धीमा हो सकता है। बड़ा डेटा हो और रणनीति या पैरामीटर के बहुत-से रूप जाँचें, तो यह खास मायने रखता है। वेक्टर सिस्टम अक्सर अनुकूलित गणना लाइब्रेरी से ऐसे बड़े काम तेज़ करते हैं। असली अंतर प्रोग्राम और डेटा की मात्रा पर निर्भर है।

किताब में कैंडल-दर-कैंडल काम सीखेंगे: समय के क्रम में नियम लिखना और हर निर्णय से पहले की जानकारी जाँचना।

दूसरे तरीकों का परिचय: VectorBT में वेक्टर आधारित प्रोसेसिंग और Backtrader में कैंडल-दर-कैंडल रणनीतियाँ (अंग्रेज़ी में)।

PyneIDE और PyneCore किस काम आते हैं?

PyneIDE, Visual Studio Code एडिटर का एक्सटेंशन है। इसमें प्रोग्राम लिखते हैं, डेटा चुनते हैं और चलाते हैं। यहीं ग्राफ़ पर नतीजे देखते और त्रुटियाँ खोजते हैं।

PyneCore निष्पादन करने वाला सिस्टम है। यह प्रोग्राम लोड करके तैयार करता है, उससे कैंडल प्रोसेस कराता है और गणना तथा ट्रेड के नतीजे बनाता है। PyneIDE पीछे से इसका इस्तेमाल करके नतीजे दिखाता है।

अगले अध्याय में PyneIDE सेट करके पहला प्रोजेक्ट बनाएँगे। सीखने के लिए नमूना डेटा है, इसलिए वही प्रोग्राम दोबारा चलाकर अपने बदलावों के नतीजे मिला सकते हैं।