অ্যাডাপ্টিভ মুভিং মিডিয়ার সাথে মাল্টি-ফ্যাক্টর সমন্বয় কৌশল

লেখক:চাওঝাং, তারিখ: ২০২৩-১২-১৫ ১১ঃ৩০ঃ০৯
ট্যাগঃ

img

I. কৌশলগত ওভারভিউ

অভিযোজিত চলমান গড়ের সাথে মাল্টি-ফ্যাক্টর সমন্বয় কৌশল একটি যৌগিক কৌশল যা এইচএ লাইন, চলমান গড়, স্টোকাস্টিক ক্রসওভার এবং ইনট্রা-ডে বারগুলির ব্যবহারকে একত্রিত করে। এটির লক্ষ্য হ'ল আরও বেশি ট্রেডিংয়ের সুযোগ উন্মোচন করা এবং ষাঁড়ের বাজারের সময় উচ্চতর সমষ্টিগত রিটার্ন অর্জন করা।

২. কৌশলগত যুক্তি

এই কৌশলটির মূল যুক্তি হ'ল একাধিক প্রযুক্তিগত সূচক একত্রিত করে ক্রয় এবং বিক্রয় সংকেতগুলি স্কোর করা এবং মিলিত ফলাফলের ভিত্তিতে বিভিন্ন শক্তির সাথে ট্রেডিং সংকেত তৈরি করা।

বিশেষ করে, কৌশলটিতে ব্যবহৃত চারটি প্রধান প্রযুক্তিগত সূচকগুলির মধ্যে রয়েছেঃ

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

আরো