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


निर्माण तिथि: 2023-12-15 11:30:09 अंत में संशोधित करें: 2023-12-15 11:30:09
कॉपी: 0 क्लिक्स: 353
1
ध्यान केंद्रित करना
1166
समर्थक

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

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

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

2. रणनीति सिद्धांत

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

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

  1. दिन की रेखा: रणनीति दिन की रेखा के रंग का उपयोग करके मूल्य प्रवृत्ति का निर्धारण करती है, दो लगातार हरे रंग की इकाई HA औसत रेखा एक खरीद संकेत है, और दो लगातार लाल रिक्त केंद्र HA औसत रेखा एक खाली सिर संकेत है।

  2. चलती औसत एक चलती औसत जिसमें तीन अलग-अलग पैरामीटर सेट होते हैं जो एक ही समय में तेज, धीमी और फ़िल्टर्ड होते हैं जब एक तेज लाइन धीमी लाइन से गुजरती है और धीमी लाइन फ्यूज लाइन से गुजरती है, तो यह एक खरीद संकेत है; इसके विपरीत, यह एक बेचने का संकेत है चलती औसत मध्यम और दीर्घकालिक रुझानों को प्रभावी ढंग से निर्धारित करता है

  3. Stochastic सूचक. यह सूचक बहुभाषी क्रॉसिंग के समय को निर्धारित करता है. जब %K लाइन नीचे की ओर से %D लाइन को तोड़ती है, तो यह एक खरीद संकेत है; जब यह ऊपर की ओर से नीचे की ओर से तोड़ती है, तो यह एक बेचने का संकेत है।

  4. मिलान स्कोरिंग तंत्र. ऊपर वर्णित कई कारकों के मिलान के आधार पर, रणनीति स्कोरिंग तंत्र को अपनाती है. मिलान कारकों की संख्या जितनी अधिक होती है, उतनी ही अधिक संकेत की ताकत होती है।

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

तीन, रणनीतिक लाभ

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

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

रणनीतिक जोखिम

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

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

इसके अलावा, स्टोचैस्टिक इंडिकेटर और एचए औसत रेखा जैसे तकनीकी संकेतक आकस्मिक घटनाओं से प्रभावित होते हैं, जिससे गलत संकेत मिलते हैं, जिससे अनावश्यक नुकसान होता है।

पांच, रणनीतिक अनुकूलन

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

  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))