, [nowTime, this.basb]]); ObjChart.add (([4, [nowTime, this.sabb]]); ObjChart.update ((चैट); }
### 4. In the entry function main(), execute the pre-transaction pre-processing code, which will only run once after the program is started, including:
- ```SetErrorFilter ( )``` to filter the unimportant information in the console
- ```exchange.IO ( )``` to set the digital currency to be traded
- ```ObjChart.reset ( )``` to clear the previous chart drawn before starting the program
- ```LogProfitReset ( )``` to clear the status bar information before starting the program
After the above pre-transaction pre-processing is defined, the next step is to enter the polling mode and execute the onTick() function repeatedly. It also sets the sleep time for Sleep () polling, because the API of some digital currency exchanges has built-in access limit for a certain period of time.
मुख्य फंक्शन
// कंसोल में महत्वहीन जानकारी फ़िल्टर करें
SetErrorFilter ((
## II. Get and calculate data
1. Obtain basic data object, account balance, and boll indicator data for use in the trading logic.
फ़ंक्शन चालू है var data = new Data ((tradeTypeA, tradeTypeB); // एक बुनियादी डेटा ऑब्जेक्ट बनाएँ var accountStocks = data.accountData.Stocks; // खाता शेष var boll = data.boll ((dataLength, timeCycle); // boll संकेतक डेटा प्राप्त करें if (!boll) return; // यदि कोई boll डेटा नहीं है तो वापस करें }
## III. Place an order and handle the follow-up
1. Execute the buying and selling operation according to the above strategic logic. First, judge whether the price and indicator conditions are valid, then judge whether the position conditions are valid, and finally execute the trade () order function.
// मूल्य अंतर की व्याख्या
// basb = (अनुबंध A की एक कीमत बेचें - अनुबंध B की एक कीमत खरीदें)
// sabb = (अनुबंध A की एक कीमत खरीदें - अनुबंध B की एक कीमत बेचें)
यदि (data.sabb > boll.middle && data.sabb < boll.up) { // यदि sabb मध्य ट्रैक से अधिक है
यदि (data.mp(tradeTypeA, 0)) { // आदेश देने से पहले जांचें कि अनुबंध A में लंबे आदेश हैं या नहीं
data.trade(tradeTypeA,
2. After the order is placed, it is necessary to deal with the abnormal situations such as the unsettled order and the holding of a single contract. And draw the chart.
data.cancelOrders(); // आदेश रद्द करें data.drawingChart ((bol); // चित्रण data.isEven(); // व्यक्तिगत अनुबंध रखने संभाल
As above, we have created a simple cross-period arbitrage strategy of digital currency completely through more than 200 lines code. The complete code is as follows:
// वैश्विक चर
// कॉन्फ़िगरेशन चार्ट के लिए चार्ट ऑब्जेक्ट घोषित करें
var चार्ट = {
__isStock: सच,
टूलटिप: {
xDateFormat:
// पैरामीटर
var tradeTypeA =
// बुनियादी डेटा फ़ंक्शन डेटा ((tradeTypeA, tradeTypeB) { // मध्यस्थता A अनुबंध और मध्यस्थता B अनुबंध में पारित करें this.accountData = _C(exchange.GetAccount); // खाता जानकारी प्राप्त करें this.positionData = _C(exchange.GetPosition); // स्थिति की जानकारी प्राप्त करें var recordsData = _C(exchange.GetRecords); // K-लाइन डेटा प्राप्त करें exchange.SetContractType(tradeTypeA); // आर्बिट्रेज के लिए सदस्यता लें एक अनुबंध var depthDataA = _C(exchange.GetDepth); // मध्यस्थता एक अनुबंध गहराई डेटा exchange.SetContractType(tradeTypeB); // आर्बिट्रेज बी अनुबंध की सदस्यता लें var depthDataB = _C(exchange.GetDepth); // मध्यस्थता बी अनुबंध गहराई डेटा this.time = recordsData[recordsData.length - 1].Time; // नवीनतम डेटा प्राप्त करने का समय this.askA = depthDataA.Asks[0].Price; // एक मूल्य को बेचें this.bidA = depthDataA.Bids[0].Price; // arbitrage की एक कीमत खरीदें एक अनुबंध this.askB = depthDataB.Asks[0].Price; // आर्बिट्रेज B अनुबंध की एक कीमत बेचें this.bidB = depthDataB.Bids[0].Price; // आर्बिट्रेज B अनुबंध की एक कीमत खरीदें // सकारात्मक मध्यस्थता मूल्य अंतर (एक अनुबंध A की कीमत बेचें - एक अनुबंध B की कीमत खरीदें) this.basb = depthDataA.Aks[0].Price - depthDataB.Bids[0].Price; // ऋणात्मक मध्यस्थता मूल्य अंतर (एक अनुबंध A की कीमत खरीदें - एक अनुबंध B की कीमत बेचें) this.sabb = depthDataA.Bids[0].Price - depthDataB.Aks[0].Price; }
// स्थिति प्राप्त करें Data.prototype.mp = फ़ंक्शन (tradeType, type) { var positionData = this.positionData; // स्थिति जानकारी प्राप्त करें के लिए (var i = 0; i < positionData.length; i++) { यदि (positionData[i].ContractType == tradeType) { यदि (स्थितिData[i].Type == type) { यदि (स्थितिData[i].Sum > 0) { रिटर्न पोजीशनData[i].amount; } } } } गलत लौटाता है; }
// नए के-लाइन डेटा और बोल संकेतक डेटा का संश्लेषण डेटा.प्रोटोटाइप.बोल = फ़ंक्शन (संख्या, समयचक्र) { var self = {}; // अस्थायी वस्तुएं // सकारात्मक मध्यस्थता मूल्य अंतर और नकारात्मक मध्यस्थता मूल्य अंतर के बीच मध्यवर्ती मूल्य self.Close = (this.basb + this.sabb) / 2; यदि (this.timeA == this.timeB) { self.time = this.time; } // दो गहराई डेटा टाइमस्टैम्प की तुलना करें यदि (this.time - oldTime > timeCycle * 60000) { बार्स.पुश ((स्वयं); oldTime = this.time; } // निर्दिष्ट समय अवधि के अनुसार K-लाइन सरणी में मूल्य अंतर डेटा ऑब्जेक्ट में पास करें यदि (बार.लंबाई > संख्या * 2) { bars.shift(); // K-लाइन सरणी की लंबाई को नियंत्रित करें } अन्य { वापसी; } var boll = TA.BOLL(बार, num, 2); // तालिब लाइब्रेरी में बॉल संकेतक कॉल रिटर्न { ऊपरः बॉल[0][बॉल[0].लंबाई - 1], // बॉल संकेतक ऊपरी ट्रैक मध्यः बॉल[1][बॉल[1].लंबाई - 1], // बॉल संकेतक मध्य ट्रैक नीचेः बॉल[2][बॉल[2].लंबाई - 1] // बॉल संकेतक नीचे ट्रैक } // संसाधित बॉल संकेतक डेटा लौटाता है }
// ऑर्डर करें
Data.prototype.trade = फ़ंक्शन (tradeType, type) {
exchange.SetContractType(tradeType); // आदेश देने से पहले एक अनुबंध के लिए पुनः सदस्यता लें
var askPrice, bidPrice;
यदि (tradeType == tradeTypeA) { // यदि ऑर्डर अनुबंध A में रखा गया है
askPrice = this.askA; // सेट askPrice
bidPrice = this.bidA; // bidPrice सेट करें
} अन्यथा यदि (tradeType == tradeTypeB) { // यदि आदेश अनुबंध B में रखा गया है
askPrice = this.askB; // सेट askPrice
bidPrice = this.bidB; // bidPrice सेट करें
}
स्विच (प्रकार) { // मैच ऑर्डर प्लेसमेंट मोड
मामला
// आदेश रद्द करें डेटा.प्रोटोटाइप.रद्द करेंOrders = फ़ंक्शन () { नींद ((500); // रद्द करने से पहले देरी, क्योंकि कुछ एक्सचेंजों, आप जानते हैं कि मेरा क्या मतलब है var आदेश = _C(exchange.GetOrders); // अनफिल ऑर्डर की एक सरणी प्राप्त करें if (orders.length > 0) { // यदि अधूरे आदेश हैं for (var i = 0; i < orders.length; i++) { // अधूरे आदेशों के सरणी के माध्यम से पुनरावृत्ति exchange.CancelOrder(ऑर्डर[i].Id); // एक-एक करके अनफिल किए गए ऑर्डर रद्द करें नींद ((500); // 0.5 सेकंड के लिए नींद } false लौटाएँ; // यदि एक अधूरा आदेश रद्द किया जाता है तो false लौटाएँ } true लौटाता है; // यदि कोई अनफिल ऑर्डर नहीं हैं तो true लौटाता है }
// व्यक्तिगत अनुबंध रखने से निपटें डेटा.प्रोटोटाइप.इजEven = फ़ंक्शन () { var positionData = this.positionData; // स्थिति जानकारी प्राप्त करें var प्रकार = शून्य; // स्थिति दिशा स्विच करें // यदि शेष 2 स्थिति सरणी लंबाई 0 के बराबर नहीं है या स्थिति सरणी लंबाई 2 के बराबर नहीं है यदि (positionData.length % 2!= 0और स्थितिData.length!= 2) { for (var i = 0; i < positionData.length; i++) { // स्थिति सरणी के माध्यम से पुनरावृत्ति यदि (positionData[i].Type == 0) { // यदि यह एक लंबा आदेश है type = 10; // क्रम पैरामीटर सेट करें } else if (positionData[i].Type == 1) { // यदि यह एक छोटा आदेश है प्रकार = -10; // क्रम पैरामीटर सेट करें } // सभी पदों को बंद करें this.trade(positionData[i].ContractType, type, positionData[i].Amount); } } }
// चित्रण डेटा.प्रोटोटाइप.चित्रचित्र = कार्य (गोल) { var nowTime = नया दिनांक().getTime(); ObjChart.add (([0, [nowTime, boll.up]]); ObjChart.add (([1, [nowTime, boll.middle]]); ObjChart.add (([2, [nowTime, boll.down]]); ObjChart.add (([3, [nowTime, this.basb]]); ObjChart.add (([4, [nowTime, this.sabb]]); ObjChart.update ((चैट); }
// व्यापार की शर्तें
फ़ंक्शन चालू है
var data = new Data ((tradeTypeA, tradeTypeB); // एक बुनियादी डेटा ऑब्जेक्ट बनाएँ
var accountStocks = data.accountData.Stocks; // खाता शेष
var boll = data.boll ((dataLength, timeCycle); // boll संकेतक डेटा प्राप्त करें
if (!boll) return; // यदि कोई boll डेटा नहीं है तो वापस करें
मूल्य अंतर की व्याख्या
// basb = (अनुबंध A की एक कीमत बेचें - अनुबंध B की एक कीमत खरीदें)
// sabb = (अनुबंध A की एक कीमत खरीदें - अनुबंध B की एक कीमत बेचें)
यदि (data.sabb > boll.middle && data.sabb < boll.up) { // यदि sabb मध्य ट्रैक से अधिक है
यदि (data.mp(tradeTypeA, 0)) { // आदेश देने से पहले जांचें कि अनुबंध A में लंबे आदेश हैं या नहीं
data.trade(tradeTypeA,
// प्रविष्टि कार्य
मुख्य फंक्शन
// कंसोल में अप्रासंगिक जानकारी फ़िल्टर करें
SetErrorFilter ((
इसलिए, हम लाभ कमाने के लिए मूल्य अंतर पर कम खरीद सकते हैं और उच्च बेच सकते हैं। फिर, सांख्यिकी में मानक विचलन के सिद्धांत के अनुसार, बोलिंगर बैंड को एक मध्य ट्रैक और मानक विचलन द्वारा गणना की गई ऊपरी और निचले ट्रैक द्वारा गठित किया जाता है, तीन जाल बैंड का गठन, जो मूल्य अंतर आर्बिट्रेज लेनदेन में बहुत व्यावहारिक हैं।
परीक्षण के बाद, इस रणनीति के अनुसार काम करने के बाद, समग्र आय अपेक्षाकृत स्थिर है, हालांकि हैंडलिंग शुल्क और प्रभाव लागत पर विचार किए बिना आय हर बार बहुत अधिक नहीं होती है। यह ध्यान दिया जाना चाहिए कि सांख्यिकीय मध्यस्थता के कारण, मूल्य अंतर के उलट विस्तार का जोखिम है। हमें डिजाइन करते समय स्टॉप-लॉस समस्या पर विचार करना चाहिए। दूसरा, हमें प्रभाव लागत पर भी ध्यान देने की आवश्यकता है। जब लेनदेन में शामिल दो अनुबंधों की तरलता सिकुड़ जाती है, तो इसका आय पर बहुत प्रभाव पड़ेगा, और निवेशकों को उचित रूप से इससे बचना चाहिए।
पिछले दो कक्षाओं में, हमने MyLanguage में एक प्रवृत्ति रणनीति और जावास्क्रिप्ट में एक मध्यस्थता रणनीति लिखी। हमने रणनीति बैकटेस्ट में कोई समस्या नहीं देखी। हालांकि, मात्रात्मक व्यापार एक प्रोग्राम नहीं है, जिसका बैकटेस्ट सीधे बिना किसी समस्या के किया जा सकता है।
वास्तव में, बैकटेस्ट केवल रणनीति का एक अनुकरण है। इसका उपयोग केवल ऐतिहासिक डेटा में रणनीति के प्रदर्शन का मूल्यांकन करने के लिए किया जाता है। यह व्यापारियों को कुछ ट्रेडिंग रणनीतियों का मूल्यांकन और जल्दी से त्याग करने की अनुमति देता है।
कई मामलों में, बैकटेस्ट में अच्छी दिखने वाली रणनीतियाँ कई कारणों से वास्तविक बाजार में बैकटेस्ट मानक को पूरा करने में विफल रहती हैं। उनमें से कुछ व्यापारियों के नियंत्रण से परे हैं, लेकिन कुछ विफलताएं आम या संभावित त्रुटियों के कारण होती हैं।
हमें पहले मात्रात्मक करने के लिए स्थैतिक डेटा और गतिशील डेटा की अवधारणा होनी चाहिए। बैकटेस्ट में, हम स्थैतिक ऐतिहासिक डेटा का उपयोग करते हैं। प्रत्येक K-लाइन के साथ उच्च खोलने और कम बंद करने की कीमत पूरी हो जाती है, और प्रत्येक लेनदेन संकेत 100% बंद किया जा सकता है। लेकिन वास्तविक बाजार में डेटा गतिशील है। उदाहरण के लिए, यदि अधिकतम मूल्य खोलने के 1 घंटे के भीतर अधिकतम मूल्य से अधिक है, तो खरीदें। लेकिन यदि वर्तमान K-लाइन समाप्त नहीं हुई है, तो अधिकतम मूल्य गतिशील है, और ट्रेडिंग सिग्नल आगे और पीछे झिलमिलाहट कर सकता है। यह स्थिति इंगित करती है कि रणनीति खरीद और बिक्री व्यापार की शर्तों का न्याय करने में भविष्य के कार्य का उपयोग करती है।
भविष्य का कार्य क्या है? आइए पहले बैडु विश्वकोश की व्याख्या पर एक नज़र डालें: एक मात्रा एक अन्य मात्रा पर निर्भर करती है, जैसे मात्रा A और मात्रा B. यदि B बदलती है, तो A बदलता है, तो A B का कार्य है। यदि B एक बाद की मात्रा है, तो A एक पहले की मात्रा है, A B के साथ बदलता है, और A B का भविष्य का कार्य है। आप भ्रमित हो सकते हैं।
सामान्य तौर पर बोलते हुए, यह भविष्य के डेटा को उद्धृत करने का एक कार्य है, जैसे कि कल की कीमत के साथ कल की कीमत का पूर्वानुमान। यदि किसी तकनीकी संकेतक में भविष्य का कार्य होता है, तो इसका संकेत अनिश्चित होता है। यह अक्सर वर्तमान लेनदेन संकेत होता है। जब अगली के-लाइन दिखाई देती है, तो संकेत गायब हो जाता है या स्थिति बदल जाता है।
समापन मूल्य एक भविष्य का कार्य है। समापन मूल्य हमेशा तब तक बदलता रहता है जब तक कि नवीनतम K-लाइन समाप्त न हो जाए। आपको समापन मूल्य निर्धारित करने के लिए K-लाइन समाप्त होने तक इंतजार करना होगा। चूंकि समापन मूल्य स्वयं एक भविष्य का कार्य है, इसलिए समापन मूल्य पर आधारित सभी तकनीकी संकेतक भी भविष्य के कार्य हैं।
इसलिए, यदि कोई तकनीकी संकेतक आधारभूत डेटा के रूप में पुष्टि किए गए समापन मूल्य का उपयोग करता है, तो ट्रेडिंग सिग्नल नहीं बदलेगा, चाहे वह कितना भी समय बीत गया हो, यह कहा जा सकता है कि तकनीकी संकेतक भविष्य के फ़ंक्शन को संदर्भित नहीं करता है। लेकिन इसका उपयोग करने वाले आधारभूत डेटा असत्यापित समापन मूल्य है, इसलिए यह तकनीकी संकेतक भविष्य के फ़ंक्शन को संदर्भित करता है, और व्यावहारिक अनुप्रयोग में ट्रेडिंग सिग्नल बदल सकता है।
फ्यूचर फ़ंक्शन भविष्य की कीमत का उपयोग करता है, जो इसके विपरीत अतीत की कीमत का भी उपयोग कर सकता है। यह भी एक समस्या है जिसे कई नौसिखिए नजरअंदाज करते हैं। भविष्य में इस समस्या को बेहतर ढंग से चित्रित करने के लिए, आइए एक उदाहरण लेते हैंः यदि वर्तमान अधिकतम मूल्य उद्घाटन के 1 घंटे के भीतर अधिकतम मूल्य से अधिक है, तो उद्घाटन मूल्य पर खरीदें। जाहिर है, खरीद और बिक्री संकेत की शर्तों के साथ कोई समस्या नहीं है, लेकिन ऑर्डर की कीमत ने पिछले मूल्य का उपयोग किया है।
बैकटेस्ट में, रणनीति सामान्य है, क्योंकि स्टैटिक डेटा पर आधारित बैकटेस्ट इंजन केवल खरीद संकेत होने पर ही 100% बंद हो सकता है। हालांकि, जब खोलने के 1 घंटे के भीतर उच्चतम मूल्य उच्चतम मूल्य से अधिक होता है, तो यह निश्चित है कि ऑर्डर पिछले मूल्य उद्घाटन मूल्य पर जारी नहीं किया जा सकता है।
तथाकथित मूल्य वैक्यूम का तात्पर्य K-लाइन चार्ट पर प्रदर्शित कीमतों से है, लेकिन वास्तविक बाजार में कारोबार नहीं किए जा सकने वाले कीमतों से है, जो मुख्य रूप से निम्नलिखित मामलों में विभाजित हैंः
ओवरफिटिंग मात्रात्मक ट्रेडिंग के शुरुआती लोगों द्वारा की जाने वाली एक आम गलती है। ओवरफिटिंग क्या है? एक सरल उदाहरण लेने के लिए, कुछ लोग स्कूल परीक्षा में प्रत्येक प्रश्न को याद करने के लिए बहुत सारे अभ्यास का उपयोग करते हैं। वह ऐसा नहीं कर सकता है यदि परीक्षा के दौरान विषय थोड़ा बदल जाता है। क्योंकि उसने प्रत्येक प्रश्न के अभ्यास को बहुत जटिल तरीके से याद किया, उसने सामान्य नियमों को अमूर्त नहीं किया।
उपरोक्त चार्ट की तरह, एक मॉडल डेटा के लिए पूरी तरह से अनुकूलित हो सकता है जब तक कि यह पर्याप्त जटिल है। यह मात्रात्मक व्यापार में ओवरफिट के लिए भी सच है। यदि आपकी रणनीति जटिल है और इसमें कई बाहरी पैरामीटर हैं, तो हमेशा एक या कई पैरामीटर होंगे जो सीमित ऐतिहासिक डेटा बैकटेस्ट में ऐतिहासिक बाजार में पूरी तरह से फिट हो सकते हैं।
हालांकि, भविष्य के वास्तविक बाजार में, मूल्य परिवर्तन आपकी रणनीति सीमा से अधिक हो सकता है। वास्तव में, मात्रात्मक व्यापार रणनीति विकास का सार बड़ी संख्या में प्रतीत होने वाले यादृच्छिक डेटा से स्थानीय गैर-एडवांस्ड डेटा से मिलान करने की प्रक्रिया है। इसलिए, हमें जाल से बचने के लिए सांख्यिकीय ज्ञान का उपयोग करने की आवश्यकता है। हम इसे कैसे करते हैं?
समझौता समाधान इंट्रा-सैंपल और एक्सट्रा-सैंपल डेटा का उपयोग करना है। पूरे डेटा को दो भागों में विभाजित करें, और इंट्रा-सैंपल को प्रशिक्षण सेट के रूप में उपयोग करें, जो डेटा बैकटेस्ट के लिए जिम्मेदार है। एक्सट्रा-सैंपल का उपयोग परीक्षण सेट के रूप में किया जाता है और सत्यापन के लिए जिम्मेदार है। यदि कम ऐतिहासिक डेटा है, तो आप क्रॉस-टेस्ट विधि का भी उपयोग कर सकते हैं।
यदि आपको पता चलता है कि नमूना से बाहर डेटा अच्छा प्रदर्शन नहीं करता है, और आपको लगता है कि यह मॉडल खोने के लिए बहुत बुरा है या आप यह स्वीकार करने के लिए तैयार नहीं हैं कि आपका मॉडल अच्छा नहीं है, और आप अतिरिक्त नमूना डेटा के लिए मॉडल को अनुकूलित करना जारी रखते हैं जब तक कि अतिरिक्त नमूना डेटा भी अच्छा प्रदर्शन नहीं करता है, तो आपको अंत में अपना पैसा खोना होगा।
उत्तरजीविता पूर्वाग्रह को निम्नलिखित उदाहरणों से समझाया जा सकता हैः 1. जब ट्यूइरे पर खड़े होते हैं, तो सूअर उड़ जाते हैं। 2. ऑनलाइन पैराशूट बेचने वाले लोगों की प्रशंसा की जाती है, क्योंकि पैराशूट के साथ समस्या वाले लोग अब नहीं रहते हैं। 3. रिपोर्टर ने पूछा कि क्या यात्रियों ने बस में टिकट खरीदे हैं, क्योंकि बिना टिकट वाले लोग बस में नहीं चढ़ सकते। 4. मीडिया यह प्रचार करता है कि लॉटरी जीती जा सकती है, क्योंकि जो लोग लॉटरी नहीं जीतते हैं, उन्हें मीडिया सक्रिय रूप से प्रचारित नहीं करेगा।
उपरोक्त उदाहरण में, हम पा सकते हैं कि जो जानकारी आमतौर पर लोग प्राप्त करते हैं, वह वास्तव में फ़िल्टर की जाती है, जिससे बड़ी संख्या में डेटा या नमूने चुनिंदा रूप से अनदेखी कर दिए जाते हैं, और परिणाम यह है कि उत्तरजीविता पूर्वाग्रह पर आधारित निष्कर्ष वास्तविक समय से विचलित हो गए हैं। इसलिए मात्रात्मक व्यापार में, हमें इस बात पर भी ध्यान केंद्रित करने की आवश्यकता है कि क्या बैकटेस्ट के परिणाम भाग्य का हिस्सा हैं। कई मामलों में बैकटेस्ट के परिणाम पूरे बैकटेस्ट में सबसे अच्छा प्रदर्शन हो सकते हैं। निम्नलिखित आंकड़े पर ध्यान देंः
बायीं ओर की तस्वीर एक बहुत अच्छी ट्रेडिंग रणनीति है। पूंजी वक्र अच्छा है, और कोई महत्वपूर्ण निकासी नहीं है, और स्थिर लाभ रिटर्न प्राप्त किया जा सकता है। लेकिन दाईं ओर की तस्वीर को देखें। यह सैकड़ों बैकटेस्ट लेनदेन में केवल सबसे अच्छा है। दूसरी ओर, जब हम वित्तीय बाजार को देखते हैं, तो हमेशा अधिक सितारे और कम दीर्घायु सितारे होते हैं। यदि व्यापारियों की रणनीति बाजार की स्थिति के अनुरूप है, तो बाजार हर साल सितारों का एक बैच बना सकता है, लेकिन दीर्घायु सितारों को देखना मुश्किल है जो लगातार तीन साल से अधिक समय तक स्थिर लाभ कमा सकते हैं।
जब तक आप एक ऑर्डर लंबित नहीं कर रहे हैं, तब तक आपके पास ट्रेडिंग करते समय एक स्लाइडिंग प्राइस हो सकता है। सक्रिय ट्रेडिंग के साथ किस्मों पर, बोली-मूल्य और पूछें-मूल्य आमतौर पर एक बिंदु पर अलग होते हैं। निष्क्रिय ट्रेडिंग के साथ किस्मों पर, अंतर अधिक हो सकता है। हर बार जब आप सौदा बंद करने की पहल करना चाहते हैं, तो आपको कम से कम एक बिंदु अंतर की आवश्यकता होती है, या इससे भी अधिक। हालांकि, बैकटेस्ट में, हमें लेनदेन के मुद्दे पर विचार करने की आवश्यकता नहीं है, जब तक कि एक संकेत है, हम व्यापार कर सकते हैं, इसलिए वास्तविक ट्रेडिंग वातावरण का अनुकरण करने के लिए, हमें कम से कम एक स्लाइडिंग मूल्य जोड़ना होगा।
विशेष रूप से उस रणनीति के लिए जो अधिक बार कारोबार की जाती है, यदि रणनीति को बैकटेस्ट करने पर स्लाइडिंग मूल्य नहीं जोड़ा जाता है, तो पूंजी वक्र हमेशा ऊपर की ओर झुकाव करेगा, और एक बार उचित स्लाइडिंग मूल्य जोड़ा जाने के बाद, यह तुरंत नुकसान में बदल जाएगा। इसके अलावा, यह घटना न केवल बिंदु अंतर के कारण होती है, बल्कि वास्तविक व्यापार वातावरण में भी विचार करने की आवश्यकता होती हैः नेटवर्क देरी, सॉफ्टवेयर और हार्डवेयर सिस्टम, सर्वर प्रतिक्रिया और अन्य मुद्दे।
एक ही रणनीति कुशल और अप्रभावी बाजारों में काफी अलग होगी, यहां तक कि इसके विपरीत भी। उदाहरण के लिए, घरेलू शेयर बाजारों, कमोडिटी वायदा और विदेशी डिजिटल मुद्राओं जैसे अप्रभावी बाजारों में, व्यापारिक मात्रा के छोटे आधार के कारण, उच्च आवृत्ति रणनीति की क्षमता स्वयं बहुत बड़ी नहीं है, और अधिक लोगों के लिए कोई लाभ स्थान नहीं है, और यहां तक कि एक रणनीति जो मूल रूप से लाभदायक थी, एक हानि बन गई है। लेकिन एक कुशल विदेशी मुद्रा बाजार में, यह कई अलग-अलग प्रकार की उच्च आवृत्ति रणनीतियों को समायोजित कर सकता है।
उपरोक्त समस्याएं और जाल हैं जो रणनीतियों के विकास और उपयोग में हो सकती हैं। एक अनुभवी ट्रेडिंग सिस्टम डेवलपर के लिए, बैकटेस्टिंग एक जरूरी है। क्योंकि यह आपको बता सकता है कि क्या एक रणनीतिक विचार को ऐतिहासिक लेनदेन में सत्यापित किया जा सकता है। लेकिन कई बार, बैकटेस्टिंग का मतलब यह नहीं है कि यह भविष्य में लाभदायक होगा। क्योंकि बैकटेस्ट में बहुत सारे जाल हैं, आप कुछ पाठों के लिए भुगतान किए बिना नहीं समझेंगे। यह कोर्स कम से कम कई मात्रात्मक डिटॉर और जाल से बचने में आपकी मदद कर सकता है।
यहां तक कि लिवरमोर ने अंत में सांस लीः प्रवृत्ति के बारे में कुछ भी उल्लेखनीय नहीं है। हमेशा बहुत से लोग होते हैं जो बुल बाजार में तेजी से बढ़ते हैं और भालू बाजार में मंदी होते हैं। लेकिन वे हमेशा बाजार के साथ सौदेबाजी करने में अच्छे होते हैं, सबसे निचले बिंदु पर खरीदने और उच्चतम बिंदु पर बेचने की कोशिश करते हैं। ओल्ड टर्की की तरह, यह वे हैं जो बाजार को देखते हैं और अपनी स्थिति रखते हैं जो वास्तव में एक बड़ा भाग्य बनाते हैं, जो सीखने के लिए भी सबसे कठिन है। यह न केवल लक्ष्य और समय की पसंद का सामना करता है, बल्कि एक अधिक महत्वपूर्ण प्रश्न का भी सामना करता हैः हमें कितनी स्थिति (जोखिम) रखना चाहिए (भालू)?
सभी असफल व्यापारियों में एकतरफा सोच होती है। व्यापार करते समय, लालची लोग केवल जोखिम के बजाय लाभ देखते हैं, जबकि शर्मीले लोग केवल लाभ के बजाय जोखिम देखते हैं। लालची और शर्मीले लोग जोखिम को बढ़ते समय भूल जाते हैं, और गिरते समय लाभ को भूल जाते हैं। हालांकि, सफल व्यापारी जोखिम और रिटर्न दोनों पर विचार करेंगे, यानी वे प्रत्येक डॉलर के लिए जोखिम के कई डॉलर उठाते हैं जो वे कमाते हैं। फिर रिटर्न और जोखिम को मापने के लिए सूचकांक रिटर्न जोखिम अनुपात है।
बहुत से लोग जानते हैं कि जोखिम उतना ही बड़ा होता है जितना लाभ, अर्थात रिटर्न जोखिम के आनुपातिक होता है। कुछ लोगों के विचार में रिटर्न और जोखिम के बीच का संबंध इस प्रकार होना चाहिए: क्षैतिज अक्ष जोखिम का प्रतिशत है, और ऊर्ध्वाधर अक्ष रिटर्न का प्रतिशत हैः
लेकिन वास्तविक लेनदेन में, रिटर्न और जोखिम एक रेखा के दो बिंदुओं के रूप में सरल होने से बहुत दूर हैं, कम से कम यह हमेशा रैखिक रूप से नहीं चलता है। वास्तविक जोखिम अधिकतम हानि की मात्रा है जिसे अपेक्षित रिटर्न के साथ लिया जा सकता है, या जिसे हम अधिकतम अस्थिरता कहते हैं। हालांकि कभी-कभी अधिकतम फ्लोटिंग हानि हमेशा व्यापार के परिणाम के संदर्भ में समापन हानि के बराबर नहीं होती है, अधिकतम फ्लोटिंग हानि वास्तविक है।
इससे हम यह जान सकते हैं कि उपरोक्त चित्र में जोखिम पर रिटर्न का अनुपात वास्तविक प्रदर्शन नहीं है। वास्तविक व्यापारिक वातावरण में जोखिम पर रिटर्न का अनुपात नीचे दिए गए चार्ट के समान होना चाहिएः
आइए ऊपर दिए गए चार्ट को देखें। पीला वक्र विभिन्न जोखिमों पर शुद्ध संपत्ति के उतार-चढ़ाव को दर्शाता है। अपेक्षित रिटर्न के विस्तार के साथ, जोखिम भी धीरे-धीरे विस्तार कर रहे हैं। यदि हम दिवालियापन को 0.5 पर सेट करते हैं, यानी अधिकतम नुकसान 50% तक पहुंच जाता है, तो यह एक असफल ट्रेडिंग रणनीति है। हालांकि रणनीति का अंतिम रिटर्न परिणाम से सकारात्मक है, लेकिन यह पहले से ही बीच में दिवालिया हो गया है।
यहां तक कि अगर आपकी रणनीति सकारात्मक है, तो यह गलत स्थिति प्रबंधन के तहत परिसमापन होगा। इसलिए इस दृष्टिकोण से, कब खरीदना और बेचना है, उससे ज्यादा कितना खरीदना और बेचना महत्वपूर्ण है। वित्तीय लेनदेन में स्थिति को वैज्ञानिक रूप से कैसे प्रबंधित किया जाए, यह एक मौलिक मुद्दा बन गया है। इसलिए इस समस्या को हल करने की कोशिश करने से पहले, आइए देखें कि जुआ में वैज्ञानिक रूप से कैसे दांव लगाया जाए।
चलिए सिक्का फेंकने का उदाहरण लेते हैं। मान लीजिए कि सिक्के के दोनों पक्ष समान रूप से भारित हैं। यदि 2 युआन का सिर लाभ है और 1 युआन का पूंछ नुकसान है, तो यह स्पष्ट है कि यह एक सकारात्मक अपेक्षा खेल है। जीत की दर 50% है और 2 का नुकसान है। यहाँ सवाल आता हैः अब जब आपके पास 100 युआन हैं, तो आप शर्त को कैसे दोहरा सकते हैं ताकि 100 युआन सबसे तेज गति से 1 मिलियन युआन तक पहुंच सकें।
अगर हम ध्यान से न सोचें, तो हम सोचेंगे कि चूंकि प्रत्येक दांव का रिटर्न 50% * 2-50% * 1 है, यानी 50%, तो अधिकतम रिटर्न जल्दी प्राप्त करने के लिए, हमें प्रत्येक दांव में जितना संभव हो उतना पूंजी निवेश करना चाहिए। यह दांव 100% होना चाहिए।
हालाँकि, यह स्पष्ट है कि जुआ खेलने के हर खेल में पूंजी का 100% निवेश करना अनुचित है, क्योंकि जब तक आप एक बार पूंजी खो देते हैं, तब तक यह खो जाएगा, भले ही यह बहुत संभावना न हो। क्योंकि जब तक आप पर्याप्त बार जुआ खेलते हैं, तब तक पैसा खोना निश्चित रूप से होगा।
कोई पूछ सकता है, चूंकि 100% दांव तर्कहीन है, तो 90% या कम दांव के बारे में क्या? वास्तव में, इस समस्या को हल करने के लिए, हम जुआ खेल का अनुकरण करने के लिए एक प्रयोग कर सकते हैं और देख सकते हैं कि प्रत्येक दांव का परिणाम कैसा है। जैसा कि निम्नलिखित चार्ट में दिखाया गया हैः
चार्ट से हम देख सकते हैं कि जब हम एक ही जुए में 90%, 80%, 70%, 60% और 50% से स्थिति को धीरे-धीरे कम करते हैं, तो परिणाम पूरी तरह से अलग होते हैं। सावधान दोस्तों ने देखा होगा कि स्थिति के धीरे-धीरे कमी के साथ, अंतिम पूंजी धीरे-धीरे विस्तार कर रही है।
फिर कुछ लोग पूछ सकते हैं कि क्या हर बार दांव जितना छोटा होता है, उतना बेहतर होता है, जैसे कि 10%। हर दांव अनुपात की गणना करना असंभव है। यह प्रसिद्ध केली मानदंड द्वारा हल की जाने वाली समस्या है। सांख्यिकी में, केली मानदंड दोहराए गए दांव की सकारात्मक उम्मीद के साथ रणनीति की दीर्घकालिक वृद्धि दर को अधिकतम कर सकता है, और यह प्रत्येक दांव में सबसे अच्छा दांव अनुपात की गणना कर सकता है।
केवल इतना ही नहीं, यह मानते हुए कि मूल और दांव को अंतहीन रूप से विभाजित किया जा सकता है, केली मानदंड का उपयोग करके किसी भी दांव में दिवालिया होना असंभव है। विशेष रूप से वित्तीय लेनदेन के व्यावहारिक अनुप्रयोग में, यह हमला और रक्षा दोनों के साथ स्थिति प्रबंधन रणनीति है। आइए देखें कि केली मानदंड की गणना कैसे की जाती है, और निम्नलिखित चित्र देखेंः
फिर हम इस पाठ में केली मानदंड के अनुसार जुआ उदाहरण की गणना कर सकते हैं। 100 युआन की प्रारंभिक पूंजी सबसे तेज गति से 1 मिलियन युआन तक पहुंच सकती है जब जीतने का अनुपात 50% और बाधा 2 है।
(0.5*(2+1) -1)/2=0.25
50% की जीत की दर 0.5 है। 2 से गुणा करें, 1 से घटाएं, और फिर 2 से विभाजित करें। गणना का परिणाम 0.25 है। यानी, प्रत्येक दांव में, 25% मूलधन का उपयोग करके, आप सबसे तेज गति से 1 मिलियन युआन तक पहुंच सकते हैं। हम यह देखने के लिए गणना के परिणामों के अनुसार मैन्युअल रूप से अनुकरण कर सकते हैं कि यह सही है या नहीं।
उपरोक्त आंकड़ा मैनुअल सिमुलेशन का परिणाम है। कृपया अंतिम पंक्ति देखें। उसी दांव में, 100 से अधिक राउंड के बाद, 25% पदों ने पहले 1 मिलियन युआन तक पहुंच लिया। 90%, 80%, 70% और 60% पदों का परिणाम नकारात्मक है, जो दिखाता है कि गलत स्थिति प्रबंधन के तहत सकारात्मक अपेक्षा व्यापार रणनीति भी दिवालिया हो जाएगी।
हम यह भी देख सकते हैं कि 50% पद अंत में हार या जीत नहीं पाएंगे, जो बड़ी संख्याओं के कानून के परिणाम के अनुरूप है। समस्या को और अधिक स्पष्ट करने के लिए, मैनुअल सिमुलेशन में 10% की स्थिति भी जोड़ी गई थी। हालांकि अंतिम परिणाम एक सकारात्मक रिटर्न था, प्रभाव 25% की स्थिति की तुलना में कई परिमाण के आदेश खराब था।
आप केली मानदंड की शक्ति देख सकते हैं. यदि आप वास्तविक आवेदन में मुख्य स्थिति का 10% चुनते हैं, तो आपका मुख्य 100 से अधिक दांवों में 30,000 से अधिक हो जाएगा. हालांकि रिटर्न बड़ा है, 25% मुख्य स्थिति की तुलना में, यह कोई लाभ के बराबर है. यह ज्ञान की शक्ति है.
यदि आप जीवन में केली मानदंड से लाभ कमाना चाहते हैं, तो आपको केली मानदंड की आवेदन शर्तों को पूरा करने की आवश्यकता है। इसमें कोई संदेह नहीं है कि यह दांव वित्तीय बाजार से आना चाहिए। विशेष रूप से मात्रात्मक व्यापार में, हम ऐतिहासिक डेटा बैकटेस्टिंग के माध्यम से संबंधित जीत अनुपात और बाधाओं की मोटे तौर पर गणना कर सकते हैं।
बेशक, वित्तीय लेनदेन में केली मानदंड का व्यावहारिक अनुप्रयोग इतना सरल नहीं हो सकता है, और कई विवरण हैं जिनसे निपटना है, जैसे कि लीवरेज लेनदेन में पूंजी की लागत, वास्तविक लेनदेन में पूंजी और स्थिति को वायरलेस रूप से विभाजित नहीं किया जा सकता है, और लेनदेन में जीतने का अनुपात और हानि अनुपात गतिशील रूप से बदल रहे हैं, और इसी तरह। वैसे भी, केली मानदंड हमें दिखाता है कि सबसे अच्छी स्थिति प्रबंधन विधि कैसे स्थापित की जाए।