संसाधन लोड हो रहा है... लोड करना...

4.4 पायथन भाषा में रणनीतियों को कैसे लागू करें

लेखक:अच्छाई, बनाया गयाः 2019-04-28 16:51:22, अद्यतन किया गयाः

सारांश

पिछले लेख में, हमने पायथन भाषा के परिचय, बुनियादी वाक्यविन्यास, रणनीति ढांचे और अधिक के बारे में सीखा। हालांकि सामग्री उबाऊ थी, लेकिन यह आपकी ट्रेडिंग रणनीति विकास में एक आवश्यक कौशल है। इस लेख में, चलिए एक सरल रणनीति के साथ पायथन के मार्ग को जारी रखें, कदम से कदम, एक व्यवहार्य मात्रात्मक ट्रेडिंग रणनीति प्राप्त करने में आपकी सहायता करने के लिए।

रणनीति का परिचय

कई ट्रेडिंग रणनीतियों के बीच, डोंचियन चैनल रणनीति सबसे क्लासिक सफलता रणनीतियों में से एक होनी चाहिए। यह 1970 से प्रसिद्ध है। उस समय, एक कंपनी मुख्यधारा के प्रोग्रामेटिक ट्रेडिंग रणनीतियों पर सिमुलेशन परीक्षण और अनुसंधान में माहिर थी। सभी रणनीति परीक्षणों में, डोंचियन चैनल रणनीति सबसे सफल थी।

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

ब्रेकथ्रू ट्रेडिंग रणनीति ट्रेडिंग किस्मों की अपेक्षाकृत चिकनी प्रवृत्ति के अनुकूल है। ब्रेकथ्रू के लिए सबसे आम तरीका विशिष्ट ट्रेडिंग स्थिति निर्धारित करने के लिए मूल्य समर्थन और प्रतिरोध के बीच सापेक्ष स्थिति संबंध का उपयोग करना है। इस खंड में डॉनचियन चैनल रणनीति भी इस सिद्धांत पर आधारित है।

डोंचियन चैनल रणनीति नियम

डोंचियन चैनल एक प्रवृत्ति-उन्मुख संकेतक है, और इसकी उपस्थिति और संकेत बोलिंगर बैंड संकेतक के कुछ समान हैं। हालांकि, इसका मूल्य चैनल एक निश्चित अवधि में उच्चतम और निम्नतम कीमतों के अनुसार बनाया गया है। उदाहरण के लिएः ऊपरी रेल की गणना सबसे हालिया 50 के-लाइन की उच्चतम कीमत द्वारा की जाती है; निचली रेल की गणना सबसे हालिया 50 के-लाइन की सबसे कम कीमत द्वारा की जाती है।

img

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

यदि कीमतें ऊपरी रेल से ऊपर उठती हैं, तो खरीद संकेत दिखाई देगा; इसके विपरीत, यदि कीमत निचली रेल से नीचे गिरती है, तो बिक्री संकेत दिखाई देगा। चूंकि ऊपरी और निचली रेल जो सबसे कम और उच्चतम मूल्य का उपयोग करके गणना की जाती है, इसलिए सामान्य परिस्थितियों में, कीमत रेल को तोड़ नहीं पाएगी, यह रेल के साथ आगे बढ़ेगी या चैनल के अंदर कूद जाएगी।

डोंचियन चैनल की गणना विधि

FMZ क्वांट मंच पर, Donchian चैनल गणना सरल है, आप केवल दिए गए चक्र में उच्चतम या निम्नतम मूल्य तक पहुँच सकते हैं, जैसा कि नीचे दिखाया गया हैः 5 वीं पंक्ति 50 चक्रों की उच्चतम कीमत प्राप्त करना है, 6 वीं पंक्ति 50 चक्रों की सबसे कम कीमत प्राप्त करना है।

def main(): # program entry
    exchange.SetContractType("this_week") # set the variety type by using the weekly k-line 
    while True: # enter the loop
        records = exchange.GetRecords() # get the k line array
        upper = TA.Highest(record, 50, 'high') # get the highest price of 50 cycles
        lower = TA.Lowest(record, 50, 'low') # get the lowest price of 50 cycles
        middle = (upper + lower) / 2 # calculate the average value of upper and lower rails 
        Log("upper rail: ", upper) # print the upper rail value in the log
        Log("lower rail: ", lower) # print the lower rail value in the log
        Log("middle rail: ", middle) # print the middle rail value in the log

रणनीति तर्क

डोंचियन चैनल का उपयोग करने के कई तरीके हैं, जिनका उपयोग अकेले या अन्य संकेतकों के साथ संयुक्त रूप से किया जा सकता है। इस खंड में हम इसका उपयोग सबसे आसान तरीके से करेंगे। यानीः जब कीमतें ऊपरी रेल को तोड़ती हैं, जिसका अर्थ है कि यह दबाव रेखा से ऊपर टूटती है, तो क्रय शक्ति मजबूत होती है, इसने बढ़ती ऊर्जा की लहर बनाई है, खरीद संकेत उत्पन्न होता है; जब मूल्य ब्रेकडाउन निचले रेल से नीचे होता है, जिसका अर्थ है कि यह समर्थन रेखा से नीचे टूटता है, तो बिक्री संकेत उत्पन्न होता है।

img

यदि लंबी स्थिति खोलने के बाद कीमत फिर से चैनल के मध्य रेल में गिर जाती है, तो हम मानते हैं कि क्रय शक्ति की ताकत कमजोर हो रही है, या विक्रय शक्ति की ताकत मजबूत हो रही है, और छोटी स्थिति खोलने का संकेत उत्पन्न होता है; वही सिद्धांत शुरुआती छोटी स्थिति पर लागू होता है

व्यापार की शर्तें

  • खुली लंबी स्थितिः यदि कोई स्थिति नहीं है, और समापन मूल्य ऊपरी रेल से अधिक है

  • शॉर्ट पोजीशन ओपनः यदि कोई पोजीशन होल्डिंग नहीं है और क्लोजिंग प्राइस लोअर रेल से कम है

  • बंद करने वाली लंबी स्थितिः यदि वर्तमान में लंबी स्थिति रखी जाती है और बंद होने की कीमत मध्य रेल से कम है

  • बंद शॉर्ट पोजीशनः यदि वर्तमान में शॉर्ट पोजीशन हो रही है और बंद होने की कीमत मध्य रेल से अधिक है

रणनीति संहिता कार्यान्वयन

रणनीति को लागू करने में पहला कदम पहले डेटा प्राप्त करना है, क्योंकि डेटा ट्रेडिंग रणनीति का एक पूर्व शर्त हिस्सा है। इसके बारे में सोचो, हमें किस डेटा की आवश्यकता है? और उन डेटा को कैसे प्राप्त करें?

इसके बाद इन आंकड़ों के आधार पर ट्रेडिंग लॉजिक की गणना करनी है; अंतिम चरण लॉजिक के अनुसार ट्रेडिंग करना है।

चरण 1: ट्रेडिंग क्लास लाइब्रेरी का उपयोग करना

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

def main();
    wile true:
        obj = ext.NewPositionManager() # using the trading class library
        # followed by strategy logic and placing order part

उपरोक्त कोडिंग भाग एफएमजेड क्वांट टूल का उपयोग करके सीटीए रणनीति ढांचा है। यह एक निश्चित कोडिंग प्रारूप है, और सभी ट्रेडिंग लॉजिक कोड लाइन 4 से शुरू होगा। कहीं और किसी अन्य परिवर्तन की आवश्यकता नहीं है।

चरण 2: सभी प्रकार के डेटा प्राप्त करें

इसके बारे में सोचो, हमें किस प्रकार के डेटा की आवश्यकता है? हमारी रणनीति व्यापार तर्क से, हमें पहले वर्तमान स्थिति की स्थिति प्राप्त करने की आवश्यकता है, और फिर बोलिंगर बैंड संकेतक ऊपरी, मध्य और निचले रेल के साथ समापन मूल्य की तुलना करें।

  • K लाइन डेटा प्राप्त करें

पहला K-लाइन डेटा सरणी और वर्तमान K-लाइन समापन मूल्य प्राप्त करने के लिए है, K-लाइन सरणी के साथ, हम गणना कर सकते हैं एन चक्र अवधि के उच्चतम और सबसे कम कीमत के माध्यम से एपीआई इंटरफ़ेस. यह इस तरह लिखा जा सकता हैः

def main(): # main function
    exchange.SetContractType("this_week") # set the variety type by using the weekly k-line 
    while True: # enter the loop
        records = exchange.GetRecords() # get the k line array
        if len(records) < 50: continue # if the number of K line is less than 50, skip this loop.
        close = records[len(records) - 1].Close # get the closing price of the latest k-line

जैसा कि ऊपर दिखाया गया हैः

पंक्ति 4: K पंक्ति सरणी प्राप्त करें, जो एक निश्चित प्रारूप है।

पंक्ति 5: K पंक्ति की लंबाई को फ़िल्टर करें, क्योंकि Donchian चैनल सूचक की गणना के लिए पैरामीटर 50 है, जब K पंक्ति की संख्या 50 से कम है, तो इसकी गणना करना असंभव है। तो यहां हमें K पंक्ति की संख्या को फ़िल्टर करने की आवश्यकता है। यदि K पंक्ति की संख्या 50 से कम है, तो यह वर्तमान लूप को छोड़ देगा और अगली K पंक्ति की प्रतीक्षा करना जारी रखेगा।

पंक्ति 6: हम कोड का उपयोग करते हैं " रिकॉर्ड्स[ len (रिकॉर्ड) - 1] " के-लाइन सरणी के अंतिम डेटा प्राप्त करने के लिए, जो नवीनतम के-लाइन डेटा है। यह डेटा एक वस्तु है, जिसमें शामिल हैंः उद्घाटन मूल्य, उच्चतम, निम्नतम और समापन मूल्य, साथ ही व्यापार मात्रा, समय और अन्य डेटा, क्योंकि यह एक वस्तु है, इसलिए हम सिर्फ उपयोग करते हैं .Close के नवीनतम समापन मूल्य प्राप्त करने के लिए के-लाइन।

  • स्थिति डेटा प्राप्त करें

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

# get the position information function
def mp():
    positions = exchange.GetPosition() # get the holding position array
    if len(position) == 0: # if the holding position array is 0
        return 0 # meaning currently has no position holding, return 0
    for i in range(len(position)): # Traversing the position array
        if (position[i]['Type'] == PD_LONG): 
            return 1 # if there are long position holding, return 1
        elif (position[i]['Type'] == PD_SHORT):
            return -1 # if there are short position holding, return -1
        
def main(): # main function
    exchange.SetContractType("this_week") # set the variety type by using the weekly k-line
    while True: # enter the loop
        records = exchange.GetRecords() # get the k line array
        if len(records) < 50: continue # if the number of K line is less than 50, skip this loop.
        close = records[len(records) - 1].Close # get the closing price of the latest k-line
        position = mp() # get the position information function

जैसा कि ऊपर दिखाया गया हैः

यह एक फ़ंक्शन है जो स्थिति की जानकारी प्राप्त करता है. यदि लंबी स्थिति है, तो मूल्य 1 है; यदि छोटी स्थिति है, तो मूल्य -1 है; यदि कोई स्थिति नहीं है, तो मूल्य 0 है.

पंक्ति 2: mp नाम के साथ एक फ़ंक्शन बनाएँ। इस फ़ंक्शन में कोई पैरामीटर नहीं है.

पंक्ति 3: स्थिति सरणी प्राप्त करें, जो एक निश्चित प्रारूप है।

पंक्ति 4: स्थिति सरणी की लंबाई निर्धारित करें. यदि इसकी लंबाई 0 के बराबर है, इसका मतलब यह है कि यह कोई स्थिति होल्डिंग है, 0 लौटाता है.

पंक्ति 6: फोर लूप का उपयोग करके, इस सरणी को पार करना शुरू करते हुए, निम्न तर्क बहुत सरल है, यदि यह लंबी स्थिति पकड़ रहा है, तो 1 लौटाता है; यदि यह छोटी स्थिति पकड़ रहा है, तो -1 लौटाता है।

पंक्ति 18: स्थिति सूचना फ़ंक्शन mp को कॉल करें.

  • नवीनतम 50 के-लाइनों की उच्चतम और निम्नतम कीमत प्राप्त करें

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

# get the position information function
def mp():
    positions = exchange.GetPosition() # get the holding position array
    if len(position) == 0: # if the holding position array is 0
        return 0 # meaning currently has no position holding, return 0
    for i in range(len(position)): # Traversing the position array
        if (position[i]['Type'] == PD_LONG): 
            return 1 # if there are long position holding, return 1
        elif (position[i]['Type'] == PD_SHORT):
            return -1 # if there are short position holding, return -1
        
def main(): # main function
    exchange.SetContractType("this_week") # set the variety type by using the weekly k-line
    while True: # enter the loop
        records = exchange.GetRecords() # get the k line array
        if len(records) < 50: continue # if the number of K line is less than 50, skip this loop.
        close = records[len(records) - 1].Close # get the closing price of the latest k-line
        position = mp() # get the position information function
        upper = TA.Highest(record, 50, 'High') # get the highest price of 50 cycles
        lower = TA.Lowest(record, 50, 'Low') # get the lowest price of 50 cycles
        middle = (upper + lower) / 2 # calculate the average value of the upper and lower rail

जैसा कि ऊपर दिखाया गया हैः

पंक्ति 19: 50 चक्रों की उच्चतम कीमत प्राप्त करने के लिए TA.Highest फ़ंक्शन को कॉल करें

पंक्ति 20: 50 चक्रों की सबसे कम कीमत प्राप्त करने के लिए TA.Lowest फ़ंक्शन को कॉल करें

पंक्ति 21: 50 चक्रों के उच्चतम और निम्नतम मूल्य के अनुसार ऊपरी और निचले रेल के औसत मूल्य की गणना करें

चरण 3: ऑर्डर और व्यापार करना

उपरोक्त डेटा के साथ, हम ट्रेडिंग लॉजिक और प्लेसिंग ऑर्डर भाग अब लिख सकते हैं। यह भी बहुत सरल है, सबसे अधिक इस्तेमाल किया जाता है if कथन है, जिसे इस तरह से वर्णित किया जा सकता हैः यदि शर्त 1 और शर्त 2 सही हैं, तो आदेश दें; यदि शर्त 3 या शर्त 4 सही हैं, तो आदेश दें। जैसा कि नीचे दिखाया गया हैः

# get the position information function
def mp():
    positions = exchange.GetPosition() # get the holding position array
    if len(position) == 0: # if the holding position array is 0
        return 0 # meaning currently has no position holding, return 0
    for i in range(len(position)): # Traversing the position array
        if (position[i]['Type'] == PD_LONG): 
            return 1 # if there are long position holding, return 1
        elif (position[i]['Type'] == PD_SHORT):
            return -1 # if there are short position holding, return -1
        
def main(): # main function
    exchange.SetContractType("this_week") # set the variety type by using the weekly k-line
    while True: # enter the loop
        records = exchange.GetRecords() # get the k line array
        if len(records) < 50: continue # if the number of K line is less than 50, skip this loop.
        close = records[len(records) - 1].Close # get the closing price of the latest k-line
        position = mp() # get the position information function
        upper = TA.Highest(record, 50, 'High') # get the highest price of 50 cycles
        lower = TA.Lowest(record, 50, 'Low') # get the lowest price of 50 cycles
        middle = (upper + lower) / 2 # calculate the average value of the upper and lower rail
        obj = ext.NewPositionManager() # using the trading class library
        if position > 0 and close < middle: # If currently holding long position, and the closing price is less than the middle rail
            obj.CoverAll() # close all position
        if position < 0 and close > middle: # If currently holding short position, and the closing price is greater than the middle rail
            obj.CoverAll() # close all position
        if position == 0: # if currently holding no position
            if close > upper: # if the closing price is greater than the middle rail
                obj.OpenLong("this_week", 1) # open long position
            elif close < lower: # if the closing price is less than the middle rail
                obj.OpenShort("this_week", 1) # open short position

जैसा कि ऊपर दिखाया गया हैः

पंक्ति 22: ट्रेडिंग क्लास लाइब्रेरी का उपयोग करके, यह एक निश्चित प्रारूप है

पंक्तियाँ 23, 24: यह एक समापन लंबी स्थिति कथन है जो तुलना ऑपरेटर और तार्किक ऑपरेटर का उपयोग करता है जिसे हमने पहले सीखा है, जिसका अर्थ है कि यदि वर्तमान होल्डिंग लंबी स्थिति है, और समापन मूल्य मध्य रेल से कम है, तो सभी पदों को बंद करें।

पंक्तियाँ 25, 26: यह एक बंद शॉर्ट पोजीशन स्टेटमेंट है जो तुलना ऑपरेटर और तार्किक ऑपरेटर का उपयोग करता है जो हमने पहले सीखा है, जिसका अर्थ है कि यदि वर्तमान ऑर्डर शॉर्ट पोजीशन है और बंद होने की कीमत मध्य रेल से अधिक है, तो सभी पोजीशन बंद करें.

पंक्ति 27: वर्तमान स्थिति की स्थिति निर्धारित करें। यदि कोई स्थिति नहीं है, तो अगले चरण पर जाएं।

पंक्तियाँ 28, 29: निर्धारित करें कि क्या समापन मूल्य ऊपरी रेल से अधिक है। यदि समापन मूल्य ऊपरी रेल से ऊपर बढ़ता है, तो लंबी स्थिति खोलें।

पंक्तियाँ 30, 31: निर्धारित करें कि क्या समापन मूल्य निचले रेल से कम है। यदि समापन मूल्य निचले रेल से नीचे गिर जाता है, तो छोटी स्थिति खोलें।

संक्षेप में

ऊपर हमने पायथन का उपयोग करके एक पूर्ण मात्रात्मक ट्रेडिंग रणनीति विकसित करने के प्रत्येक चरण को सीखा है, जिसमें शामिल हैंः रणनीति परिचय, डोंचियन चैनल गणना विधि, रणनीति तर्क, व्यापार की शर्तें, रणनीति कोड कार्यान्वयन, आदि। यह खंड सिर्फ एक सरल रणनीति है। एक प्रेरणादायक विधि के रूप में, इसे पूरा करने के लिए एक से अधिक तरीके हैं। आप अपनी स्वयं की मात्रात्मक ट्रेडिंग रणनीति बनाने के लिए अपनी ट्रेडिंग प्रणाली के अनुसार विभिन्न ट्रेडिंग विधियों को ओवरलैप कर सकते हैं।

अगला अनुभाग सूचना

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

स्कूल के बाद व्यायाम

  1. बुनियादी बातों से शुरू करें और इस खंड की रणनीति को लागू करें।

  2. व्यापारिक आवृत्ति को कम करने के लिए इस खंड में रणनीति में एक चलती औसत सूचक जोड़ने का प्रयास करें।


अधिक