অভিযোজিত চলমান গড়ের উপর ভিত্তি করে ট্রেন্ড অনুসরণ কৌশল


সৃষ্টির তারিখ: 2024-01-30 16:30:20 অবশেষে সংশোধন করুন: 2024-01-30 16:30:20
অনুলিপি: 0 ক্লিকের সংখ্যা: 846
1
ফোকাস
1617
অনুসারী

অভিযোজিত চলমান গড়ের উপর ভিত্তি করে ট্রেন্ড অনুসরণ কৌশল

ওভারভিউ

এই কৌশলটি কাউফম্যানের স্বনির্ধারিত চলমান গড় (KAMA) সূচক ব্যবহার করে একটি প্রবণতা ট্র্যাকিং ট্রেডিং সিস্টেম ডিজাইন করেছে। এই সিস্টেমটি প্রবণতা গঠনের সময় দ্রুত ট্রেন্ড অনুসরণ করতে পারে এবং অস্থিরতার সময় গোলমাল ফিল্টার করতে পারে। একই সাথে, সিস্টেমটি প্যারালাইন ট্রান্সফার সিস্টেম (PSAR) এবং গড় বাস্তব ওঠানামা ট্র্যাকিং স্টপ (ATR ট্রেইলিং স্টপ) কে স্টপ মেশিন হিসাবে সংহত করে, যার শক্তিশালী ঝুঁকি নিয়ন্ত্রণ ক্ষমতা রয়েছে।

কৌশল নীতি

  • KAMA সূচকের দৈর্ঘ্য সাম্প্রতিক সময়ের মধ্যে বাজারের ওঠানামা গতিশীলতার উপর ভিত্তি করে সংশোধন করা হয়। যখন দামের পরিবর্তন সাম্প্রতিক গোলমালের চেয়ে বড় হয়, তখন EMA উইন্ডোটি সংক্ষিপ্ত হয়; যখন দামের পরিবর্তন সাম্প্রতিক গোলমালের চেয়ে ছোট হয়, তখন EMA উইন্ডোটি দীর্ঘ হয়। এটি KAMA কে দ্রুত প্রবণতা অনুসরণ করতে দেয়, যখন ঝড়ের সময় গোলমাল ফিল্টার করে।

  • সিস্টেমটি মূলত দ্রুততম KAMA ((KAMA 1) এর উপর ভিত্তি করে ট্রেন্ডের দিক নির্ধারণ করে। KAMA 1 ঊর্ধ্বমুখী হলে বেশি করে, নিম্নমুখী হলে শূন্য করে। মিথ্যা ব্রেকআউট ফিল্টার করার জন্য, KAMA ফিল্টার সেট করা হয়েছে। KAMA 1 এর পরিবর্তনগুলি যখন সাম্প্রতিক ওঠানামার একটি স্ট্যান্ডার্ড ডিফারেনশিয়াল অতিক্রম করে তখনই ট্রেডিং সিগন্যাল উত্পন্ন হয়।

  • ক্ষতি বন্ধ করার ক্ষেত্রে, সিস্টেমটি তিনটি পছন্দসই ক্ষতি বন্ধ করার পদ্ধতি সরবরাহ করেঃ কামা ভিত্তিক বিপরীত, পিএসএআর বিপরীত এবং এটিআর মোবাইল ক্ষতি বন্ধ। বিনিয়োগকারীরা এক বা একাধিক সংমিশ্রণ ব্যবহারের জন্য ব্যক্তিগতকৃত পছন্দ করতে পারেন।

সামর্থ্য বিশ্লেষণ

  • KAMA সূচকটির অনন্য নকশা সিস্টেমকে নতুন প্রবণতা দ্রুত ধরতে, অস্থিরতার সময় ট্রেডিং বন্ধ করতে, কার্যকরভাবে ট্রেডিং ফ্রিকোয়েন্সি নিয়ন্ত্রণ করতে এবং অপ্রয়োজনীয় স্লাইড পয়েন্ট এবং ফি ক্ষতি হ্রাস করতে সক্ষম করে।

  • সিস্টেমটি বিভিন্ন ধরণের ক্ষতির ব্যবস্থা নিয়ে গঠিত। বিনিয়োগকারীরা ব্যক্তিগত ঝুঁকি পছন্দ অনুসারে উপযুক্ত ক্ষতির ব্যবস্থা বেছে নিতে পারেন, একক ক্ষতির উপর শক্তিশালী নিয়ন্ত্রণ রাখতে পারেন।

  • সিস্টেমটি সম্পূর্ণরূপে সূচক এবং স্টপ লিনের উপর ভিত্তি করে তৈরি করা হয়েছে, যার ফলে ট্রান্সফার ট্রেডিংয়ের ভুল প্রবেশের সমস্যা এড়ানো সম্ভব হয়েছে।

  • মাল্টি-প্যারামিটার সেটিং এবং শর্ত সমন্বয় সিস্টেম কাস্টমাইজেশনের জন্য বিশাল জায়গা প্রদান করে। ব্যবহারকারীরা বিভিন্ন জাত এবং সময়কালের জন্য অনুকূলিতকরণ করতে পারেন।

ঝুঁকি বিশ্লেষণ

  • সিস্টেমটি সিস্টেমিক ঝুঁকি বিবেচনা করে না এবং চরম পরিস্থিতিতে ক্ষতির কার্যকর নিয়ন্ত্রণ করতে পারে না।

  • সিস্টেম প্যারামিটারগুলি বিভিন্ন জাতের জন্য বিভিন্ন সময়সীমার সাথে সামঞ্জস্য করতে পারে, অন্যথায় ফলাফলগুলি অত্যধিক উগ্র বা অত্যধিক রক্ষণশীল হতে পারে।

  • যদি শুধুমাত্র KAMA সূচককে ক্ষতির জন্য নির্ভর করা হয়, তবে এটি ঝড়ের পরিস্থিতিতে সহজেই আটকে যায়। এটি সমাধানের জন্য পিএসএআর বা এটিআর মোবাইল ক্ষতির সাথে একত্রিত ব্যবহারের প্রয়োজন।

অপ্টিমাইজেশান দিক

  • প্রবণতা ফিল্টারিং সূচক যেমন ADX বা প্রবণতা পরিমাপক যোগ করুন যাতে কম্পন এবং প্রবণতা রূপান্তর পর্যায়ে ভুল সংকেত তৈরি করা যায় না।

  • PARAMETERS অপ্টিমাইজেশন এবং পুনরাবৃত্তি একক জাত এবং নির্দিষ্ট চক্রের জন্য, স্থিতিশীলতা উন্নত করুন। অপ্টিমাইজেশন মাত্রা অন্তর্ভুক্ত KAMA প্যারামিটার সমন্বয়, স্টপ লস প্যারামিটার ইত্যাদি।

  • প্যারামিটার অপ্টিমাইজেশনের পরিবর্তে মেশিন লার্নিং মডেল ব্যবহার করুন। প্রচুর পরিমাণে ঐতিহাসিক ডেটা ব্যবহার করে ট্রেডিংয়ের সময় এবং স্টপ লস নির্ধারণের জন্য নিউরাল নেটওয়ার্ক বা সিদ্ধান্ত গাছের মডেল।

  • এই কৌশলটি অন্যান্য প্রজাতির যেমন ডিজিটাল মুদ্রায় প্রয়োগ করার চেষ্টা করুন। এটির জন্য PARAMETERS পরিবর্তন করা বা অন্যান্য সহায়ক সূচক যুক্ত করা প্রয়োজন হতে পারে।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
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/
// © BenHampson
// @version=4
// Credit to:
// - ChuckBanger for much of the KAMA code
// - cheatcountry for the KAMA Filter code
// - millerrh for much of the ATR Stop code
// - racer8 for much of the Position Sizing code

// I have combined aspects of their work and built upon it to form a strategy I like. 
// The KAMA, with its filter, is used for entry.
// An ATR trailing stop loss, PSAR, and the KAMA can all optionally be used as exits, or you can use a combination of the three.

strategy(title="KAMA Strategy - Kaufman's Adaptive Moving Average", shorttitle="KAMA Strategy", overlay=true)

src = input(title="Source", type=input.source, defval=close)

// Exits
KAMA1SL = input(title = 'KAMA 1 Stop Loss', type = input.bool, defval = true)
ATRTSL = input(title = 'ATR Trailing Stop Loss', type = input.bool, defval = false)
PSARSL = input(title = 'PSAR Stop Loss', type = input.bool, defval = false)

// KAMA 1 (Fastest)
length1 = input(title="KAMA 1: Length", type=input.integer, defval=14)
fastLength1 = input(title="KAMA 1: Fast KAMA Length", type=input.integer, defval=2)
slowLength1 = input(title="KAMA 1: Slow KAMA Length", type=input.integer, defval=20)

length2 = input(title="KAMA 2: Length 2", type=input.integer, defval=15)
fastLength2 = input(title="KAMA 2: Fast KAMA Length", type=input.integer, defval=3)
slowLength2 = input(title="KAMA 2: Slow KAMA Length", type=input.integer, defval=22)

length3 = input(title="KAMA 3: Length 3", type=input.integer, defval=16)
fastLength3 = input(title="KAMA 3: Fast KAMA Length", type=input.integer, defval=4)
slowLength3 = input(title="KAMA 3: Slow KAMA Length", type=input.integer, defval=24)

length4 = input(title="KAMA 4: Length", type=input.integer, defval=17)
fastLength4 = input(title="KAMA 4: Fast KAMA Length", type=input.integer, defval=5)
slowLength4 = input(title="KAMA 4: Slow KAMA Length", type=input.integer, defval=26)

// KAMA 5 (Medium)
length5 = input(title="KAMA 5: Length", type=input.integer, defval=18)
fastLength5 = input(title="KAMA 5: Fast KAMA Length", type=input.integer, defval=6)
slowLength5 = input(title="KAMA 5: Slow KAMA Length", type=input.integer, defval=28)

length6 = input(title="KAMA 6: Length", type=input.integer, defval=19)
fastLength6 = input(title="KAMA 6: Fast KAMA Length", type=input.integer, defval=7)
slowLength6 = input(title="KAMA 6: Slow KAMA Length", type=input.integer, defval=30)

length7 = input(title="KAMA 7: Length", type=input.integer, defval=20)
fastLength7 = input(title="KAMA 7: Fast KAMA Length", type=input.integer, defval=8)
slowLength7 = input(title="KAMA 7: Slow KAMA Length", type=input.integer, defval=32)

// KAMA 8 (Slowest)
length8 = input(title="KAMA 8: Length", type=input.integer, defval=21)
fastLength8 = input(title="KAMA 8: Fast KAMA Length", type=input.integer, defval=9)
slowLength8 = input(title="KAMA 8: Slow KAMA Length", type=input.integer, defval=34)

// Kaufman's Adaptive Moving Average
getKAMA(src, length1, fastLength1, slowLength1) =>
    mom = abs(change(src, length1))
    volatility = sum(abs(change(src)), length1)
    
    // Efficiency Ratio
    er = volatility != 0 ? mom / volatility : 0
    
    fastAlpha = 2 / (fastLength1 + 1)
    slowAlpha = 2 / (slowLength1 + 1)
    
    // KAMA Alpha
    sc = pow((er * (fastAlpha - slowAlpha)) + slowAlpha, 2)
    
    kama = 0.0
    kama := sc * src + (1 - sc) * nz(kama[1])
    kama

kama1 = getKAMA(src, length1, fastLength1, slowLength1)
kama2 = getKAMA(src, length2, fastLength2, slowLength2)
kama3 = getKAMA(src, length3, fastLength3, slowLength3)
kama4 = getKAMA(src, length4, fastLength4, slowLength4)
kama5 = getKAMA(src, length5, fastLength5, slowLength5)
kama6 = getKAMA(src, length6, fastLength6, slowLength6)
kama7 = getKAMA(src, length7, fastLength7, slowLength7)
kama8 = getKAMA(src, length8, fastLength8, slowLength8)

//If the kama1 has increased...
kama1delta = kama1[0] - kama1[1]
kama3delta = kama3[0] - kama3[1]
kama8delta = kama8[0] - kama8[1]

// KAMA Plots
plot(kama1, title="KAMA 1", color=#e91e63, display=display.all, linewidth=2)
plot(kama2, title="KAMA 2", color=color.red, display=display.all)
plot(kama3, title="KAMA 3", color=color.red, display=display.all)
plot(kama4, title="KAMA 4", color=color.orange, display=display.all)
plot(kama5, title="KAMA 5", color=color.orange, display=display.all)
plot(kama6, title="KAMA 6", color=color.yellow, display=display.all)
plot(kama7, title="KAMA 7", color=color.yellow, display=display.all)
plot(kama8, title="KAMA 8", color=color.white, display=display.all)



//========================================= KAMA FILTER ===========================================

// Copyright (c) 2019-present, Franklin Moormann (cheatcountry)
// Moving Average Adaptive Filter [CC] script may be freely distributed under the MIT license.

entryFilter = input(title="KAMA Entry Filter", type=input.float, defval=1, minval=0.01)
exitFilter = input(title="KAMA Exit Filter", type=input.float, defval=0.5, minval=0.01)

entryMAAF = entryFilter * stdev(kama1delta, length1)
exitMAAF = exitFilter * stdev(kama1delta, length1)
srcEma = ema(src, length1)



//========================================= TRAILING ATR STOP ====================================

// The following is an adaptation of Trailing ATR Stops by @millerrh
// He based it on scripts by @garethyeo & @SimpleCryptoLife

// Inputs

atrLookback = input(defval=14,title="Trailing ATR Lookback Period",type=input.integer)
multiplier = input(defval=3,title="Trailing ATR Multiplier",type=input.float, step=0.1, minval=0.5, maxval=4)
trailMode = input(title="Trail Mode", defval="Trailing", options=["Running", "Trailing"])
trigInput = input(title="Trigger Trailing Stop On", defval="Wick", options=["Close","Wick"]) 

// Calculate ATR
atrValue = atr(atrLookback)
atrMultiplied = atrValue * multiplier

// Plot the price minus the ATR
atrLow = low - atrMultiplied

// Calculate the low trailing ATRs every time. The trailing stop loss never goes down.
// Set them to something to start with
trailAtrLow = atrLow

// If the ATR Low has gone up AND it has gone above the trail, the low trailing ATR should also go up. If the ATR Low has gone up or down, but not below the trail, the ATR trail stays where it is
trailAtrLow := na(trailAtrLow[1]) ? trailAtrLow : atrLow >= trailAtrLow[1] ? atrLow : trailAtrLow[1]

// Trigger stop based on candle close or low
trigSupport = trigInput == "Close" ? close : trigInput == "Wick" ? low : na

// Determine if price is below support
supportHit = trigSupport <= trailAtrLow

// If price is below support, reset the trailing ATR
trailAtrLow := supportHit ? atrLow : trailAtrLow

// Plot Lines
plotLow = ATRTSL ? trailAtrLow : na
plot(plotLow, title="ATR Low", color=color.white, transp=50, style=plot.style_linebr, linewidth=1, display=display.all)



//====================================== PSAR STOP ==========================================

start = input(0.02, "PSAR Start")
increment = input(0.02, "PSAR Increment")
maximum = input(0.2, "PSAR Max Value")
psar = sar(start, increment, maximum)
psarPlot  = PSARSL ? psar : na
plot(psarPlot, "Parabolic SAR", style=plot.style_cross, color=#3A6CA8, display=display.all)



//========================================= ENTRY & EXITS =====================================================

// Entry
long = kama1delta > 0 and kama1delta > entryMAAF
strategy.entry("Buy", true, when = long) 

// Close
longClose = (PSARSL ? crossunder(close, psar) : na) or (KAMA1SL ? kama1delta < 0 and abs(kama1delta) > exitMAAF : na) or (ATRTSL ? supportHit : na)
strategy.close("Buy", when = longClose, comment = "Sell")