ग्रिड रणनीति और मार्टिंगेल रणनीति, जो बाजार के उद्धरणों में उतार-चढ़ाव करना पसंद करती है, के अंतर्निहित नुकसान हैं, और इसी तरह की रणनीतियों का परीक्षण ईटीएच अनुबंध बाजार में एक अवधि के लिए किया गया है।FMZ.COM. एक बात है मैं वास्तव में इस प्रकार की रणनीति के बारे में एक दोस्त के साथ सहमत हूं. यह मुद्रा चक्र में अनुबंध करना है, और लंबे समय तक करने का जोखिम शॉर्टिंग करने की तुलना में कम है. या बस बोलते हुए, सबसे खराब गिरावट शून्य पर लौटने के लिए है, लेकिन वृद्धि अनंत है.
तो, मार्टिंगेल और ग्रिड जैसी रणनीतियाँ केवल लंबी होती हैं, लेकिन छोटी नहीं होती हैं? क्या द्विपक्षीय करने की तुलना में लंबी दूरी पर तल मछली पकड़ने के जोखिम को फैलाना बेहतर है? यह विचार बहुत अच्छा लगता है, लेकिन कोई नहीं जानता कि यह वास्तविक लड़ाई का सामना कर सकता है या नहीं। लेकिन कम से कम हम इस विचार को बस बैकटेस्ट कर सकते हैं। इसलिए, हमारे पास आज के लेख का विषय है - एक अनुबंध तल मछली पकड़ने की रणनीति डिजाइन करें।
इस विचार को लागू करने के लिए कोड बहुत सरल है, एफएमजेड प्लेटफॉर्म की लचीलापन, इंटरफ़ेस इनकैप्सुलेशन और शक्तिशाली बैकटेस्ट सिस्टम आदि के लिए धन्यवाद। पूरा कोड केवल 60 पंक्तियों का है (कोड लेखन विनिर्देशों के लिए, कई पंक्तियां जिन्हें छोटा किया जा सकता है, संक्षिप्त नहीं हैं) ।
रणनीति विचार का डिजाइन बहुत सरल है। तर्क की शुरुआत में प्रारंभिक मूल्य के अनुसार, यदि अंतराल की दूरी कम हो रही है, तो एक खरीद आदेश रखें। यदि मूल्य में गिरावट जारी है, तो एक खरीद आदेश रखना जारी रखें, और नीचे मछली पकड़ना रखें। फिर स्थिति मूल्य के बाद बंद स्थिति आदेश को एक निश्चित लाभ स्प्रेड जोड़ने के बाद प्रतीक्षा करें, और बंद होने की प्रतीक्षा करें। यदि स्थिति बंद हो जाती है, तो उपरोक्त तर्क को वर्तमान मूल्य के साथ प्रारंभिक मूल्य के रूप में दोहराया जाता है। रणनीति कम नहीं करती है, केवल लंबी होती है।
रणनीति स्रोत कोडः
function cancelAll() {
while (true) {
var orders = _C(exchange.GetOrders)
if (orders.length == 0) {
break
}
for (var i = 0 ; i < orders.length ; i++) {
exchange.CancelOrder(orders[i].Id, orders[i])
Sleep(interval)
}
}
}
function getLong(arr, kind) {
var ret = null
for (var i = 0 ; i < arr.length ; i++) {
if (arr[i].Type == (kind == "pos" ? PD_LONG : ORDER_TYPE_BUY)) {
ret = arr[i]
}
}
return ret
}
function pendingBidOrders(firstPrice) {
var index = 0
var amount = baseAmount
while (true) {
var pos = _C(exchange.GetPosition)
var price = firstPrice - index * baseSpacing
amount *= ratio
index++
exchange.SetDirection("buy")
exchange.Buy(price, amount)
if (pos.length != 0) {
var longPos = getLong(pos, "pos")
if (longPos) {
exchange.SetDirection("closebuy")
exchange.Sell(longPos.Price + profitTarget, longPos.Amount)
}
}
while (true) {
Sleep(interval)
if (!getLong(_C(exchange.GetOrders), "orders")) {
cancelAll()
break
}
if (!getLong(_C(exchange.GetPosition), "pos")) {
cancelAll()
return
}
}
}
}
function main() {
exchange.SetContractType(symbol)
while (true) {
pendingBidOrders(_C(exchange.GetTicker).Last)
}
}
मापदंडों का डिजाइन भी बहुत सरल हैः
केवल कुछ मापदंड हैं।
बैकटेस्ट समय सीमा को यादृच्छिक रूप से सेट करेंः
बैकटेस्टः
यह एक ग्रिड या मार्टिंगेल प्रकार की रणनीति की तरह दिखता है। क्या नए सीखने वाले जो अभी शुरू कर रहे हैं, वे इस तरह की लंबी रणनीतियों से बहुत डरते हैं और आसानी से छोड़ने के लिए राजी हो जाते हैं? एक संक्षिप्त और संक्षिप्त रणनीति परिचय अधिक उपयुक्त है, और रणनीति विचारों को पचाने और तार्किक डिजाइन सीखना आसान है।
उपरोक्त रणनीतिक कोड केवल अध्ययन और अनुसंधान के लिए उपयोग किए जाते हैं।