अस्थिर बाज़ारों को प्राथमिकता देने वाली रणनीतियाँ, जैसे कि ग्रिड रणनीति और मार्टिंगेल रणनीति, में अंतर्निहित कमियाँ होती हैं। इसी तरह की रणनीतियों का परीक्षण कुछ समय के लिए ETH अनुबंध बाज़ार में किया गया है। मैं अक्सर 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)
}
}
पैरामीटर डिज़ाइन भी बहुत सरल है:
ये केवल कुछ पैरामीटर हैं।
बस बैकटेस्ट समय सीमा निर्धारित करें:
बैकटेस्ट रन:
यह बहुत हद तक ग्रिड या मार्टिन प्रकार की रणनीति की तरह दिखता है। क्या नए विद्यार्थी जो अभी सीखना शुरू कर रहे हैं, लम्बी रणनीतियों से डरते हैं और आसानी से हतोत्साहित हो जाते हैं? रणनीतियों का संक्षिप्त और सारगर्भित परिचय अधिक उपयुक्त होता है, जिससे रणनीतिक विचारों को समझना और तार्किक डिजाइन सीखना आसान हो जाता है।
रणनीति कोड केवल सीखने और अनुसंधान के उद्देश्यों के लिए है।