60 पंक्ति का कोड एक विचार को साकार करता है - अनुबंध तल मछली पकड़ना

लेखक:निनाबादास, बनाया गयाः 2022-04-02 18:27:54, अद्यतन किया गयाः 2022-04-02 18:29:47

60 पंक्ति का कोड एक विचार को साकार करता है - अनुबंध तल मछली पकड़ना

ग्रिड रणनीति और मार्टिंगेल रणनीति, जो बाजार के उद्धरणों में उतार-चढ़ाव करना पसंद करती है, के अंतर्निहित नुकसान हैं, और इसी तरह की रणनीतियों का परीक्षण ईटीएच अनुबंध बाजार में एक अवधि के लिए किया गया है।FMZ.COM. एक बात है मैं वास्तव में इस प्रकार की रणनीति के बारे में एक दोस्त के साथ सहमत हूं. यह मुद्रा चक्र में अनुबंध करना है, और लंबे समय तक करने का जोखिम शॉर्टिंग करने की तुलना में कम है. या बस बोलते हुए, सबसे खराब गिरावट शून्य पर लौटने के लिए है, लेकिन वृद्धि अनंत है.

तो, मार्टिंगेल और ग्रिड जैसी रणनीतियाँ केवल लंबी होती हैं, लेकिन छोटी नहीं होती हैं? क्या द्विपक्षीय करने की तुलना में लंबी दूरी पर तल मछली पकड़ने के जोखिम को फैलाना बेहतर है? यह विचार बहुत अच्छा लगता है, लेकिन कोई नहीं जानता कि यह वास्तविक लड़ाई का सामना कर सकता है या नहीं। लेकिन कम से कम हम इस विचार को बस बैकटेस्ट कर सकते हैं। इसलिए, हमारे पास आज के लेख का विषय है - एक अनुबंध तल मछली पकड़ने की रणनीति डिजाइन करें।

तेजी से विकास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)
    }
}

मापदंडों का डिजाइन भी बहुत सरल हैः

img

केवल कुछ मापदंड हैं।

चलो दर्जनों कोड लाइनों के बैकटेस्ट परिणाम देखते हैं

बैकटेस्ट समय सीमा को यादृच्छिक रूप से सेट करेंः

img

बैकटेस्टः

img

img

यह एक ग्रिड या मार्टिंगेल प्रकार की रणनीति की तरह दिखता है। क्या नए सीखने वाले जो अभी शुरू कर रहे हैं, वे इस तरह की लंबी रणनीतियों से बहुत डरते हैं और आसानी से छोड़ने के लिए राजी हो जाते हैं? एक संक्षिप्त और संक्षिप्त रणनीति परिचय अधिक उपयुक्त है, और रणनीति विचारों को पचाने और तार्किक डिजाइन सीखना आसान है।

उपरोक्त रणनीतिक कोड केवल अध्ययन और अनुसंधान के लिए उपयोग किए जाते हैं।


अधिक