यादृच्छिक पैदल चलने की रणनीति

लेखक:चाओझांग, दिनांक: 2023-10-09 16:10:24
टैगः

अवलोकन

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

रणनीति तर्क

यादृच्छिक व्यापार को लागू करने वाले मुख्य भाग हैंः

  1. यादृच्छिक संख्या जनरेशन के लिए पैरामीटर a, c और मॉड्यूल m, साथ ही प्रारंभिक बीज सेट करें।

  2. 0-m के बीच यादृच्छिक संख्या उत्पन्न करने के लिए रैखिक संगम एल्गोरिथ्म का उपयोग करके यादृच्छिक संख्या पीढ़ी फ़ंक्शन GetRandom को परिभाषित करें।

  3. प्रत्येक मोमबत्ती पर, यदि कोई स्थिति नहीं है, तो उत्पन्न यादृच्छिक संख्या आकार की तुलना करें, एम / 2 से अधिक होने पर लंबे समय तक जाएं, अन्यथा शॉर्ट जाएं।

  4. प्रतिशत में स्टॉप लॉस और ले लाभ की शर्तें सेट करें.

  5. समय सीमा के अनुसार बैकटेस्ट अवधि सेट करें.

उपरोक्त चरणों के माध्यम से, रणनीति पूरी तरह से यादृच्छिक लंबे / छोटे संचालन का एहसास करती है। जब यादृच्छिक संख्या m / 2 से अधिक होती है तो यह लंबी स्थिति खोलती है, अन्यथा यह छोटी स्थिति खोलती है, फिर स्टॉप लॉस सेट करती है और बाहर निकलने की स्थिति के लिए लाभ लेती है। बैकटेस्ट अवधि अनुकूलन योग्य है।

लाभ विश्लेषण

  • सरल और स्पष्ट रणनीति तर्क, समझने और लागू करने में आसान।

  • यादृच्छिक व्यापार से भावनात्मक प्रभावों से प्रभावी रूप से बचा जाता है और व्यक्तिपरक गलत संचालन को कम किया जाता है।

  • यादृच्छिकता को समायोजित करने के लिए अनुकूलन योग्य यादृच्छिक संख्या पीढ़ी पैरामीटर।

  • एकल लाभ/हानि को नियंत्रित करने के लिए लचीली स्टॉप लॉस और ले लाभ सेटिंग्स।

  • कुल लाभ पर विभिन्न मापदंडों के प्रभाव का बैकटेस्टिंग करके मापदंड अनुकूलन का समर्थन करता है।

जोखिम विश्लेषण

  • यादृच्छिक व्यापार के परिणामस्वरूप अनिश्चित दीर्घकालिक प्रवृत्ति और अनिश्चित लाभप्रदता हो सकती है।

  • बाजार की स्थितियों के आधार पर पदों को समायोजित करने में असमर्थता, रुझान के अवसरों को याद कर सकती है।

  • सीमित एकल लाभ, उच्च निकासी जोखिम।

  • महत्वपूर्ण घाटे से बचने के लिए उचित स्टॉप लॉस/टेक प्रॉफिट अनुपात की आवश्यकता होती है।

  • यादृच्छिकता के कारण लगातार खुली/बंद पोजीशनों से ट्रेडिंग की लागत बढ़ जाती है।

  • उचित पैरामीटर सेटिंग्स को सत्यापित करने के लिए पर्याप्त बैकटेस्टिंग की आवश्यकता है, अंधाधुंध उपयोग न करें।

रुझान निर्णय जोड़कर, स्टॉप लॉस तंत्र को अनुकूलित करके, एकल लाभ/हानि आदि पर सख्ती से नियंत्रण करके जोखिमों को कम किया जा सकता है।

सुधार की दिशाएँ

  • प्रवृत्ति के विरुद्ध व्यापार करने से बचने के लिए प्रवृत्ति निर्णय जोड़ें।

  • पूंजी परिवर्तन के आधार पर स्थिति आकार जोड़ें।

  • बेहतर यादृच्छिकता के लिए यादृच्छिक संख्या पीढ़ी एल्गोरिथ्म का अनुकूलन करें।

  • गतिशील स्टॉप लॉस/टेक प्रॉफिट प्रतिशत

  • आदेश आवृत्ति को सीमित करें।

  • बहु-पैरामीटर बैकटेस्ट अनुकूलन.

सारांश

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


/*backtest
start: 2022-10-02 00:00:00
end: 2023-10-08 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//@author=Tr0sT
strategy(title = "Random strategy", shorttitle = "Random", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

a = 16
c = 10
m = 1000
GetRandom(prev) =>
    GetRandom = (a * prev + c) % m

seed = input(200, minval = 2, maxval = m)
stopLoss = input(30, title = "Stop loss percentage(0.1%)")
takeProfit = input(30, title = "Take profit percentage(0.1%)")


curRandom = na
curRandom := nz(curRandom[1]) == 0 ? seed : GetRandom(curRandom[1])
if (strategy.position_size == 0)
    if (curRandom >= m / 2)
        strategy.entry("Enter", strategy.long)
    else
        strategy.entry("Enter", strategy.short)
        
    strategy.exit("Exit", "Enter", loss = close * stopLoss / 1000 / syminfo.mintick, profit = close * takeProfit / 1000 / syminfo.mintick)            

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()

अधिक