अनुकूलनशील चलती औसत के साथ बहु-कारक संयोजन रणनीति

लेखक:चाओझांग, दिनांक: 2023-12-15 11:30:09
टैगः

img

I. रणनीति का अवलोकन

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

II. रणनीतिक तर्क

इस रणनीति का मूल तर्क कई तकनीकी संकेतकों को मिलाकर खरीद और बिक्री संकेतों को स्कोर करना और मिलान परिणामों के आधार पर भिन्न-भिन्न ताकतों के साथ ट्रेडिंग संकेत उत्पन्न करना है।

विशेष रूप से, रणनीति में उपयोग किए जाने वाले चार मुख्य तकनीकी संकेतकों में शामिल हैंः

  1. इंट्राडे बार। रणनीति मूल्य रुझान निर्धारित करने के लिए इंट्राडे बार के रंग का उपयोग करती है। दो लगातार हरे रंग के वास्तविक शरीर के एचए बार खरीद संकेत देते हैं, जबकि दो लगातार लाल खोखले एचए बार बिक्री संकेत देते हैं।

  2. चलती औसत. रणनीति एक साथ विभिन्न पैरामीटर सेटिंग्स के साथ तेजी से, धीमी और फ़िल्टर चलती औसत का उपयोग करती है। जब तेज रेखा धीमी रेखा के ऊपर पार करती है, और धीमी रेखा फ़िल्टर रेखा के ऊपर पार करती है, तो यह खरीद संकेत देती है। और इसके विपरीत। चलती औसत मध्यम से दीर्घकालिक रुझानों को निर्धारित करने में अच्छी हैं।

  3. स्टोकैस्टिक संकेतक. यह संकेतक तेजी और मंदी क्रॉसओवर के समय को निर्धारित करता है. जब %K रेखा नीचे से %D रेखा को तोड़ती है, तो यह खरीद संकेत देती है. और जब %K ऊपर से %D को तोड़ती है, तो यह बिक्री संकेत देती है.

  4. मिलान स्कोर तंत्र. उपरोक्त कारकों के मिलान के अनुसार, रणनीति एक स्कोरिंग तंत्र को अपनाती है। अधिक मिलान कारकों, अधिक मजबूत संबंधित व्यापार संकेत।

कई कारकों के व्यापक निर्णय के माध्यम से, रणनीति मध्यम और अल्पकालिक में अधिक सूक्ष्म व्यापारिक अवसरों को पकड़ सकती है, जिससे बुल बाजारों के दौरान अधिक रिटर्न प्राप्त होता है।

III. लाभ

इस बहु-कारक रणनीति का सबसे बड़ा लाभ यह है कि यह व्यापार संकेतों की विश्वसनीयता को बढ़ाता है। एक एकल तकनीकी संकेतक झूठे संकेत उत्पन्न करने के लिए प्रवण है। कई संकेतकों को जोड़कर, यह रणनीति प्रभावी रूप से झूठे संकेतों से हस्तक्षेप को कम कर सकती है।

इसके अतिरिक्त, केवल एक सूचक का अनुसरण करने की तुलना में, बहु-कारक संयोजन ट्रेडों की जीत दर में सुधार कर सकता है। यह बुल बाजारों के दौरान उच्च संचयी रिटर्न प्राप्त कर सकता है।

IV. जोखिम

इस रणनीति का मुख्य जोखिम यह है कि बहु-कारक संयोजन ही रणनीति की जटिलता को बढ़ाता है। इसे पैरामीटर सेटिंग्स का ध्यान रखने की आवश्यकता है, एक ही समय में कई संकेतकों के लगातार समायोजन।

इसके अलावा, भालू बाजारों के दौरान, होल्डिंग का समय बहुत लंबा हो सकता है। यहां तक कि एक स्टॉप लॉस के साथ, अभी भी महत्वपूर्ण नुकसान हो सकता है।

इसके अतिरिक्त, स्टोकैस्टिक और एचए लाइनों जैसे तकनीकी संकेतकों पर ब्लैक स्वान घटनाओं का प्रभाव पड़ सकता है, जो झूठे संकेत उत्पन्न करते हैं और अनावश्यक नुकसान का कारण बनते हैं।

V. सुधार के विचार

इस रणनीति को निम्नलिखित पहलुओं में अनुकूलित किया जा सकता हैः

  1. इष्टतम संयोजन खोजने के लिए प्रत्येक संकेतक की पैरामीटर सेटिंग्स को अनुकूलित करें।

  2. वास्तविक समय में पैरामीटर अनुकूलन के लिए मॉडल प्रशिक्षण और अनुकूलन पैरामीटर मॉड्यूल जोड़ें।

  3. अधिकतम ड्रॉडाउन को कम करने के लिए स्टॉप लॉस रणनीतियाँ जोड़ें।

  4. बाजार की स्थितियों के आधार पर स्थिति को गतिशील रूप से समायोजित करने के लिए स्थिति नियंत्रण मॉड्यूल जोड़ें।

  5. बहु-कारक स्कोरिंग प्रणाली के लिए एक तंत्रिका नेटवर्क मॉडल बनाने के लिए मशीन लर्निंग एल्गोरिदम शामिल करें।

VI. निष्कर्ष

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


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © cyrule
//@version=4
strategy("2nd Grade Strategy", overlay=true, shorttitle="2GTS", max_lines_count = 500, max_labels_count = 500, calc_on_every_tick = true, calc_on_order_fills = true, pyramiding = 1, default_qty_type = strategy.percent_of_equity, default_qty_value = 10)

source = input(close, title = "Source")

// **********************
// * Heikin-Ahshi       *
// * kudos to garethyeo *
// **********************
showHA   = input(true, title = "Show Heikin Ashi?", group = "Heikin Ashi")
ha_open  = security(heikinashi(syminfo.tickerid), timeframe.period, open)
ha_high  = security(heikinashi(syminfo.tickerid), timeframe.period, high)
ha_low   = security(heikinashi(syminfo.tickerid), timeframe.period, low)
ha_close = security(heikinashi(syminfo.tickerid), timeframe.period, close)

bgcolor(iff(showHA and ha_open < ha_close , color.new(#53b987, transp = 92.5), na), title = 'Green HA')
bgcolor(iff(showHA and ha_open >= ha_close, color.new(#eb4d5c, transp = 92.5), na), title = 'Red HA'  )


// ******************
// * Moving Average *
// ******************
// MA Settings
showMA         = input(true, title = "Show Moving Averages?", group = "Moving Averages")
fastMALength   = input(title = "Fast MA Length", minval = 1, step = 1, defval = 20, group = "Moving Averages")
slowMALength   = input(title = "Slow MA Length", minval = 1, step = 1, defval = 50, group = "Moving Averages")
maType         = input(title = "Moving Average Type", defval = "SMA", options = ["SMA", "EMA", "RMA", "WMA", "VWMA"], group = "Moving Averages")
filterMALength = input(title = "Filter MA Length", minval = 1, step = 1, defval = 200, group = "Moving Averages")
filterMAType   = input(title = "Filter MA Type", defval = "EMA", options = ["SMA", "EMA", "RMA", "WMA", "VWMA"], group = "Moving Averages")

// Calculate MA
var float maFast   = na
var float maSlow   = na
var float maFilter = na

if (maType   == "SMA")
    maFast   := sma(source, fastMALength)
    maSlow   := sma(source, slowMALength)
if (maType   == "EMA")
    maFast   := ema(source, fastMALength)
    maSlow   := ema(source, slowMALength)
if (maType   == "RMA")
    maFast   := rma(source, fastMALength)
    maSlow   := rma(source, slowMALength)
    maFilter := rma(source, filterMALength)
if (maType   == "WMA")
    maFast   := wma(source, fastMALength)
    maSlow   := wma(source, slowMALength)
if (maType   == "VWMA")
    maFast   := vwma(source, fastMALength)
    maSlow   := vwma(source, slowMALength)

if (filterMAType == "SMA")
    maFilter     := sma(source, filterMALength)
if (filterMAType == "EMA")
    maFilter     := ema(source, filterMALength)
if (filterMAType == "RMA")
    maFilter     := rma(source, filterMALength)
if (filterMAType == "WMA")
    maFilter     := wma(source, filterMALength)
if (filterMAType == "VWMA")
    maFilter     := vwma(source, filterMALength)

BiruAtasMerah = (maFast >= maSlow) and (maSlow >= maFilter)
MerahAtasBiru = (maFast <= maSlow) and (maSlow <= maFilter)

// Lukis MA
plot(series = showMA ? maFast   : na, color = color.blue, title = "MA Fast")
plot(series = showMA ? maSlow   : na, color = color.red,  title = "MA Slow")
plot(series = showMA ? maFilter : na, color = #FFCC00,    title = "MA Filter")


// **************
// * Stochastic *
// **************
// Stochastic Settings
showSSC = input(true, title = "Show Stochastic Crossovers?", group = "Stochastic")
Length = input (10, minval = 1, title = "%K Length", group = "Stochastic")
SmoothK = input (3, minval = 1, title = "%K Smoothing", group = "Stochastic")
SmoothD = input (3, minval = 1, title = "%D Smoothing", group = "Stochastic")

// Calculate Stochastic
var float K = na
var float D = na

if (maType ==  "SMA")
	K      := sma(stoch(source, high, low, Length), SmoothK)
	D      := sma(K, SmoothD)
if (maType ==  "EMA")
	K      := ema(stoch(source, high, low, Length), SmoothK)
	D      := ema(K, SmoothD)
if (maType ==  "RMA")
	K      := rma(stoch(source, high, low, Length), SmoothK)
	D      := rma(K, SmoothD)
if (maType ==  "WMA")
	K      := wma(stoch(source, high, low, Length), SmoothK)
	D      := wma(K, SmoothD)
if (maType ==  "VWMA")
	K      := vwma(stoch(source, high, low, Length), SmoothK)
	D      := vwma(K, SmoothD)

StochasticCrossOver  = crossover(K, D)
StochasticCrossUnder = crossunder(K, D)

// Lukis SS
plotshape(showSSC and StochasticCrossOver  and K <=  20            ? K : na, text = "Golden\nCrossover",  color = color.new(color.green, transp = 25), location = location.belowbar, size = size.tiny, title = "Golden Crossover" )
plotshape(showSSC and StochasticCrossUnder and K >=  80            ? D : na, text = "Deadly\nCrossover",  color = color.new(color.red, transp = 25),   location = location.belowbar, size = size.tiny, title = "Deadly Crossover" )
plotshape(showSSC and StochasticCrossOver  and K <=  80 and K > 20 ? K : na, text = "Bullish\nCrossover", color = color.new(color.green, transp = 50), location = location.belowbar, size = size.tiny, title = "Bullish Crossover")
plotshape(showSSC and StochasticCrossUnder and K >=  20 and K < 80 ? D : na, text = "Bearish\nCrossover", color = color.new(color.red, transp = 50),   location = location.belowbar, size = size.tiny, title = "Bearish Crossover")

showBull = input(true, title = "Show Bullish Signal?", group = "Signal")
showBear = input(false, title = "Show Bearish Signal?", group = "Signal")

bullishCriteria = 0
if (ha_open < ha_close) and (ha_open[1] < ha_close[1]) and (ha_open[2] >= ha_close[2])
    bullishCriteria := bullishCriteria + 1
if (maFast > maSlow) and (maSlow > maFilter)
    bullishCriteria := bullishCriteria + 1
if (K > D) and (K > K[1]) and (D > D[1])
    bullishCriteria := bullishCriteria + 1

bearishCriteria = 0
if (ha_open >= ha_close) and (ha_open[1] >= ha_close[1]) and (ha_open[2] < ha_close[2])
    bearishCriteria := bearishCriteria + 1
if (maFast < maSlow) and (maSlow < maFilter)
    bearishCriteria := bearishCriteria + 1
if (K < D) and (K < K[1]) and (D < D[1])
    bearishCriteria := bearishCriteria + 1

signal = color.new(color.white, transp = 0)
if bearishCriteria == 2
    signal := color.new(color.orange, transp = 50)
if bearishCriteria == 3
    signal := color.new(color.red, transp = 50)
if bullishCriteria == 2
    signal := color.new(color.aqua, transp = 50)
if bullishCriteria == 3
    signal := color.new(color.green, transp = 50)

bullishCriteria := showBull ? bullishCriteria : 0
bearishCriteria := showBear ? bearishCriteria : 0

bgcolor(iff(bullishCriteria > 1, signal, na), title = 'Bullish Signal')
bgcolor(iff(bearishCriteria > 1, signal, na), title = 'Bearish Signal')

longTPPerc  = input(title = "Take Profit Threshold (%)"            , minval = 0.0, step = 0.5, defval = 2.5, group = "Trading") / 100
profitRatio = input(title = "Profit-to-Loss ratio (risk tolerance)", minval = 1.0, step = 0.1, defval = 1.4, group = "Trading")
longSLPerc  = longTPPerc / profitRatio
takeProfit  = strategy.position_avg_price * (1 + longTPPerc)
stopLoss    = strategy.position_avg_price * (1 - longSLPerc)
strategy.initial_capital = 50000
strategy.entry("Long" , strategy.long , floor(strategy.initial_capital*.1/close), stop = strategy.position_avg_price * 1.25, when = bullishCriteria > 1)
strategy.entry("Short", strategy.short, floor(strategy.initial_capital*.1/close), stop = strategy.position_avg_price * 1.25, when = bearishCriteria > 1)
strategy.close("Long" , when = (open >= takeProfit) or (open <= stopLoss) or (high >= takeProfit) or (low <= stopLoss))
strategy.close("Short", when = (open >= takeProfit) or (open <= stopLoss) or (high >= takeProfit) or (low <= stopLoss))

plotshape(bullishCriteria, location = location.belowbar, color = color.new(color.black, transp = 100))
plotshape(bearishCriteria, location = location.belowbar, color = color.new(color.black, transp = 100))

अधिक