গড় অভিযোজিত চ্যানেল মূল্য ব্রেকআউট কৌশল


সৃষ্টির তারিখ: 2023-11-02 15:05:56 অবশেষে সংশোধন করুন: 2023-11-02 15:05:56
অনুলিপি: 0 ক্লিকের সংখ্যা: 657
1
ফোকাস
1617
অনুসারী

গড় অভিযোজিত চ্যানেল মূল্য ব্রেকআউট কৌশল

ওভারভিউ[Overview]

সমান্তরাল চ্যানেলের দামের ব্রেকিং কৌশলটি একটি দীর্ঘ লাইন ব্রেকিং কৌশল যা সমান্তরাল চলমান গড় (এএমএ) এবং স্বয়ংক্রিয় চ্যানেলের ব্যাপ্তির উপর ভিত্তি করে ক্রয়-বিক্রয় সংকেত বিচার করে। এই কৌশলটি বর্তমান দামের প্রবণতার দিকনির্দেশের জন্য এএমএ ব্যবহার করে এবং গতিশীলভাবে সামঞ্জস্যপূর্ণ চ্যানেলের ব্যাপ্তির সাথে মিলিত হয় যাতে দামের ব্রেকিং সংকেত পাওয়া যায়, যাতে উপযুক্ত সময়ে ক্রয় এবং বিক্রয় করা যায়।

কৌশল নীতি[Strategy Principle]

এই কৌশলটির কেন্দ্রীয় সূচক হ’ল স্বনির্ধারিত চলমান গড় ((AMA) । দামের প্রবণতা ক্যাপচার করার জন্য AMA এর গণনা সূত্রটি হলঃ

AMA(t) = α(t-1) * P(t) + [1 - α(t-1)] * AMA(t-1)

এর মধ্যে, P (t) হল বর্তমান মূল্য, α (t) হল মসৃণ ধ্রুবক, যার মান 0 থেকে 1 এর মধ্যে। α (t) একটি নিয়ম দ্বারা গতিশীলভাবে সামঞ্জস্য করা হয়, যা দামের পরিবর্তনের জন্য এএমএর সংবেদনশীলতা নিয়ন্ত্রণ করতে ব্যবহৃত হয়। বিশেষ করে, α (t) এর মান এএমএ এবং মূল্যের বিচ্যুতির মাত্রা এসএনআরটি-র সমানুপাতিক। এসএনআরটি গণনা করার সূত্রটি নিম্নরূপঃ

SNRT = (P(t) - AMA(t-1)) / AMA(t-1)

এইভাবে, যখন দামের অস্থিরতা বৃদ্ধি পায়, তখন α ((t) বৃদ্ধি পায়, যার ফলে এএমএ আরও সংবেদনশীলভাবে দাম অনুসরণ করে; যখন দামের অস্থিরতা হ্রাস পায়, তখন α ((t) হ্রাস পায়, যার ফলে এএমএ আরও মসৃণ হয়।

এএমএ-র উপর ভিত্তি করে, কৌশলটি স্বনির্ধারিত চ্যানেলের পরিসীমা তৈরি করে, যা মূল্যের ব্রেকডাউন সংকেতগুলি সনাক্ত করতে ব্যবহৃত হয়। চ্যানেলের পরিসরের উপরের এবং নীচের ট্র্যাকগুলি হলঃ

রেলপথঃ H (t) = (1 + β*H(t-1)) * AMA(t)

নিম্নে ট্র্যাকঃ L (t) = (1 - β*L(t-1)) * AMA(t)

শেষ পর্যন্ত, কৌশলটি একটি ট্রেডিং সিগন্যাল তৈরি করে যা দেখে যে দামটি উর্ধ্বমুখী বা নিম্নমুখী ট্র্যাকটি ভেঙেছে কিনাঃ

  • “আমি মনে করি, এই ধরনের পরিস্থিতির জন্য আমরা দায়ী নই।

  • “আমি মনে করি, এটা একটা বড় ভুল হয়েছে।

  • অন্যথায়, এটি খালি।

সামর্থ্য বিশ্লেষণ[Advantage Analysis]

এই কৌশলটির সুবিধাগুলো হলঃ

  1. সাধারণ মুভিং এভারেজের পরিবর্তে এএমএ ব্যবহার করে দামের প্রবণতা আরও নমনীয়ভাবে ধরা যায়, বিশেষত বাজারের জন্য যেখানে উচ্চতর ওঠানামা রয়েছে।

  2. স্বনির্ধারিত চ্যানেলের পরিধি গতিশীলভাবে সামঞ্জস্য করা যায়, বাজারের অনিশ্চয়তার সময় চ্যানেলের প্রস্থ প্রসারিত করা যায় এবং স্পষ্ট প্রবণতার সময় চ্যানেলের প্রস্থ সংকীর্ণ করা যায়।

  3. প্রবণতা শুরুর পর্যায়ে সময়মতো ধরা যায় এবং এর উচ্চতর বিজয়ী হার রয়েছে।

  4. কৌশলগত লজিকটি সহজ এবং স্পষ্ট, সহজেই বোঝা যায় এবং বাস্তবায়িত হয়, যা পরিমাণগত লেনদেনের জন্য উপযুক্ত।

ঝুঁকি বিশ্লেষণ[Risk Analysis]

এই কৌশলটি নিম্নলিখিত ঝুঁকিগুলিও বহন করেঃ

  1. AMA প্যারামিটারগুলি ভুলভাবে সেট করা হলে, দামের ভুল প্রবণতা দেখা দিতে পারে বা মিথ্যা সংকেত তৈরি হতে পারে।

  2. স্বনির্ধারিত চ্যানেলের প্যারামিটার যেমন β-কে সতর্কতার সাথে সেট করা দরকার, অন্যথায় খুব বেশি ঘন ঘন লেনদেন বা মিস করার প্রবণতা দেখা দিতে পারে।

  3. মূল্য বিপর্যয়ের সংকেতগুলি ভুয়া বিপর্যয়ের দ্বারা প্রতারিত হতে পারে এবং আরও সূচকগুলির সাথে মিলিত হওয়া উচিত।

  4. এই কৌশলটিতে তহবিল ব্যবস্থাপনা এবং ক্ষতিপূরণ ব্যবস্থা বিবেচনা করা হয়নি, যার ফলে ক্ষতির ঝুঁকি রয়েছে।

অপ্টিমাইজেশান দিক[Optimization Directions]

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

  1. এএমএ এর α-মান গণনা করার পদ্ধতিকে অপ্টিমাইজ করা হয়েছে যাতে এটি মূল্য পরিবর্তনের প্রতি আরও সংবেদনশীল হয়।

  2. ভুয়া সিগন্যাল এড়ানোর জন্য, প্রবেশদ্বার ভেঙে ফেলার পরে আরও নিশ্চিতকরণ যুক্ত করুন।

  3. ট্রেডিং ভলিউম বা অস্থিরতা সূচকগুলির সাথে মিলিতভাবে ফিল্টার করুন, যাতে বিরতির কার্যকারিতা নিশ্চিত হয়।

  4. লাভের জন্য লকডাউন এবং ঝুঁকি নিয়ন্ত্রণের জন্য ট্র্যাকিং স্টপ লস মেশিন যুক্ত করা হয়েছে।

  5. তহবিল ব্যবস্থাপনা অপ্টিমাইজ করুন, বিভিন্ন সম্পদের যুক্তিসঙ্গত পজিশন ব্যবস্থাপনা নির্ধারণ করুন।

সারসংক্ষেপ[Conclusion]

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

কৌশল সোর্স কোড
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// CryptoStatistical - 2019
// AMA Strategy Channel Breakout Strategy from E. Durenard - Professional Automated Trading 
// https://www.amazon.com/Professional-Automated-Trading-Theory-Practice/dp/1118129857

strategy(title="[CS] AMA Strategy - Channel Break Out", shorttitle="AMA_ChannelBreakout_Strategy", initial_capital = 1000, overlay=true, pyramiding = 0, calc_on_every_tick=false, calc_on_order_fills=false, commission_type= strategy.commission.percent, commission_value = 0.08, currency=currency.USD)
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(6, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=95)

testPeriod() =>  true

price = input(title='Price Source:', type=input.source, defval=close)

ama = price
hb = price
lb = price

// Static model parameters
minfactor = 0.
maxfactor = 1.
deviation_max = 1.
deviation_min = 1.
beta_hb = 1.
beta_lb = 1.
snr = 1.

normalized_atan= 0.
alpha = 0.5
// Suggested snr-factor from .5 upto 3.1 by .3 to find best parameter
snrfactor = input(title='SNR Factor:', type=input.float, minval=0.6, maxval=3.3, step=0.3, defval=2.1)

// Sensitivity Lookback search for the best perdiod from 5 to 20
lookback = input(title='Sensitivity Lookback:', type=input.integer, defval=5)

// Suggested Beta from .5 below 4.5 by .3, usually in the range 1.2, 1.5
beta = input(title='Beta:', type=input.float, minval=0.6, maxval=4.5, step=0.3, defval=2.1)

offsetlabel = input(title='Offset Label:', type=input.float, minval=0.001, maxval=0.03, step=0.001, defval=0.001)

// pi/2
pi2 = 1.5707963267948966

// Zero-lag resampled moving average (Durschner nwma)
f_nwma(_src, _period) =>
    fast = _period/2
    lambda = _period/fast
    alpha = lambda * (_period - 1)/(_period - lambda)
    average1 = wma(_src,_period)
    average2 = wma(average1,fast)
    nwma = (1+alpha)*average1 - alpha*average2

ama := alpha[1]*price + (1-alpha[1])*nz(ama[1])

deviation_max := alpha[1]*max((price[0] - price[1])/price[1],0) + (1-alpha[1])*nz(deviation_max[1])
deviation_min := -alpha[1]*min((price[0] - price[1])/price[1],0) + (1-alpha[1])*nz(deviation_min[1])

beta_hb := beta*deviation_max
beta_lb := beta*deviation_min
hb := (1 + beta_hb[1])*ama
lb := (1 - beta_lb[1])*ama

snr := if price > hb
    ((price - ama[1])/ama[1])/beta_lb
else
    if price < lb
        -((price - ama[1])/ama[1])/beta_hb
    else
        0

normalized_atan := (atan(snrfactor*snr) + pi2)/(2*pi2)
alpha := f_nwma(minfactor + (maxfactor - minfactor)*normalized_atan, lookback)

plot(ama, color=color.black)
plot(hb, color=color.green)
plot(lb, color=color.red)

// Buy Condition Var
bc = false
// Sell Condition Var
sc = false
d = color.black

// Buy Condition
if(price > hb)
    bc := true
    d := color.green

// Sell Condition
if(price < lb)
    sc := true
    d := color.red

if(testPeriod())
    strategy.entry("Long", strategy.long, when = bc)
    strategy.entry("Short", strategy.short, when = sc)

alertcondition(bc, title='BuyCondition', message='Buy')
alertcondition(sc, title='SellCondition', message='Sell')

plotshape(title='Buy', series=bc ? price * (1 - offsetlabel) : na, text='A1B', style=shape.labelup, location=location.absolute, color=d, textcolor=color.white, offset=0)
plotshape(title='Sell', series=sc ? price  * (1 + offsetlabel) : na, text='A1S', style=shape.labeldown, location=location.absolute, color=d, textcolor=color.white, offset=0)