पिछले लेख में, हमने बुनियादी ज्ञान का परिचय दिया है कि जब जावास्क्रिप्ट का उपयोग करके प्रोग्राम लिखना है, जिसमें बुनियादी व्याकरण और सामग्री शामिल है। इस लेख में, हम इसे एक व्यवहार्य इंट्राडे मात्रात्मक ट्रेडिंग रणनीति प्राप्त करने के लिए कुछ सामान्य रणनीति मॉड्यूल और तकनीकी संकेतकों के साथ उपयोग करेंगे।
बोलिंगर बैंड सबसे आम तौर पर इस्तेमाल किए जाने वाले तकनीकी संकेतकों में से एक है, जिसका आविष्कार जॉन बोलिंगर ने 1980 के दशक में किया था। सिद्धांत रूप में, कीमतें हमेशा कुछ मानों की सीमा के आसपास उतार-चढ़ाव करती हैं। बोलिंगर बैंड इस सैद्धांतिक आधार पर आधारित है और
गणना विधि सांख्यिकीय सिद्धांत का उपयोग करना है, पहले एक अवधि के लिए मूल्य का
मानक विचलन की अवधारणा के कारण, हाल के मूल्य उतार-चढ़ाव के आधार पर बोलिंगर बैंड की चौड़ाई को गतिशील रूप से समायोजित किया जाता है। जब उतार-चढ़ाव छोटे होते हैं, तो बोलिंगर बैंड संकीर्ण होते हैं; अन्यथा उतार-चढ़ाव बड़े होंगे और बोलिंगर बैंड व्यापक होंगे। जब बीओएलएल चैनल संकीर्ण से चौड़े तक बदल रहा है, तो कीमत धीरे-धीरे औसत पर लौटती है। जब बीओएलएल चैनल चौड़े से संकीर्ण में बदल रहा है, तो इसका मतलब है कि बाजार मूल्य बदलना शुरू हो जाता है। यदि कीमत ऊपरी रेल पार करती है, तो इसका मतलब है कि क्रय शक्ति बढ़ जाती है। यदि कीमत निचली रेल पार करती है, तो यह इंगित करता है कि बिक्री शक्ति बढ़ जाती है।
सभी तकनीकी संकेतकों में से, बोलेंजर बैंड गणना विधि सबसे जटिल में से एक है, जो सांख्यिकी में मानक विचलन की अवधारणा का परिचय देती है, जिसमें मध्य प्रक्षेपवक्र (एमबी ), ऊपरी प्रक्षेपवक्र (यूपी ), और निचले प्रक्षेपवक्र (डीएन) की गणना शामिल है। इसकी गणना विधि निम्नानुसार हैः
मध्य रेल = N समय अवधि का सरल चलती औसत
ऊपरी रेल = मध्य रेल + K × N समय अवधि का मानक विचलन
निचला रेल = मध्य रेल − K × N समय अवधि का मानक विचलन
function main( ) { // program entry
while (true) { // enter the loop
exchange.SetContactType('this_week'); // set contact type
var records = exchange.GetRecods(); // get the k line array
var boll = TA.B0LL(records, 50); // get the 50-cycle BOLL indicator array
var top = boll[0]; // get the upper-rail BOLL indicator array
var ma = boll[l]; // get the middle-rail BOLL indicator array
var bottom = boll[2]; // get the lower-rail BOLL indicator array
Log(top); // print the upper-rail BOLL indicator array to the log
Log(ma); // print the middle-rail BOLL indicator array to the log
Log(bottom);// print the lower-rail BOLL indicator array to the log
}
}
बोलिंगर बैंड का उपयोग विभिन्न तरीकों से किया जाता है और इसका उपयोग अकेले या अन्य संकेतकों के साथ संयोजन में किया जा सकता है। ट्यूटोरियल के इस खंड में हम इसका उपयोग सबसे आसान तरीके से करेंगे, जो हैः जब कीमत ऊपरी रेल से टूटती है, तो लंबी स्थिति खोलें; जब कीमत निचली रेल से टूटती है, तो छोटी स्थिति खोलें।
यदि लंबी स्थिति खोलने के बाद कीमत फिर से बोलिंगर बैंड के मध्य-रेल पर वापस आ जाती है, तो हमारा मानना है कि क्रय शक्ति की ताकत कमजोर हो रही है, या बिक्री शक्ति की ताकत मजबूत हो रही है, इसलिए, यह वह जगह है जहां बंद स्थिति संकेत आता है। शॉर्ट स्थिति के लिए एक ही तर्क।
खुली लंबी स्थितिः यदि कोई स्थिति नहीं है, और बंद होने की कीमत ऊपरी रेल से अधिक है।
शॉर्ट पोजीशनः यदि कोई पोजीशन नहीं है, और बंद होने की कीमत निचली रेल से कम है।
बंद करें लंबी स्थितिः यदि लंबी स्थिति को पकड़ें, और समापन मूल्य मध्य रेल से कम है,
शॉर्ट पोजीशन बंद करनाः यदि शॉर्ट पोजीशन को पकड़ना, और बंद होने की कीमत मध्य रेल से अधिक है,
रणनीति को प्राप्त करने के लिए, सबसे पहले हमें यह विचार करने की आवश्यकता है कि हमें किस डेटा की आवश्यकता है? किस एपीआई के माध्यम से प्राप्त करना है? फिर ट्रेडिंग लॉजिक की गणना कैसे करें? अंत में, ऑर्डर लगाने का कौन सा तरीका है? चलो इसे कदम से कदम लागू करते हैंः
तथाकथित सीटीए रणनीति फ्रेमवर्क मानक फ्रेमवर्क का एक सेट है जिसे एफएमजेड क्वांट ने आधिकारिक तौर पर डिज़ाइन किया है। इस फ्रेमवर्क का उपयोग करके, आप तुच्छ प्रोग्रामिंग समस्या को नजरअंदाज कर सकते हैं और सीधे प्रोग्रामिंग के तर्क पर ध्यान केंद्रित कर सकते हैं। उदाहरण के लिए, यदि आप इस फ्रेमवर्क का उपयोग नहीं करते हैं, तो आपको ऑर्डर मूल्य, ऑर्डर प्रकार, ऑर्डर वापस लेने आदि को स्थानांतरित करने पर विचार करने की आवश्यकता होगी।
function main() {
$.CTA("this_week", function(st) {
// write your strategy here
})
}
उपरोक्त एफएमजेड क्वांट टूल का उपयोग करके सीटीए रणनीति ढांचा है। यह एक निश्चित कोड प्रारूप है, और सभी ट्रेडिंग लॉजिक कोड लाइन 3 से शुरू हो रहा है। उपयोग में किस्म कोड को संशोधित करने की आवश्यकता के अलावा, कहीं और कोई अन्य परिवर्तन आवश्यक नहीं है।
ध्यान दें कि उपरोक्त ट्रेडिंग किस्म कोड
इसके बारे में सोचो, हमें किस प्रकार के डेटा की आवश्यकता है? हमारी रणनीति व्यापार तर्क से, हमें पहले वर्तमान स्थिति की स्थिति प्राप्त करने की आवश्यकता है, और फिर बोलिंगर बैंड संकेतक ऊपरी, मध्य और निचले रेल के साथ समापन मूल्य की तुलना करें।
पहला K-लाइन डेटा सरणी और पिछले K-लाइन समापन मूल्य प्राप्त करने के लिए है, K-लाइन सरणी के साथ, हम बोलिंगर बैंड संकेतक की गणना कर सकते हैं. यह इस तरह लिखा जा सकता हैः
function main() {
$.CTA("this_week", function(st) {
var r = st.records; // get the k line data
if (r.length < 20) return; // filter the length of k line data
var close = r[r.length - 2].Close; // get the previous k line closing price
})
}
जैसा कि ऊपर दिखाया गया हैः
पंक्ति 4: K पंक्ति सरणी प्राप्त करें, जो एक निश्चित प्रारूप है।
पंक्ति 5: K रेखा की लंबाई को फ़िल्टर करें, क्योंकि बोलिंगर बैंड सूचक की गणना के लिए पैरामीटर 20 है, जब K रेखा 20 से कम है, तो बोलिंगर बैंड सूचक की गणना करना असंभव है। तो यहां हमें K रेखा की लंबाई को फ़िल्टर करने की आवश्यकता है। यदि K रेखा 20 से कम है, तो यह सीधे वापस आ जाएगी और अगली K रेखा की प्रतीक्षा करना जारी रखेगी।
पंक्ति 6: प्राप्त K-लाइन सरणी से, पहले पिछले K-लाइन के ऑब्जेक्ट को प्राप्त करें, और फिर इस ऑब्जेक्ट से समापन मूल्य प्राप्त करें। इस सरणी में अंतिम तत्व प्राप्त करना, जो इस सरणी की लंबाई माइनस 2 ((r[r.length - 2)) है।
के-लाइन सरणी तत्व सभी वस्तुएं हैं, वस्तु में उद्घाटन, उच्चतम, निम्नतम और समापन मूल्य होता है; व्यापार मात्रा और समय भी होता है।
उदाहरण के लिए, समापन मूल्य प्राप्त करने के लिए, बस जोड़ें ". " विशेषता नाम के बाद (r[r.length - 2].Close).
क्योंकि यह एक इंट्राडे रणनीति है, हमें कुछ निश्चित समय से पहले सभी पदों को बंद करने की आवश्यकता है ((अधिकांश क्रिप्टो ट्रेडिंग एक्सचेंजों को आमतौर पर 24/7 खुला रहता है), इसलिए हमें यह न्याय करना चाहिए कि क्या वर्तमान के लाइन उस निश्चित समय के करीब है जब हम व्यापार बंद करने या ब्रेक लेने के लिए क्या करते हैं। यदि यह उस समापन समय के करीब है, तो सभी पदों को बंद करें। यदि यह नहीं है, तो रणनीति जारी रखें। कोड इस तरह लिखा गया हैः
function main() {
$.CTA("this_week", function(st) {
var r = st.records; // get the k line data
if (r.length < 20) return; // filter the length of k line data
var close = r[r.length - 2].Close; // get the previous k line closing price
var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours
})
}
जैसा कि ऊपर दिखाया गया हैः
पंक्ति 8: K पंक्ति टाइमस्टैम्प विशेषता ऑब्जेक्ट प्राप्त करें और फिर एक समय ऑब्जेक्ट ((नया दिनांक (टाइमस्टैम्प)) बनाएँ।
पंक्ति 9: समय वस्तु के अनुसार घंटों और मिनटों की गणना करें, और निर्धारित करें कि क्या वर्तमान K पंक्ति का समय 14:45 है।
स्थिति की जानकारी मात्रात्मक ट्रेडिंग रणनीति में एक बहुत ही महत्वपूर्ण शर्त है। जब ट्रेडिंग शर्तें स्थापित की जाती हैं, तो स्थिति की स्थिति और पदों की संख्या के आधार पर ऑर्डर देने या नहीं, इसका न्याय करना आवश्यक है। उदाहरण के लिए, जब लंबी स्थिति खोलने की शर्तें स्थापित की जाती हैं, तो यदि होल्डिंग स्थिति है, तो ऑर्डर न दें; यदि कोई होल्डिंग स्थिति नहीं है, तो ऑर्डर दें। इस तरहः
function main() {
$.CTA("this_week", function(st) {
var r = st.records; // get the k line data
if (r.length < 20) return; // filter the length of k line data
var close = r[r.length - 2].Close; // get the previous k line closing price
var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours
var mp = st.position.amount; // get the holding position information
})
}
जैसा कि ऊपर दिखाया गया हैः
पंक्ति 11: वर्तमान स्थिति की स्थिति प्राप्त करें. यदि लंबी स्थिति है, तो मान 1 है; यदि छोटी स्थिति है, तो मान -1 है; यदि कोई स्थिति नहीं है, तो मान 0 है.
अगला हम बोलिंगर बैंड संकेतक के ऊपरी, मध्य और निचले रेल के मूल्यों की गणना करने की जरूरत है. हम पहले बोलिंगर बैंड एपीआई कॉल करने की जरूरत है, और फिर इस सरणी से ऊपरी, मध्य, और निचले रेल के मूल्यों को प्राप्त. एफएमजेड क्वांट उपकरण में, यह बहुत सरल है बोलिंगर बैंड एपीआई सीधे कॉल करने के लिए, यह एक दो आयामी सरणी है.
दो आयामी सरणी को समझना आसान है, जो एक सरणी में सरणी है। मान प्राप्त करने का क्रम हैः पहले सरणी में निर्दिष्ट सरणी प्राप्त करें, और फिर निर्दिष्ट सरणी से निर्दिष्ट तत्व प्राप्त करें, जैसा कि नीचे दिखाया गया हैः
var arr = [[100, 200, 300],[10,20,30],[1,2,3]]; // this is a two-dimensional array
var test = arr[0]; //first obtain the specified array in the array and assign the value to variable "test"
var demo1 = test[0]; //then get a value from the test array
demo1; // the result is : 100
var demo2 = arr[0][0]; // you also can write like this
demo2; // the result is the same : 100
नीचे, 13 वीं से 19 वीं पंक्ति में बोलिंगर बैंड ऊपरी, मध्य और निचले रेल कोडिंग भाग प्राप्त कर रहे हैं, जिसमें पंक्ति 13 में एफएमजेड क्वांट एपीआई टूल का उपयोग किया जाता है, जो बोलिंगर बैंड सरणी तक सीधे पहुंच सकता है; पंक्ति 14 से पंक्ति 16 क्रमशः ऊपरी, मध्य और निचले रेल सरणी के लिए द्वि-आयामी सरणी प्राप्त कर रहे हैं; पंक्ति 17 से पंक्ति 19 में ऊपरी, मध्य और निचले रेल सरणी से निर्दिष्ट मान प्राप्त कर रहे हैं।
function main() {
$.CTA("this_week", function(st) {
var r = st.records; // get the k line data
if (r.length < 20) return; // filter the length of k line data
var close = r[r.length - 2].Close; // get the previous k line closing price
var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours
var mp = st.position.amount; // get the holding position information
var boll = TA.BOLL(r, 20, 2); //calucating the Bollinger Band indicator
var upLine = boll[0]; // get the up-rail array
var midLine = boll[1]; // get the middle-rail array
var downLine = boll[2]; // get the lower-rail array
var upPrice = upLine[upLine.length - 2]; // get the previous K-line upper rail value
var midPrice = midLine[midLine.length -2]; // get the previous K-line middle rail value
var downPrice = downLine[downLine.length -2]; // get the previous K-line lower rail value
})
}
उपरोक्त डेटा के साथ, हम ट्रेडिंग लॉजिक और प्लेसिंग ऑर्डर भाग अब लिख सकते हैं। यह भी बहुत सरल है, सबसे अधिक इस्तेमाल किया जाता है
function main() {
$.CTA("this_week", function(st) {
var r = st.records; // get the k line data
if (r.length < 20) return; // filter the length of k line data
var close = r[r.length - 2].Close; // get the previous k line closing price
var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours
var mp = st.position.amount; // get the holding position information
var boll = TA.BOLL(r, 20, 2); //calucating the Bollinger Band indicator
var upLine = boll[0]; // get the up-rail array
var midLine = boll[1]; // get the middle-rail array
var downLine = boll[2]; // get the lower-rail array
var upPrice = upLine[upLine.length - 2]; // get the previous K-line upper rail value
var midPrice = midLine[midLine.length -2]; // get the previous K-line middle rail value
var downPrice = downLine[downLine.length -2]; // get the previous K-line lower rail value
if (mp == 1 && (close < midPrice || isClose)) return -1; // if holding long position, and the closing price is less than the mid-rail, or the current time is 14:45, closing long position.
if (mp == -1 && (close > midPrice || isClose)) return 1; // if holding short position, and the closing price is greater than the mid-rail, or the current time is 14:45, closing short position.
if (mp == 0 && close > upPrice && !isClose) return 1; // if there are no holding position, and the closing price is greater than the upper-rail, or the current time is not 14:45, open long position.
if (mp == 0 && close < downPrice && !isClose) return -1;// if there are no holding position, and the closing price is less than the lower-rail, or the current time is not 14:45, open short position.
})
}
उपरोक्त चित्र में, पंक्तियाँ 21 से 24 ट्रेडिंग तर्क और ऑर्डर डालने के कोडिंग भाग हैं। ऊपर से नीचे तक वे हैंः बंद लंबी स्थिति, बंद छोटी स्थिति, खुली लंबी स्थिति और खुली छोटी स्थिति।
उदाहरण के तौर पर ओपन लॉन्ग पोजीशन लें. यह
आप पा सकते हैं कि इन पंक्तियों में "return 1" और "return -1" है, जो एक निश्चित प्रारूप है, जिसका अर्थ हैः यदि यह खरीद दिशा है, तो "return 1" लिखें; यदि यह बिक्री दिशा है, तो "return -1" लिखें।
इस बिंदु पर, एक पूर्ण रणनीति कोड लिखा जाता है। यदि ट्रेडिंग फ्रेमवर्क, ट्रेडिंग डेटा, ट्रेडिंग लॉजिक और प्लेसिंग ऑर्डर अलग से लिखे जाते हैं, तो यह बहुत सरल है? निम्नलिखित इस रणनीति का पूरा कोड हैः
function main() {
$.CTA("this_week", function(st) {
var r = st.records; // get the k line data
if (r.length < 20) return; // filter the length of k line data
var close = r[r.length - 2].Close; // get the previous k line closing price
var time = new Date(r[r.length - 1].Time); // according the current k-line timestamp, create a time object
var isClose = time.getHours() == 14 && time.getMinutes() == 45; // judging whether the current k-line is 14:45. this is just a example, you can specify any time you want during the 24 hours
var mp = st.position.amount; // get the holding position information
var boll = TA.BOLL(r, 20, 2); //calucating the Bollinger Band indicator
var upLine = boll[0]; // get the up-rail array
var midLine = boll[1]; // get the middle-rail array
var downLine = boll[2]; // get the lower-rail array
var upPrice = upLine[upLine.length - 2]; // get the previous K-line upper rail value
var midPrice = midLine[midLine.length -2]; // get the previous K-line middle rail value
var downPrice = downLine[downLine.length -2]; // get the previous K-line lower rail value
if (mp == 1 && (close < midPrice || isClose)) return -1; // if holding long position, and the closing price is less than the mid-rail, or the current time is 14:45, closing long position.
if (mp == -1 && (close > midPrice || isClose)) return 1; // if holding short position, and the closing price is greater than the mid-rail, or the current time is 14:45, closing short position.
if (mp == 0 && close > upPrice && !isClose) return 1; // if there are no holding position, and the closing price is greater than the upper-rail, or the current time is not 14:45, open long position.
if (mp == 0 && close < downPrice && !isClose) return -1;// if there are no holding position, and the closing price is less than the lower-rail, or the current time is not 14:45, open short position.
})
}
दो बातें है कि चेतावनी की जरूरत हैः
कोशिश करें (लेकिन जरूरी नहीं) रणनीति तर्क लिखने के रूप में वर्तमान के-लाइन स्थिति स्थापित है, तो अगले के-लाइन पर आदेश रखने. या पिछले के-लाइन स्थिति स्थापित है, वर्तमान के-लाइन पर आदेश रखने, इस तरह, बैकटेस्ट का परिणाम और वास्तविक बाजार प्रदर्शन बहुत अलग नहीं हैं. यह इस तरह लिखने के लिए ठीक नहीं है, लेकिन ध्यान दें कि क्या रणनीति तर्क सही है.
सामान्य तौर पर, बंद करने की स्थिति का तर्क खोलने की स्थिति के तर्क के सामने लिखना चाहिए। इसका उद्देश्य रणनीति तर्क को अपनी अपेक्षाओं को पूरा करने की कोशिश करना है। उदाहरण के लिए, यदि रणनीति तर्क सिर्फ उस स्थिति को पूरा करता है जहां इसे केवल एक स्थिति को बंद करने के बाद व्यापार की विपरीत दिशा करने की आवश्यकता होती है, तो इस तरह की स्थिति का नियम पहले स्थिति को बंद करना और फिर नई स्थिति खोलना है। यदि हम बंद करने की स्थिति तर्क को खोलने की स्थिति के तर्क के सामने लिखते हैं, तो यह इस नियम को पूरी तरह से पूरा करेगा।
ऊपर हमने एक पूर्ण इंट्राडे क्वांटिटेटिव ट्रेडिंग रणनीति विकसित करने के प्रत्येक चरण को सीखा है, जिसमें शामिल हैंः रणनीति का परिचय, बोलिंगर संकेतक गणना विधि, रणनीति तर्क, ट्रेडिंग शर्तें, रणनीति कोड कार्यान्वयन, आदि। इस रणनीति मामले के माध्यम से, न केवल हम एफएमजेड क्वांट टूल के प्रोग्रामिंग तरीकों से परिचित हैं, बल्कि कुछ अन्य रणनीतियों का निर्माण भी कर सकते हैं जो इस टेम्पलेट के अनुसार अनुकूलित हैं।
मात्रात्मक ट्रेडिंग रणनीति व्यक्तिपरक ट्रेडिंग अनुभव या प्रणाली का सारांश है। यदि हम मात्रात्मक रणनीति लिखने से पहले व्यक्तिपरक ट्रेडिंग में उपयोग किए जाने वाले अनुभव या प्रणाली को लिखते हैं, और फिर इसे एक-एक करके कोड में अनुवाद करते हैं, तो आप पाएंगे कि एक मात्रात्मक रणनीति लिखना बहुत आसान होगा।
मात्रात्मक ट्रेडिंग रणनीति विकास में, यदि केवल एक प्रोग्रामिंग भाषा चुन सकते हैं, तो बिना किसी हिचकिचाहट के, यह पायथन होना चाहिए। डेटा प्राप्त करने से लेकर बैकटेस्टिंग तक, यहां तक कि ऑर्डर रखने के हिस्से तक, पायथन ने पूरी व्यावसायिक श्रृंखला को कवर किया है। वित्तीय मात्रात्मक निवेश के क्षेत्र में, पायथन ने एक अत्यंत महत्वपूर्ण स्थिति पर कब्जा कर लिया है, पाठ्यक्रम के अगले खंड में हम पायथन भाषा सीखना शुरू करेंगे।
दोहरी चलती औसत रणनीति को लागू करने के लिए इस खंड में ज्ञान का उपयोग करने का प्रयास करें।
एफएमजेड क्वांट प्लेटफॉर्म पर जावास्क्रिप्ट भाषा का उपयोग करके केडीजे संकेतक रणनीति को लागू करने का प्रयास करें।