पिछले लेख में, हमने पायथन भाषा के परिचय, बुनियादी वाक्यविन्यास, रणनीति ढांचे और अधिक के बारे में सीखा। हालांकि सामग्री उबाऊ थी, लेकिन यह आपकी ट्रेडिंग रणनीति विकास में एक आवश्यक कौशल है। इस लेख में, चलिए एक सरल रणनीति के साथ पायथन के मार्ग को जारी रखें, कदम से कदम, एक व्यवहार्य मात्रात्मक ट्रेडिंग रणनीति प्राप्त करने में आपकी सहायता करने के लिए।
कई ट्रेडिंग रणनीतियों के बीच, डोंचियन चैनल रणनीति सबसे क्लासिक सफलता रणनीतियों में से एक होनी चाहिए। यह 1970 से प्रसिद्ध है। उस समय, एक कंपनी मुख्यधारा के प्रोग्रामेटिक ट्रेडिंग रणनीतियों पर सिमुलेशन परीक्षण और अनुसंधान में माहिर थी। सभी रणनीति परीक्षणों में, डोंचियन चैनल रणनीति सबसे सफल थी।
बाद में, संयुक्त राज्य अमेरिका में, प्रसिद्ध
ब्रेकथ्रू ट्रेडिंग रणनीति ट्रेडिंग किस्मों की अपेक्षाकृत चिकनी प्रवृत्ति के अनुकूल है। ब्रेकथ्रू के लिए सबसे आम तरीका विशिष्ट ट्रेडिंग स्थिति निर्धारित करने के लिए मूल्य समर्थन और प्रतिरोध के बीच सापेक्ष स्थिति संबंध का उपयोग करना है। इस खंड में डॉनचियन चैनल रणनीति भी इस सिद्धांत पर आधारित है।
डोंचियन चैनल एक प्रवृत्ति-उन्मुख संकेतक है, और इसकी उपस्थिति और संकेत बोलिंगर बैंड संकेतक के कुछ समान हैं। हालांकि, इसका मूल्य चैनल एक निश्चित अवधि में उच्चतम और निम्नतम कीमतों के अनुसार बनाया गया है। उदाहरण के लिएः ऊपरी रेल की गणना सबसे हालिया 50 के-लाइन
जैसा कि ऊपर दिखाया गया है: यह सूचक तीन अलग-अलग रंगों से बना है, डिफ़ॉल्ट सेटिंग मूल्य अस्थिरता प्रदर्शित करने के लिए 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
डोंचियन चैनल का उपयोग करने के कई तरीके हैं, जिनका उपयोग अकेले या अन्य संकेतकों के साथ संयुक्त रूप से किया जा सकता है। इस खंड में हम इसका उपयोग सबसे आसान तरीके से करेंगे। यानीः जब कीमतें ऊपरी रेल को तोड़ती हैं, जिसका अर्थ है कि यह दबाव रेखा से ऊपर टूटती है, तो क्रय शक्ति मजबूत होती है, इसने बढ़ती ऊर्जा की लहर बनाई है, खरीद संकेत उत्पन्न होता है; जब मूल्य ब्रेकडाउन निचले रेल से नीचे होता है, जिसका अर्थ है कि यह समर्थन रेखा से नीचे टूटता है, तो बिक्री संकेत उत्पन्न होता है।
यदि लंबी स्थिति खोलने के बाद कीमत फिर से चैनल के मध्य रेल में गिर जाती है, तो हम मानते हैं कि क्रय शक्ति की ताकत कमजोर हो रही है, या विक्रय शक्ति की ताकत मजबूत हो रही है, और छोटी स्थिति खोलने का संकेत उत्पन्न होता है; वही सिद्धांत शुरुआती छोटी स्थिति पर लागू होता है
खुली लंबी स्थितिः यदि कोई स्थिति नहीं है, और समापन मूल्य ऊपरी रेल से अधिक है
शॉर्ट पोजीशन ओपनः यदि कोई पोजीशन होल्डिंग नहीं है और क्लोजिंग प्राइस लोअर रेल से कम है
बंद करने वाली लंबी स्थितिः यदि वर्तमान में लंबी स्थिति रखी जाती है और बंद होने की कीमत मध्य रेल से कम है
बंद शॉर्ट पोजीशनः यदि वर्तमान में शॉर्ट पोजीशन हो रही है और बंद होने की कीमत मध्य रेल से अधिक है
रणनीति को लागू करने में पहला कदम पहले डेटा प्राप्त करना है, क्योंकि डेटा ट्रेडिंग रणनीति का एक पूर्व शर्त हिस्सा है। इसके बारे में सोचो, हमें किस डेटा की आवश्यकता है? और उन डेटा को कैसे प्राप्त करें?
इसके बाद इन आंकड़ों के आधार पर ट्रेडिंग लॉजिक की गणना करनी है; अंतिम चरण लॉजिक के अनुसार ट्रेडिंग करना है।
आप ट्रेडिंग क्लास लाइब्रेरी को एक कार्यात्मक मॉड्यूल के रूप में सोच सकते हैं। ट्रेडिंग क्लास लाइब्रेरी का उपयोग करने का लाभ यह है कि यह आपको रणनीति तर्क लिखने पर ध्यान केंद्रित करने की अनुमति देता है। उदाहरण के लिए, जब हम ट्रेडिंग क्लास लाइब्रेरी का उपयोग करते हैं, तो स्थिति खोलने या बंद करने के लिए, हम सीधे ट्रेडिंग क्लास लाइब्रेरी में एपीआई इंटरफ़ेस का उपयोग कर सकते हैं; लेकिन अगर हम ट्रेडिंग क्लास लाइब्रेरी का उपयोग नहीं करते हैं, तो हमें स्थिति खोलने पर बाजार मूल्य प्राप्त करने की आवश्यकता है। निष्पादित ऑर्डर के मुद्दे और निकासी आदेशों के मुद्दे पर विचार करने की आवश्यकता है, और इसी तरह।
def main();
wile true:
obj = ext.NewPositionManager() # using the trading class library
# followed by strategy logic and placing order part
उपरोक्त कोडिंग भाग एफएमजेड क्वांट टूल का उपयोग करके सीटीए रणनीति ढांचा है। यह एक निश्चित कोडिंग प्रारूप है, और सभी ट्रेडिंग लॉजिक कोड लाइन 4 से शुरू होगा। कहीं और किसी अन्य परिवर्तन की आवश्यकता नहीं है।
इसके बारे में सोचो, हमें किस प्रकार के डेटा की आवश्यकता है? हमारी रणनीति व्यापार तर्क से, हमें पहले वर्तमान स्थिति की स्थिति प्राप्त करने की आवश्यकता है, और फिर बोलिंगर बैंड संकेतक ऊपरी, मध्य और निचले रेल के साथ समापन मूल्य की तुलना करें।
पहला 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] " के-लाइन सरणी के अंतिम डेटा प्राप्त करने के लिए, जो नवीनतम के-लाइन डेटा है। यह डेटा एक वस्तु है, जिसमें शामिल हैंः उद्घाटन मूल्य, उच्चतम, निम्नतम और समापन मूल्य, साथ ही व्यापार मात्रा, समय और अन्य डेटा, क्योंकि यह एक वस्तु है, इसलिए हम सिर्फ उपयोग करते हैं
स्थिति की जानकारी मात्रात्मक ट्रेडिंग रणनीति में एक बहुत ही महत्वपूर्ण शर्त है। जब ट्रेडिंग शर्तें स्थापित की जाती हैं, तो यह तय करना आवश्यक होता है कि स्थिति की स्थिति और पदों की संख्या के आधार पर ऑर्डर देना है या नहीं। उदाहरण के लिए, जब लंबी स्थिति खोलने की शर्तें स्थापित की जाती हैं, तो यदि होल्डिंग स्थिति है, तो ऑर्डर न दें; यदि कोई होल्डिंग स्थिति नहीं है, तो ऑर्डर दें। इस बार हम सीधे स्थिति की जानकारी को एक फ़ंक्शन में कैप्सूल करते हैं, हम इसे उपयोग करने के लिए इस फ़ंक्शन को कॉल कर सकते हैं। इस तरहः
# 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:
पंक्ति 3: स्थिति सरणी प्राप्त करें, जो एक निश्चित प्रारूप है।
पंक्ति 4: स्थिति सरणी की लंबाई निर्धारित करें. यदि इसकी लंबाई 0 के बराबर है, इसका मतलब यह है कि यह कोई स्थिति होल्डिंग है, 0 लौटाता है.
पंक्ति 6: फोर लूप का उपयोग करके, इस सरणी को पार करना शुरू करते हुए, निम्न तर्क बहुत सरल है, यदि यह लंबी स्थिति पकड़ रहा है, तो 1 लौटाता है; यदि यह छोटी स्थिति पकड़ रहा है, तो -1 लौटाता है।
पंक्ति 18: स्थिति सूचना फ़ंक्शन
एफएमजेड क्वांट मात्रात्मक ट्रेडिंग टूल में, आप सीधे अपने स्वयं के तर्क गणना लिखने की आवश्यकता के बिना "टीए.उच्चतम" और "टीए.निम्नतम" कार्यों का उपयोग कर सकते हैं। और
# 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 चक्रों की उच्चतम कीमत प्राप्त करने के लिए
पंक्ति 20: 50 चक्रों की सबसे कम कीमत प्राप्त करने के लिए
पंक्ति 21: 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
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: निर्धारित करें कि क्या समापन मूल्य निचले रेल से कम है। यदि समापन मूल्य निचले रेल से नीचे गिर जाता है, तो छोटी स्थिति खोलें।
ऊपर हमने पायथन का उपयोग करके एक पूर्ण मात्रात्मक ट्रेडिंग रणनीति विकसित करने के प्रत्येक चरण को सीखा है, जिसमें शामिल हैंः रणनीति परिचय, डोंचियन चैनल गणना विधि, रणनीति तर्क, व्यापार की शर्तें, रणनीति कोड कार्यान्वयन, आदि। यह खंड सिर्फ एक सरल रणनीति है। एक प्रेरणादायक विधि के रूप में, इसे पूरा करने के लिए एक से अधिक तरीके हैं। आप अपनी स्वयं की मात्रात्मक ट्रेडिंग रणनीति बनाने के लिए अपनी ट्रेडिंग प्रणाली के अनुसार विभिन्न ट्रेडिंग विधियों को ओवरलैप कर सकते हैं।
परिमाणात्मक व्यापार रणनीतियों के विकास में, प्रोग्रामिंग भाषा निष्पादन की गति के दृष्टिकोण से, कौन सा सबसे तेज़ है? यह सी ++ होना चाहिए। विशेष रूप से वित्तीय डेरिवेटिव और उच्च आवृत्ति व्यापार के क्षेत्र में। सी ++ भाषा विशिष्टता में अद्वितीय है और इसमें संख्यात्मक गणना में फायदे हैं। जावास्क्रिप्ट और पायथन की तुलना में, इसकी गति को कई परिमाण के आदेशों से बढ़ाया जा सकता है। यदि आप भविष्य में वित्तीय डेरिवेटिव या उच्च आवृत्ति व्यापार के क्षेत्र में जाना चाहते हैं। यह वह पाठ्यक्रम होगा जिसे आपको याद नहीं करना चाहिए।
बुनियादी बातों से शुरू करें और इस खंड की रणनीति को लागू करें।
व्यापारिक आवृत्ति को कम करने के लिए इस खंड में रणनीति में एक चलती औसत सूचक जोड़ने का प्रयास करें।