অভিযোজিত চলমান গড় পরিমাণগত কৌশল

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

সারসংক্ষেপ

এই কৌশলটি চলমান গড়ের উপর ভিত্তি করে, স্বয়ংক্রিয়ভাবে পরামিতিগুলি সামঞ্জস্য করতে পারে এবং উচ্চ সময়ের ফ্রেমে তরঙ্গযুক্ত বাজারগুলির জন্য উপযুক্ত। এটি স্বয়ংক্রিয়ভাবে সর্বোত্তম পরামিতি সংমিশ্রণটি খুঁজে পেতে পারে এবং যখন দাম চলমান গড় লাইনটি ভেঙে দেয় তখন ট্রেডিং সংকেত তৈরি করতে পারে।

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

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

বিশেষত, কৌশলটি পিরিয়ড প্লাস 1 (সিএমএ_পি 1) এবং বিয়োগ 1 (সিএমএ_এম 1) দিয়ে সিএমএ পরীক্ষা করে, শরীর এবং উইক দ্বারা স্পর্শের সংখ্যা গণনা করে। যদি সিএমএ-তে সিএমএ_পি 1 এবং সিএমএ_এম 1 এর চেয়ে কম স্পর্শ থাকে তবে বর্তমান সময়কালটি রাখুন; যদি সিএমএ_পি 1 এর কম স্পর্শ থাকে তবে সময়কাল 1 দ্বারা বৃদ্ধি করুন; যদি সিএমএ_এম 1 এর কম স্পর্শ থাকে তবে সময়কাল 1 দ্বারা হ্রাস করুন। এটি সংকেত লাইন হিসাবে তুলনামূলকভাবে মসৃণ সিএমএ খুঁজে পায়।

যখন মূল্য CMA এর মধ্য দিয়ে উপরে যায়, তখন একটি ক্রয় সংকেত উৎপন্ন হয়; যখন মূল্য CMA এর মধ্য দিয়ে নীচে যায়, তখন একটি বিক্রয় সংকেত উৎপন্ন হয়।

সুবিধা বিশ্লেষণ

এই অভিযোজিত চলমান গড় কৌশল নিম্নলিখিত সুবিধা আছেঃ

  1. স্বয়ংক্রিয়ভাবে সর্বোত্তম পরামিতি খুঁজে বের করুন। ম্যানুয়ালি চলন্ত গড় সময়কাল নির্বাচন করার প্রয়োজন নেই, কৌশলটি বিভিন্ন সময়কাল পরীক্ষা করবে এবং সর্বোত্তম খুঁজে পাবে।

  2. মিথ্যা সংকেত হ্রাস করুন। স্থির সময়ের এমএ এর তুলনায়, অভিযোজিত এমএ আরও গোলমাল ফিল্টার করতে পারে এবং অনেক মিথ্যা সংকেত হ্রাস করতে পারে।

  3. বাজারের পরিবর্তনের সাথে খাপ খাইয়ে নিন। যখন বাজারটি পরিসীমা-সীমাবদ্ধ থেকে প্রবণতাতে স্যুইচ করে, তখন এমএ সময়টি স্বয়ংক্রিয়ভাবে সংকেত তৈরি করতে বৃদ্ধি পাবে; যখন বাজারটি প্রবণতা থেকে পরিসীমা-সীমাবদ্ধ হয়ে যায়, তখন এমএ সময়টি স্বয়ংক্রিয়ভাবে হ্রাস পাবে। সুতরাং কৌশলটি বাজারের পরিবর্তনের সাথে গতিশীলভাবে খাপ খাইয়ে নিতে পারে।

  4. সহজ ট্রেডিং সিস্টেম। এই অভিযোজিত পদ্ধতি ম্যানুয়াল পরামিতি অপ্টিমাইজেশান ছাড়া সমগ্র ট্রেডিং সিস্টেম সহজ করতে পারেন।

  5. এই ধারণাটি অন্যান্য সূচক যেমন অভিযোজিত বোলিংজার ব্যান্ড, অভিযোজিত কেডি ইত্যাদিতে প্রয়োগ করা যেতে পারে।

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

এই কৌশলটির জন্য কিছু ঝুঁকিও রয়েছেঃ

  1. কল অপশন ঝুঁকি। যখন বাজারে একটি কল অপশন প্যাটার্ন থাকে, তখন মোমবাতি শরীরটি এমএ লাইনটি ভাঙ্গতে ব্যর্থ হতে পারে, যার ফলে ভুল সংকেত পাওয়া যায়। এই ধরনের ঝুঁকি হ্রাস করার জন্য ফিল্টার শর্ত যুক্ত করা প্রয়োজন।

  2. ব্যর্থ ব্রেকআউট ঝুঁকি। এমএ ব্রেকআউট সবসময় অব্যাহত থাকে না, কিছু ব্যর্থ ব্রেকআউট ঘটতে পারে। উচ্চ সাফল্যের হার নিশ্চিত করার জন্য ব্রেকআউট বৈধতা প্রয়োজন।

  3. প্রবণতা বিপরীত ঝুঁকি। প্রবণতা প্রবেশের পরে প্রবণতা বিপরীত সময়মত পরিবর্তন করা প্রয়োজন, অন্যথায় এটি ক্ষতি হতে পারে। ক্ষতি নিয়ন্ত্রণ করতে স্টপ লস সেট করা উচিত।

  4. প্যারামিটার অপ্টিমাইজেশান ঝুঁকি। অভিযোজনযোগ্য সামঞ্জস্যপূর্ণ প্যারামিটারগুলি স্থানীয় অপ্টিমাইজেশনে পড়তে পারে, যার ফলে অতিরিক্ত এমএ হয়। এই সমস্যাটি এড়াতে মডেল মূল্যায়ন পদ্ধতি প্রবর্তন করা দরকার।

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

উন্নতির দিকনির্দেশ

এই অভিযোজিত এমএ কৌশল উন্নত করার জন্য কিছু দিকঃ

  1. মিথ্যা ব্রেকআউট ফিল্টার করার জন্য ধারাবাহিক ব্রেকআউটগুলির মাধ্যমে ট্রেন্ড ব্রেকআউট বৈধতা যুক্ত করুন।

  2. স্টপ লস স্ট্র্যাটেজি বাড়ান, যখন দাম এমএ এর অন্য দিকে ফিরে যায় তখন স্টপ লস।

  3. কল অপশন প্রদর্শিত হলে ভুল সংকেত এড়াতে অপশন ফিল্টার যোগ করুন।

  4. আইসি, এলআইসি, এসআইসি ইত্যাদির মতো মূল্যায়ন মেট্রিকগুলি প্রবর্তন করুন প্যারামিটার টিউনিং সীমাবদ্ধ করতে এবং ওভারফিটিং রোধ করতে।

  5. অন্যান্য সূচক যেমন- অভিযোজিত গোল্ডেন ক্রস কৌশল, অভিযোজিত বোলিংজার ব্যান্ড ইত্যাদিতে প্রসারিত করুন।

  6. আরও মসৃণ এমএ পাওয়ার জন্য ওজনযুক্ত এমএ, এক্সপোনেন্সিয়াল এমএ ইত্যাদি ব্যবহার করে এমএ গণনা অনুকূল করুন।

সংক্ষিপ্তসার

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

[/trans]


/*backtest
start: 2022-11-10 00:00:00
end: 2023-11-16 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/
// © fondDealer96636

//@version=5

strategy('Automatic Moving Average', overlay=true, max_bars_back=201, pyramiding=0, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000)

// input
start = 20
lookback = input(20, "Sensitivity", tooltip="Low (High Sensitivity), High (Low Sensitivity).\n\nAdjust according to timeframe and asset.")
smoothing = input(3, "Smoothing")
source = input(close, "Source")
startYear = input(2020, "Start year")
resp = 1

in_date_range = time >= timestamp(syminfo.timezone, startYear, 1, 1, 0, 0)

// global
var ix = -1
var mal = array.new_int(0)


// functions
avg(source, len) =>
    sum = 0.0
    for i = 0 to len-1
        sum += source[i]
    sum/len

bull = close > open

wick_touch(x) =>
    bull ? ((close <= x and x <= high) or (low <= x and x <= open)) : ((open <= x and x <= high) or (low <= x and x <= close))

body_touch(x) =>
    bull ? (open < x and x < close) : (close < x and x < open)

touches(t) =>
    touches = 0
    for i = 0 to lookback-1
        touches += t[i] ? 1 : 0
    touches


// local
ix := ix+1
prev_mal = ix >= 1 ? array.get(mal, ix-1) : start

cma = avg(source, prev_mal)
cma_p1 = avg(source, prev_mal+1)
cma_m1 = avg(source, prev_mal-1)

d = touches(wick_touch(cma))
d_p1 = touches(wick_touch(cma_p1))
d_m1 = touches(wick_touch(cma_m1))

d_b = touches(body_touch(cma))
d_p1_b = touches(body_touch(cma_p1))
d_m1_b = touches(body_touch(cma_m1))

any_body_touch = d_b > 0 or d_p1_b > 0 or d_m1_b > 0
no_wick_touch = d <= 0 and d_p1 <= 0 and d_m1 <= 0
wick_maximized = d >= d_p1 and d >= d_m1 ? prev_mal : (d_p1 >= d and d_p1 >= d_m1 ? prev_mal+resp : (d_m1 >= d and d_m1 >= d_p1 ? prev_mal-resp : na))

up = cma > cma[1]
down = cma < cma[1]
against_trend = (up and close < cma) or (down and close > cma)

new_mal = no_wick_touch or against_trend ? prev_mal-resp : (any_body_touch ? prev_mal+resp : wick_maximized)
next_mal = na(new_mal) ? prev_mal : new_mal

array.push(mal, next_mal < 2 ? 2 : (next_mal > 200 ? 200 : next_mal))


// graph
scma = ta.ema(cma, smoothing)

uptrend = scma > scma[1]
downtrend = scma < scma[1]

plot(scma, "Automatic MA", color=uptrend ? color.green : color.red)

uptrending = close > scma and uptrend
downtrending = close < scma and downtrend

defy = not uptrending and not downtrending
defy_cross = defy and body_touch(scma)

barcolor(uptrending ? color.lime : (downtrending ? color.red : (defy_cross ? color.black : color.white)))


// strategy
change_to_uptrend = uptrending and downtrend[1]
change_to_downtrend = downtrending and uptrend[1]

long = in_date_range and change_to_uptrend
short = in_date_range and change_to_downtrend

if long
    strategy.entry("Long", strategy.long)
if short
    strategy.entry("Short", strategy.short)


আরো