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


সৃষ্টির তারিখ: 2023-12-15 11:30:09 অবশেষে সংশোধন করুন: 2023-12-15 11:30:09
অনুলিপি: 0 ক্লিকের সংখ্যা: 622
1
ফোকাস
1621
অনুসারী

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

প্রথম, কৌশলগত বিশ্লেষণ

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

2. কৌশল নীতি

এই কৌশলটির মূল যুক্তি হল, বিভিন্ন কারিগরি সূচক ব্যবহার করে ক্রয়-বিক্রয় সংকেতকে স্কোর করা, বিভিন্ন ফ্যাক্টর ম্যাচিংয়ের ফলাফলের উপর ভিত্তি করে বিভিন্ন শক্তির ট্রেডিং সংকেত দেওয়া।

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

  1. সূর্যের নীল রেখা: সূর্যের নীল রেখার রঙ ব্যবহার করে মূল্যের প্রবণতা নির্ধারণের কৌশল, দুটি ধারাবাহিক সবুজ সত্তা HA গড় রেখা ক্রয় সংকেত, এবং দুটি ধারাবাহিক লাল ফাঁকা HA গড় রেখা খালি মাথা সংকেত।

  2. চলমান গড়. কৌশলটি একই সাথে দ্রুত, ধীর এবং ফিল্টারিংয়ের তিনটি ভিন্ন প্যারামিটার সেট ব্যবহার করে চলমান গড়। যখন দ্রুত লাইনটি ধীর লাইনটি অতিক্রম করে এবং ধীর লাইনটি ঘূর্ণায়মান লাইনটি অতিক্রম করে, তখন এটি একটি কেনার সংকেত; বিপরীতভাবে, এটি একটি বিক্রয় সংকেত। চলমান গড়গুলি মাঝারি এবং দীর্ঘমেয়াদী প্রবণতা কার্যকরভাবে বিচার করতে পারে।

  3. Stochastic সূচক. এই সূচকটি পল্টু ক্রস টাইম নির্ধারণ করে। %K লাইনটি যখন নীচের দিক থেকে %D লাইনটি ভেঙে দেয় তখন এটি একটি কেনার সংকেত; যখন এটি উপরের দিক থেকে নীচে ভেঙে যায় তখন এটি একটি বিক্রয় সংকেত।

  4. ম্যাচিং স্কোরিং মেশিন উপরের একাধিক ফ্যাক্টরের মিলের উপর ভিত্তি করে কৌশলটি একটি স্কোরিং মেশিন ব্যবহার করে যত বেশি ম্যাচিং ফ্যাক্টর, ততই প্রাসঙ্গিক সংকেতের শক্তি তত বেশি

বহু-ফ্যাক্টর সমন্বিত বিচারের মাধ্যমে, কৌশলটি মাঝারি বা স্বল্পমেয়াদে আরও ক্ষুদ্র ব্যবসায়ের সুযোগগুলি ধরতে পারে, যার ফলে ষাঁড়ের বাজারে অতিরিক্ত লাভ হয়।

তিন, কৌশলগত সুবিধা

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

এছাড়াও, একাধিক ফ্যাক্টর সমন্বয় শুধুমাত্র একটি একক সূচক অনুসরণ করার তুলনায় ট্রেডিং সাফল্যের হার বাড়িয়ে তোলে। একটি ষাঁড়ের বাজারে, কৌশলগুলি উচ্চতর ক্রমবর্ধমান আয় অর্জন করতে পারে।

৪, কৌশলগত ঝুঁকি

এই কৌশলটির প্রধান ঝুঁকি হ’ল একাধিক ফ্যাক্টর সমন্বয় নিজেই কৌশলটির জটিলতা বাড়ায়। একাধিক সূচকের প্যারামিটার সেটিং, ঘন ঘন সমন্বয় ইত্যাদির প্রয়োজন হয়।

এছাড়াও, একটি ভালুকের বাজারে, কৌশলগত পজিশনের সময়টি খুব দীর্ঘ হতে পারে। এমনকি যদি স্টপ লস সেট করা হয় তবে বড় ক্ষতি এড়ানো কঠিন হবে।

এছাড়াও, স্টোক্যাস্টিক সূচক এবং এইচএ গড়ের মতো প্রযুক্তিগত সূচকগুলি আকস্মিক ঘটনার দ্বারা প্রভাবিত হয়, যা ভুল সংকেত তৈরি করতে সহজ, যার ফলে অপ্রয়োজনীয় ক্ষতি হয়।

পঞ্চম, কৌশলগত অগ্রগতি

এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে উন্নত করা যেতে পারেঃ

  1. প্রতিটি সূচক প্যারামিটার সেটিং অনুকূলিতকরণ করুন এবং সর্বোত্তম প্যারামিটার সমন্বয় খুঁজে বের করুন।

  2. মডেল প্রশিক্ষণ এবং প্যারামিটার স্বনির্ধারণ মডিউল যোগ করুন, রিয়েল-টাইম অপ্টিমাইজেশান প্যারামিটারগুলি।

  3. স্টপ লস কৌশল বাড়ান এবং সর্বোচ্চ প্রত্যাহার কৌশল হ্রাস করুন।

  4. পজিশন কন্ট্রোল মডিউল যোগ করা হয়েছে, যা বাজারের অবস্থার উপর ভিত্তি করে পজিশনগুলিকে গতিশীলভাবে সামঞ্জস্য করে।

  5. মেশিন লার্নিং অ্যালগরিদমের সাথে মিলিত, মাল্টি-ফ্যাক্টর স্কোরিংয়ের জন্য একটি নিউরাল নেটওয়ার্ক মডেল তৈরি করা।

6. সারাংশ

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

কৌশল সোর্স কোড
/*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))