গতিশীল খাম মুভিং এভারেজ কৌশল


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

গতিশীল খাম মুভিং এভারেজ কৌশল

ওভারভিউ

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

কৌশল নীতি

প্রথমত, এই কৌশলটি ব্যবহারকারীর পছন্দসই গড়ের ধরন এবং দৈর্ঘ্যের উপর ভিত্তি করে একটি বেসলাইন গড় গণনা করে। সাধারণ গড়ের মধ্যে রয়েছে এসএমএ, ইএমএ ইত্যাদি।

তারপর, ব্যবহারকারীর সেট করা শতাংশের পরামিতি অনুসারে, ওপার-ডাউন প্যাটার্নাল লাইনটি গণনা করা হয়। উদাহরণস্বরূপ, 5% মূল্যের ওঠানামা ALLOWED_BRACKET105% এর প্রতিনিধিত্ব করে যখন অবস্থান স্থাপন করা হয়। প্যাটার্নাল লাইনের সংখ্যাটি কাস্টমাইজ করা যায়।

বাজারে প্রবেশের নিয়ম অনুসারে, যদি আপনি নীচের লাইনটি ভেঙে ফেলেন তবে আরও কিছু করুন; যদি আপনি উপরের লাইনটি ভেঙে ফেলেন তবে খালি করুন। নিয়মটি খুব সহজ এবং স্পষ্ট।

অবশেষে, যখন দাম আবার বেঞ্চমার্ক গড়ের নিচে নেমে আসে, তখন সমস্ত পজিশন বন্ধ করে দেওয়া হয়। এটি ট্রেন্ড ট্র্যাকিংয়ের একটি প্রস্থান পয়েন্ট।

এটি লক্ষ্য করা দরকার যে এই কৌশলটি বিভাজিত পজিশনিং বাস্তবায়ন করে। যদি একাধিক প্যাকেজিং লাইন থাকে তবে অনুপাতের ভিত্তিতে তহবিল বিতরণ করা হবে। এটি একতরফা গেমিংয়ের ঝুঁকি এড়ায়।

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

এই কৌশলটির সবচেয়ে বড় সুবিধাগুলো হলঃ

  1. স্বয়ংক্রিয়ভাবে ট্রেন্ড ট্র্যাক করার জন্য একটি ফাংশন রয়েছে। গড়রেখা ব্যবহার করে ট্রেন্ডের দিক নির্ধারণ করা খুবই সাধারণ, তাই এটি একটি কার্যকর পদ্ধতি।

  2. প্যাকেজিং লাইন ব্যবহার করে আংশিক গোলমাল ফিল্টার করুন, যা অত্যধিক সংবেদনশীল এবং অর্থহীন লেনদেনের সমস্যা এড়াতে পারে। যুক্তিসঙ্গত প্যারামিটার সেটিং কৌশল লাভজনকতা ব্যাপকভাবে অপ্টিমাইজ করতে পারে।

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

  4. গড় এবং ঘেরের সংখ্যা কাস্টমাইজ করার অনুমতি দেওয়া হয়েছে। এটি কৌশলগত নমনীয়তা বৃদ্ধি করে, ব্যবহারকারীরা বিভিন্ন জাতের জন্য প্যারামিটারগুলি সামঞ্জস্য করতে পারে।

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

এই কৌশলটির প্রধান ঝুঁকিগুলো হলঃ

  1. গড়রেখার সিস্টেমগুলি গোল্ডেন ক্রস ধরনের সংকেতগুলির প্রতি সংবেদনশীল নয়। যদি কোন সুস্পষ্ট প্রবণতা না থাকে তবে কৌশলটি কিছু সুযোগ মিস করতে পারে।

  2. খুব প্রশস্ত লাইনগুলি ট্রেডিংয়ের সংখ্যা এবং স্লাইড পয়েন্টের ঝুঁকি বাড়িয়ে তুলতে পারে। লাইনগুলি খুব সংকীর্ণভাবে ডিজাইন করা হয়েছে এবং বড় ঘটনাগুলি মিস করতে পারে। ভারসাম্য খুঁজে পাওয়ার জন্য পর্যাপ্ত পরীক্ষার প্রয়োজন।

  3. ঝড়ের সময়, এই কৌশলটি আরও বেশি সম্ভাব্যতার সাথে দেখা দিতে পারে। তাই প্রবণতাযুক্ত প্রজাতিগুলি বেছে নেওয়া ভাল।

  4. আপনি যদি কেবলমাত্র একতরফা ঝুঁকি নিতে চান তবে অতিরিক্ত অপ্টিমাইজেশান প্রয়োজন।

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

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

  1. অন্যান্য সূচকগুলির পরিবর্তে একটি গুদাম এবং একটি গুদাম তৈরি করার সিদ্ধান্ত নেওয়া। যেমন কেডিজে সূচক ইত্যাদি। বা একাধিক সূচক একত্রিত করে ফিল্টারিং শর্ত সেট করুন।

  2. স্টপ লস লজিক যুক্ত করুন। এটি লাভের কিছু অংশ লক করতে পারে এবং কিছু ঝুঁকি এড়াতে পারে।

  3. অনুকূলিতকরণ প্যারামিটারগুলিকে সর্বোত্তম গড়রেখা এবং ঘেররেখার সমন্বয় খুঁজে বের করতে হবে। এর জন্য সর্বোত্তম প্যারামিটার জোড়া খুঁজে বের করার জন্য যথেষ্ট পরিমাণে পুনরাবৃত্তি এবং অনুকূলিতকরণ প্রয়োজন।

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

  5. বৈচিত্র্য এবং বাজারের বৈচিত্র্য বিবেচনা করে, বিভিন্ন ট্রেডিং পরিবেশের সাথে সামঞ্জস্য রেখে একাধিক প্যারামিটার সেট করুন। এটি কৌশলগত স্থায়িত্বকে উল্লেখযোগ্যভাবে উন্নত করবে।

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2024-01-05 00:00:00
end: 2024-02-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Envelope Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, pyramiding = 5, commission_type=strategy.commission.percent, commission_value=0.0)

// CopyRight Crypto Robot

src = input(ohlc4, title="Source", group = "Base MA")
ma_base_window = input.int(5, "Base Mooving Average Window", step = 1, group = "Base MA")
ma_type = input.string(defval='1. SMA', options=['1. SMA', '2. PCMA', '3. EMA', '4. WMA', '5. DEMA', '6. ZLEMA', '7. HMA'], title='MA Type', group = "Base MA")


envelope_1_pct = input.float(0.05, "Envelope 1", step = 0.01, group = "Envelopes")
envelope_2_pct = input.float(0.10, "Envelope 2", step = 0.01, group = "Envelopes")
envelope_3_pct = input.float(0.15, "Envelope 3", step = 0.01, group = "Envelopes")
envelope_4_pct = input.float(0.0, "Envelope 4", step = 0.01, group = "Envelopes")
envelope_5_pct = input.float(0.0, "Envelope 5", step = 0.01, group = "Envelopes")

use_longs = input.bool(true, 'Long Positions') 
use_short = input.bool(true, 'Short Positions')

total_envelope = 0
if envelope_1_pct > 0
    total_envelope := total_envelope + 1
if envelope_2_pct > 0
    total_envelope := total_envelope + 1
if envelope_3_pct > 0
    total_envelope := total_envelope + 1
if envelope_4_pct > 0
    total_envelope := total_envelope + 1
if envelope_5_pct > 0
    total_envelope := total_envelope + 1

// ---------------------------------------------
// -------------- INDICATORS -------------------
ma_function(MA_type, MA_length) =>
    zlema_lag = (MA_length - 1) / 2
    hma_src = MA_type == '7. HMA' ? 2 * ta.wma(src, math.floor(MA_length / 2)) - ta.wma(src, MA_length) : na
    MA_type == '1. SMA' ? ta.sma(src, MA_length) : MA_type == '2. PCMA' ? (ta.highest(high, MA_length) + ta.lowest(low, MA_length)) / 2 : MA_type == '3. EMA' ? ta.ema(src, MA_length) : MA_type == '4. WMA' ? ta.wma(src, MA_length) : MA_type == '5. DEMA' ? 2 * ta.ema(src, MA_length) - ta.ema(ta.ema(src, MA_length), MA_length) : MA_type == '6. ZLEMA' ? ta.ema(src + src - src[zlema_lag], MA_length) : MA_type == '7. HMA' ? ta.wma(hma_src, math.floor(math.sqrt(MA_length))) : na

    
ma_base = ma_function(ma_type, ma_base_window)

ma_high_1 = envelope_1_pct > 0 ? ma_base * (1 + envelope_1_pct) : na
ma_high_2 = envelope_2_pct > 0 ? ma_base * (1 + envelope_2_pct) : na
ma_high_3 = envelope_3_pct > 0 ? ma_base * (1 + envelope_3_pct) : na
ma_high_4 = envelope_4_pct > 0 ? ma_base * (1 + envelope_4_pct) : na
ma_high_5 = envelope_5_pct > 0 ? ma_base * (1 + envelope_5_pct) : na

ma_low_1 = envelope_1_pct > 0 ? ma_base * (1 - envelope_1_pct) : na
ma_low_2 = envelope_2_pct > 0 ? ma_base * (1 - envelope_2_pct) : na
ma_low_3 = envelope_3_pct > 0 ? ma_base * (1 - envelope_3_pct) : na
ma_low_4 = envelope_4_pct > 0 ? ma_base * (1 - envelope_4_pct) : na
ma_low_5 = envelope_5_pct > 0 ? ma_base * (1 - envelope_5_pct) : na

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


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


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)

plot(ohlc4, color=color.purple)

// use_period = input.bool(false, "Période spécifique ?", group="periode")
// startDate = input.time(timestamp("01 Jan 2020"), "Date de début", group="periode")
// endDate = input.time(timestamp("01 Jan 2025"), "Date de fin", group="periode")


//------------------------------------------
//-------------Indicateurs------------------

// inDateRange = use_period ? ((time >= startDate) and (time < endDate)) : true

// //--------------Backtest-------------------

// strategy_pnl = strategy.netprofit + strategy.openprofit
// bnh_strategy_pnl_pcnt = (strategy_pnl / strategy.initial_capital) * 100

// float bnh_start_bar = na
// bnh_start_bar := na(bnh_start_bar[1]) or inDateRange != true? close : bnh_start_bar[1]
// float bnl_buy_hold_equity = na
// bnl_buy_hold_equity :=  inDateRange == true ? ((close - bnh_start_bar)/bnh_start_bar) * 100 : bnl_buy_hold_equity[1]

// bnh_vs_diff = bnh_strategy_pnl_pcnt - bnl_buy_hold_equity
// bnh_diff_color = bnh_vs_diff > 0 ? color.new(color.green, inDateRange ? 60 : 100) : color.new(color.red, inDateRange ? 60 : 100)

// var Table = table.new(position.top_right, columns = 2, rows = 4, border_width = 1, bgcolor = color.black, border_color = color.gray)
// table.cell(table_id = Table, column = 0, row = 0, text_color=(bnh_strategy_pnl_pcnt>bnl_buy_hold_equity)?color.gray:color.green, text_size = size.normal, text = "Buy & hold profit")
// table.cell(table_id = Table, column = 1, row = 0, text_color=(bnh_strategy_pnl_pcnt>bnl_buy_hold_equity)?color.gray:color.green, text_size = size.normal, text = str.tostring(bnl_buy_hold_equity, '#.##') + ' %')
// table.cell(table_id = Table, column = 0, row = 1, text_color=(bnh_strategy_pnl_pcnt<bnl_buy_hold_equity)?color.gray:color.green, text_size = size.normal, text = "Strategy profit")
// table.cell(table_id = Table, column = 1, row = 1, text_color=(bnh_strategy_pnl_pcnt<bnl_buy_hold_equity)?color.gray:color.green, text_size = size.normal, text = str.tostring(bnh_strategy_pnl_pcnt, '#.##') + ' %')
// table.cell(table_id = Table, column = 0, row = 2, text_color=color.yellow, text_size = size.normal, text = "Date de début")
// table.cell(table_id = Table, column = 1, row = 2, text_color=color.yellow, text_size = size.normal, text = str.format("{0,date,dd-MM-YYYY}",strategy.closedtrades.entry_time(1)))