एफएमजेड क्वांट प्लेटफॉर्म पर ट्रेडिंग रणनीति कैसे लिखें
पिछले अनुभागों का अध्ययन करने के बाद, हम अंत में एक मात्रात्मक ट्रेडिंग रणनीति लिखने के लिए तैयार हैं। यह मैनुअल ट्रेडिंग से मात्रात्मक ट्रेडिंग में आपकी प्रविष्टि में सबसे महत्वपूर्ण कदम होगा। वास्तव में, यह इतना रहस्यमय नहीं है। एक रणनीति लिखना कोड के साथ अपने विचारों को साकार करने से ज्यादा कुछ नहीं है। यह अनुभाग खरोंच से मात्रात्मक ट्रेडिंग रणनीति को लागू करेगा, अध्ययन के बाद, हर कोई एफएमजेड क्वांट सिस्टम पर रणनीतियों को लिखने के तरीके से परिचित होगा।
सबसे पहले, एफएमजेड क्वांट की आधिकारिक वेबसाइट खोलें, अपने खाते में लॉग इन करें।
पिछले अध्याय में, मैंने एक चलती औसत रणनीति पेश की है। अर्थात्ः यदि कीमत पिछले 10 दिनों के औसत मूल्य से अधिक है, तो लंबी स्थिति खोलें। यदि कीमत पिछले 10 दिनों के औसत मूल्य से कम है, तो इसे छोटा करें। हालांकि, हालांकि कीमत सीधे बाजार की स्थिति को प्रतिबिंबित कर सकती है, फिर भी कई झूठे सफलता संकेत होंगे; इसलिए, हमें इस रणनीति को अपग्रेड और सुधारना होगा।
सबसे पहले, प्रवृत्ति की दिशा का न्याय करने के लिए एक बड़ा अवधि चलती औसत चुनें। कम से कम आधे झूठे ब्रेकथ्रू सिग्नल फ़िल्टर किए गए हैं। बड़ा चक्र चलती औसत धीमा है, लेकिन यह अधिक स्थिर होगा। फिर, उद्घाटन स्थिति की सफलता दर बढ़ाने के लिए, हम एक और शर्त जोड़ते हैं। यह बड़ा चक्र चलती औसत कम से कम ऊपर की ओर है; अंत में, कीमत, अल्पकालिक चलती औसत और दीर्घकालिक चलती औसत के बीच सापेक्ष स्थिति संबंध का उपयोग एक पूर्ण ट्रेडिंग रणनीति बनाने के लिए किया जाता है।
उपरोक्त रणनीति विचारों के साथ, हम इस रणनीति तर्क का निर्माण करने का प्रयास कर सकते हैं। यहाँ तर्क आपको आकाशीय गति के कानून की गणना करने नहीं देता है, यह इतना जटिल नहीं है। यह शब्दों में पिछले रणनीति विचारों को व्यक्त करने से ज्यादा कुछ नहीं है।
खुली लंबी स्थितिः यदि वर्तमान में कोई स्थिति नहीं है, और समापन मूल्य अल्पकालिक चलती औसत से अधिक है, और समापन मूल्य दीर्घकालिक चलती औसत से अधिक है, और अल्पकालिक चलती औसत दीर्घकालिक चलती औसत से अधिक है, और दीर्घकालिक चलती औसत बढ़ रहा है।
खुली शॉर्ट पोजीशनः यदि वर्तमान में कोई पोजीशन नहीं है, और क्लोजिंग प्राइस अल्पकालिक मूविंग एवरेज से कम है, और क्लोजिंग प्राइस दीर्घकालिक मूविंग एवरेज से कम है, और अल्पकालिक मूविंग एवरेज दीर्घकालिक मूविंग एवरेज से कम है, और दीर्घकालिक मूविंग एवरेज गिर रहा है।
बंद करें लंबी स्थितिः यदि वर्तमान में लंबी स्थिति है, और बंद करने की कीमत लंबी अवधि के चलती औसत से कम है, या अल्पकालिक चलती औसत लंबी अवधि के चलती औसत से कम है, या लंबी अवधि के चलती औसत गिर रहा है।
बंद शॉर्ट पोजीशनः यदि वर्तमान में शॉर्ट पोजीशन हो, और बंद होने की कीमत लंबी अवधि के मूविंग एवरेज से अधिक हो, या अल्पकालिक मूविंग एवरेज लंबी अवधि के मूविंग एवरेज से अधिक हो, या लंबी अवधि के मूविंग एवरेज में वृद्धि हो।
उपरोक्त पूरी रणनीति का तर्क है, यदि हम इस रणनीति के पाठ संस्करण को कोड में परिवर्तित करते हैं, तो इसमें शामिल होंगेः बाजार उद्धरण का अधिग्रहण, संकेतकों की गणना, स्थिति खोलने और बंद करने के लिए आदेश देना, ये तीन चरण।
पहली बात यह है कि बाजार उद्धरण प्राप्त करने के लिए है. इस रणनीति में, हम केवल बंद मूल्य प्राप्त करने की जरूरत है. एम भाषा में, बंद मूल्य प्राप्त करने के लिए एपीआई हैः बंद, जिसका अर्थ है कि आप केवल नवीनतम के लाइन बंद मूल्य प्राप्त करने के लिए कोडिंग क्षेत्र में बंद लिखने की जरूरत है।
अगली बात यह है कि संकेतक की गणना करें। इस रणनीति में, हम दो संकेतक का उपयोग करेंगे, अर्थात्ः अल्पकालिक चलती औसत और दीर्घकालिक चलती औसत। हम मानते हैं कि अल्पकालिक चलती औसत 10 अवधि चलती औसत है और दीर्घकालिक चलती औसत 50 अवधि चलती औसत है। इन दोनों का प्रतिनिधित्व करने के लिए कोड का उपयोग कैसे करें? कृपया नीचे देखेंः
MA10:=MA(CLOSE,10); // Get the 10-cycle moving average of the latest K-line and save the result in variable MA10
MA50:=MA(CLOSE,50); // Get the 50-cycle moving average of the latest K-line and save the result in variable MA50
मैनुअल ट्रेडिंग में, हम एक नज़र में देख सकते हैं कि 50-पीरियड मूविंग एवरेज बढ़ रहा है या गिर रहा है, लेकिन हम इसे कोड में कैसे व्यक्त करते हैं? ध्यान से सोचें, यह देखते हुए कि मूविंग एवरेज बढ़ रहा है या नहीं, क्या K-लाइन का वर्तमान मूविंग एवरेज पिछले K-लाइन के मूविंग एवरेज से बड़ा है? या यह पिछले दो K-लाइन से अधिक है? यदि उत्तर हां है, तो हम कह सकते हैं कि मूविंग एवरेज रेसिंग है। हम उसी विधि से गिरने का भी न्याय कर सकते हैं।
MA10:=MA(CLOSE,10); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10
MA50:=MA(CLOSE,50); //Get the 50-cycle moving average of the latest K line and save the result to variable MA10
MA10_1:=REF(MA10,1); //Get the 10-cycle moving average of the pervious K line and save the result to variable MA10_1
MA50_1:=REF(MA50,1); //Get the 50-cycle moving average of the pervious K line and save the result to variable MA50_1
MA10_2:=REF(MA10,2); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10_2
MA50_2:=REF(MA50,2); //Get the 50-cycle moving average of the latest K line and save the result to variable MA50_2
MA50_ISUP:=MA50>MA50_1 AND MA50_1>MA50_2; //Determine whether the current 50-line moving average of the K line is rising
MA50_ISDOWN:=MA50<MA50_1 AND MA50_1<MA50_2; //Determine whether the current 50-line moving average of the K line is falling
ध्यान दें कि उपरोक्त कोड की पंक्तियों 8 और 9 पर, शब्द
अंतिम चरण ऑर्डर देने के लिए है, आपको लॉजिक कोड के बाद खरीद और बिक्री ऑपरेशन निष्पादित करने के लिए केवल FMZ Quant
MA10:=MA(CLOSE,10); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10
MA50:=MA(CLOSE,50); //Get the 50-cycle moving average of the latest K line and save the result to variable MA10
MA10_1:=REF(MA10,1); //Get the 10-cycle moving average of the pervious K line and save the result to variable MA10_1
MA50_1:=REF(MA50,1); //Get the 50-cycle moving average of the pervious K line and save the result to variable MA50_1
MA10_2:=REF(MA10,2); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10_2
MA50_2:=REF(MA50,2); //Get the 50-cycle moving average of the latest K line and save the result to variable MA50_2
MA50_ISUP:=MA50>MA50_1 AND MA50_1>MA50_2; //Determine whether the current 50-line moving average of the K line is rising
MA50_ISDOWN:=MA50<MA50_1 AND MA50_1<MA50_2; //Determine whether the current 50-line moving average of the K line is falling
CLOSE>MA10 AND CLOSE>MA50 AND MA10>MA50 AND MA50_ISUP,BK; //open long position
CLOSE<MA10 AND CLOSE<MA50 AND MA10<MA50 AND MA50_ISUP,SK; //open short position
CLOSE<MA50 OR MA10<MA50,SP;//close long position
CLOSE>MA50 OR MA10>MA50,BP;//close short position
ध्यान दें कि उपरोक्त की पंक्ति 13 और 14 में, शब्द
कृपया ध्यान दें कि M भाषा में
उपरोक्त एम प्रोग्रामिंग भाषा का उपयोग करके एफएमजेड क्वांट प्लेटफॉर्म पर एक ट्रेडिंग रणनीति लिखने की पूरी प्रक्रिया है। कुल मिलाकर तीन चरण हैंः एक रणनीति विचार होने से लेकर रणनीति सोचने और तर्क का वर्णन करने के लिए पाठ का उपयोग करने और अंत में कोड के साथ एक पूरी ट्रेडिंग रणनीति को लागू करने तक। हालांकि यह एक सरल रणनीति है, विशिष्ट कार्यान्वयन प्रक्रिया जटिल रणनीति के समान है, सिवाय इसके कि रणनीति और डेटा संरचना अलग है। इसलिए, जब तक आप इस खंड में मात्रात्मक रणनीति प्रक्रिया को समझते हैं, तब तक आप एफएमजेड क्वांट प्लेटफॉर्म पर मात्रात्मक रणनीति अनुसंधान और अभ्यास कर सकते हैं।
इस खंड में दी गई रणनीतियों को स्वयं लागू करने का प्रयास करें।
इस खंड की रणनीति के आधार पर स्टॉप-लॉस और टेक-प्रॉफिट फ़ंक्शन जोड़ें।
क्वांटिटेटिव ट्रेडिंग रणनीतियों के विकास में, प्रोग्रामिंग भाषाएं हथियारों की तरह हैं, एक अच्छी प्रोग्रामिंग भाषा आपको आधे प्रयास के साथ दोगुना परिणाम प्राप्त करने में मदद कर सकती है। उदाहरण के लिए, क्वांटिटेटिव ट्रेडिंग दुनिया में सबसे अधिक उपयोग की जाने वाली पायथन, सी ++, जावा, सी #, ईजीलैंग्वेज और एम भाषाओं में से एक दर्जन से अधिक हैं। आपको युद्ध के मैदान पर लड़ाई के लिए कौन सा हथियार चुनना चाहिए? अगले खंड में हम इन सामान्य प्रोग्रामिंग भाषाओं के साथ-साथ प्रत्येक प्रोग्रामिंग भाषा की विशेषताओं को पेश करेंगे।