গড় বিপরীত রূপান্তর প্যাকেজ চলমান গড় কৌশল

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

img

সারসংক্ষেপ

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

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

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

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

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

সুবিধা

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

ঝুঁকি

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

সংবেদনশীলতা বাড়াতে এবং বিভিন্ন বাজারের চক্রের সাথে খাপ খাইয়ে নিতে চলমান গড় দৈর্ঘ্য সামঞ্জস্য করার জন্য এনভেলপ পরিসীমাটি যথাযথভাবে প্রসারিত করে ঝুঁকিগুলি হ্রাস করা যেতে পারে।

অপ্টিমাইজেশান নির্দেশাবলী

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

  1. বিভিন্ন চলমান গড় অ্যালগরিদম পরীক্ষা করুন।

  2. স্বল্পমেয়াদী ওঠানামা আরও ভালোভাবে সামঞ্জস্য করার জন্য চলমান গড় দৈর্ঘ্যের পরামিতি সামঞ্জস্য করুন।

  3. বিভিন্ন শতাংশ সেটিং পরীক্ষা করে এনভেলপ পরামিতিগুলিকে অনুকূল করুন।

  4. একক ট্রেড ক্ষতি সীমাবদ্ধ করার জন্য স্টপ লস পদ্ধতি যোগ করুন যেমন ট্রেলিং স্টপ লস।

  5. অযৌক্তিক বাজারে অবৈধ প্রবেশ এড়াতে অন্যান্য সূচকগুলির সাথে ফিল্টারিং শর্ত যুক্ত করুন।

সিদ্ধান্ত

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


/*backtest
start: 2022-11-27 00:00:00
end: 2023-12-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Mean Reversion - Envelope Strategy", overlay=true )

// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A MEAN REVERSION SYSTEM THAT USES A MOVING AVERAGE AS BASE CALCULATION AND A % OF THIS MOVING AVERAGE TO CALCULATE THE ENVELOPE
// BY DEFAULT, THE SYSTEM WILL PLACE LONG ORDERS ON THE MOVING AVERAGE -5% PER ENVELOPE COUNT (5%, 10% AND SO ON...)
// YOU CAN ENABLE THE SHORT ORDERS THAT WILL FOLLOW THE SAME LOGIC ON THE OPPOSITE SIDE
// THE SYSTEM WILL CLOSE EVERY ONGOING TRADE WHEN THE PRICE RETURNS TO THE MEAN

// ---------------------------------------------
// ---------------- SETTINGS -------------------
src = input(close, "Moving Average Source", group = "Moving Average")
ma_window = input.int(5, "Moving Average Window", step = 1, group = "Moving Average")
ma_type = input.string('4. DEMA', "Moving Average Type", options=['1. SMA', '2. EMA', '3. RMA', '4. DEMA'], group = "Moving Average")
enveloppe_step = input.float(0.05, "Delta Per Enveloppe", step = 0.01, group = "Envelope")
envelope_count = input.int(5, "Envelope count", options = [1, 2, 3, 4, 5], group = "Envelope")
use_longs = input.bool(true, 'Use Long Orders ?', group = "Orders") 
use_short = input.bool(false, 'Use Short Orders ?', group = "Orders")


// ---------------------------------------------
// -------------- INDICATORS -------------------
ma_funct() =>
    if(ma_type == '1. SMA') 
        ta.sma(src, ma_window)
    if(ma_type == '2. EMA') 
        ta.ema(src, ma_window)
    if(ma_type == '3. RMA') 
        ta.rma(src, ma_window)
    if(ma_type == '4. DEMA') 
        2 * ta.ema(src, ma_window) - ta.ema(ta.ema(src, ma_window), ma_window)

ma_base = ma_funct()

ma_high_1 = envelope_count > 0 ? ma_base * (1 + enveloppe_step) : na
ma_high_2 = envelope_count > 1 ? ma_base * (1 + enveloppe_step * 2) : na
ma_high_3 = envelope_count > 2 ? ma_base * (1 + enveloppe_step * 3) : na
ma_high_4 = envelope_count > 3 ? ma_base * (1 + enveloppe_step * 4) : na
ma_high_5 = envelope_count > 4 ? ma_base * (1 + enveloppe_step * 5) : na

ma_low_1 = envelope_count > 0 ? ma_base * (1 - enveloppe_step) : na
ma_low_2 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 2) : na
ma_low_3 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 3) : na
ma_low_4 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 4) : na
ma_low_5 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 5) : na


// ---------------------------------------------
// --------------- STRATEGY --------------------
if use_longs
    if envelope_count > 0 and strategy.opentrades < 1
        strategy.entry('long 1', strategy.long, limit=ma_low_1, qty=(strategy.equity / ma_low_1) * (1 / envelope_count))
    if envelope_count > 1 and strategy.opentrades < 2
        strategy.entry('long 2', strategy.long, limit=ma_low_2, qty=(strategy.equity / ma_low_2) * (1 / envelope_count))
    if envelope_count > 2 and strategy.opentrades < 3
        strategy.entry('long 3', strategy.long, limit=ma_low_3, qty=(strategy.equity / ma_low_3) * (1 / envelope_count))
    if envelope_count > 3 and strategy.opentrades < 4
        strategy.entry('long 4', strategy.long, limit=ma_low_4, qty=(strategy.equity / ma_low_4) * (1 / envelope_count))
    if envelope_count > 4 and strategy.opentrades < 5
        strategy.entry('long 5', strategy.long, limit=ma_low_5, qty=(strategy.equity / ma_low_5) * (1 / envelope_count))


if use_short
    if envelope_count > 0 and strategy.opentrades < 1
        strategy.entry('short 1', strategy.short, limit=ma_high_1, qty=(strategy.equity / ma_high_1) * (1 / envelope_count))
    if envelope_count > 1 and strategy.opentrades < 2
        strategy.entry('short 2', strategy.short, limit=ma_high_2, qty=(strategy.equity / ma_high_2) * (1 / envelope_count))
    if envelope_count > 2 and strategy.opentrades < 3
        strategy.entry('short 3', strategy.short, limit=ma_high_3, qty=(strategy.equity / ma_high_3) * (1 / envelope_count))
    if envelope_count > 3 and strategy.opentrades < 4
        strategy.entry('short 4', strategy.short, limit=ma_high_4, qty=(strategy.equity / ma_high_4) * (1 / envelope_count))
    if envelope_count > 4 and strategy.opentrades < 5
        strategy.entry('short 5', strategy.short, limit=ma_high_5, qty=(strategy.equity / ma_high_5) * (1 / envelope_count))

strategy.exit('close', limit=ma_base)


// ---------------------------------------------
// ------------------ PLOT ---------------------
ma_base_plot = plot(ma_base, title = "Base MA", color = color.orange, linewidth = 3, offset = 1)

ma_high_1_plot = plot(ma_high_1, title = "MA high 1", color = color.red, offset = 1)
ma_high_2_plot = plot(ma_high_2, title = "MA high 2", color = color.red, offset = 1)
ma_high_3_plot = plot(ma_high_3, title = "MA high 3", color = color.red, offset = 1)
ma_high_4_plot = plot(ma_high_4, title = "MA high 4", color = color.red, offset = 1)
ma_high_5_plot = plot(ma_high_5, title = "MA high 5", color = color.red, offset = 1)

ma_low_1_plot = plot(ma_low_1, title = "MA low 1", color = color.green, offset = 1)
ma_low_2_plot = plot(ma_low_2, title = "MA low 2", color = color.green, offset = 1)
ma_low_3_plot = plot(ma_low_3, title = "MA low 3", color = color.green, offset = 1)
ma_low_4_plot = plot(ma_low_4, title = "MA low 4", color = color.green, offset = 1)
ma_low_5_plot = plot(ma_low_5, title = "MA low 5", color = color.green, offset = 1)


আরো