রিসোর্স লোড হচ্ছে... লোডিং...

পঞ্চগুণ শক্তিশালী চলমান গড় কৌশল

লেখক:চাওঝাং, তারিখ: ২০২৪-০৫-২৩ ১৮ঃ১৪ঃ৩৫
ট্যাগঃইএমএডব্লিউএমএএসএমএটিএমএভিএআরডব্লিউডব্লিউএমএZLEMAটিএসএফ

img

সারসংক্ষেপ

পঞ্চগুণ শক্তিশালী চলমান গড় কৌশল একাধিক চলমান গড়ের উপর ভিত্তি করে একটি ট্রেডিং কৌশল। এই কৌশলটি বাজারে শক্তিশালী প্রবণতা সনাক্ত করতে বিভিন্ন সময়সীমা এবং ধরণের 5 টি চলমান গড় ব্যবহার করে। প্রথম 3 টি চলমান গড় কৌশলটির মূল উপাদান, মূলত প্রবণতা সনাক্তকরণ এবং সংকেত উত্পাদনের জন্য ব্যবহৃত হয়, যখন 4 ম এবং 5 ম চলমান গড়গুলি প্রধানত সহায়ক বিচার এবং চাক্ষুষ বিশ্লেষণের জন্য ব্যবহৃত হয়।

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

কৌশল নীতি

এই কৌশলটি বিভিন্ন টাইমফ্রেম এবং প্রকারের পাঁচটি চলমান গড় ব্যবহার করে, যথাঃ

  1. স্তর ১ চলমান গড়ঃ কাস্টমাইজযোগ্য প্রদর্শন, লেবেল, ডেটা উত্স, সময়সীমা, দৈর্ঘ্য, লাইন প্রস্থ, রঙ এবং প্রকার।
  2. স্তর ২ চলমান গড়ঃ কাস্টমাইজযোগ্য প্রদর্শন, লেবেল, ডেটা উত্স, সময়সীমা, দৈর্ঘ্য, লাইন প্রস্থ, রঙ এবং টাইপ।
  3. স্তর ৩ চলমান গড়ঃ কাস্টমাইজযোগ্য প্রদর্শন, লেবেল, ডেটা উত্স, সময়সীমা, দৈর্ঘ্য, লাইন প্রস্থ, রঙ এবং প্রকার।
  4. লেভেল ৪ চলমান গড়ঃ মূলত সহায়ক বিচার, কাস্টমাইজযোগ্য প্রদর্শন, লেবেল, ডেটা উত্স, সময়সীমা, দৈর্ঘ্য, লাইন প্রস্থ এবং রঙের জন্য ব্যবহৃত হয়।
  5. লেভেল ৫ চলমান গড়ঃ মূলত সহায়ক বিচার, কাস্টমাইজযোগ্য প্রদর্শন, লেবেল, ডেটা উত্স, সময়সীমা, দৈর্ঘ্য, লাইন প্রস্থ এবং রঙের জন্য ব্যবহৃত হয়।

এই পাঁচটি চলমান গড়ের ধরনগুলি নমনীয়ভাবে সেট করা যায়, যার মধ্যে SMA, EMA, WMA, TMA, VAR, WWMA, ZLEMA, TSF এবং অন্যান্য ৮টি ধরন রয়েছে।

এই কৌশলটির মূল ধারণা হল বিভিন্ন টাইমফ্রেম এবং প্রকারের চলমান গড়ের একাধিক প্রবণতা নিশ্চিতকরণ ব্যবহার করে প্রবণতা দিকনির্দেশ এবং শক্তি নির্ধারণ করাঃ

  • যখন ক্লোজিং প্রাইস লেভেল ১, ২ এবং ৩ এর চলমান গড়ের উপরে থাকে, তখন লম্বা হয়ে যায়;
  • যখন ক্লোজিং মূল্য 1, 2 এবং 3 স্তরের চলমান গড়ের নিচে থাকে, তখন শর্ট হয়;
  • লং পজিশন ধরে রাখার সময়, যদি ক্লোজিং প্রাইস লেভেল ১ এবং ২ এর চলমান গড়ের নিচে পড়ে, তাহলে লং বন্ধ করুন;
  • শর্ট পজিশন ধরে রাখার সময়, যদি ক্লোজিং প্রাইস লেভেল ১ এবং ২ এর চলমান গড়ের উপরে উঠে যায়, তাহলে শর্ট বন্ধ করুন।

উপরন্তু, এই কৌশলটি বর্তমান অবস্থানের উপর ভিত্তি করে মোমবাতিগুলির রঙ প্রদর্শন করবেঃ

  • লং পজিশন ধরে রাখার সময়, মোমবাতি সবুজ হয়;
  • শর্ট পজিশন ধরে রাখার সময়, মোমবাতি লাল রঙের হয়;
  • অন্য ক্ষেত্রে, মোমবাতিটি ধূসর।

কৌশলগত সুবিধা

  1. প্রবণতা ট্র্যাকিং ক্ষমতাঃ এই কৌশলটি প্রবণতা নির্ধারণের জন্য একাধিক মাঝারি এবং দীর্ঘমেয়াদী চলমান গড়ের সংমিশ্রণ ব্যবহার করে, একটি শক্তিশালী প্রবণতা স্বীকৃতি ক্ষমতা সহ, যা কার্যকরভাবে প্রধান বাজারের প্রবণতা বুঝতে পারে।
  2. নমনীয় সামঞ্জস্যযোগ্য পরামিতি। এই কৌশলটির পরামিতিগুলি নমনীয়ভাবে সেট করা যেতে পারে, যার মধ্যে রয়েছে মুভিং মিডিয়ার প্রকার, সময়সীমা, দৈর্ঘ্য ইত্যাদি, যা বিভিন্ন বাজারের বৈশিষ্ট্য এবং বিনিয়োগকারীদের পছন্দ অনুসারে অনুকূলিত করা যেতে পারে।
  3. একাধিক বাজারে অভিযোজনযোগ্যতা। এই কৌশলটি মূলত দামের গতিবিধি নিজেই ভিত্তিক, বাজারে শক্তিশালী অভিযোজনযোগ্যতার সাথে, এবং স্টক, ফিউচার, বৈদেশিক মুদ্রা, ক্রিপ্টোকারেন্সি ইত্যাদির মতো একাধিক বাজারে ব্যবহার করা যেতে পারে।
  4. এই কৌশলটির মূল যুক্তি সহজ এবং স্পষ্ট, খুব জটিল গাণিতিক মডেলের প্রয়োজন ছাড়াই সহজেই বোঝা এবং বাস্তবায়ন করা যায়।

কৌশলগত ঝুঁকি

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

উপরের ঝুঁকি কমাতে, নিম্নলিখিত উন্নতিগুলি বিবেচনা করা যেতে পারেঃ

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

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

  1. প্রবণতা মূল্যায়নের নির্ভুলতা বাড়াতে আরও বেশি প্রবণতা নিশ্চিতকরণ সূচক যেমন এমএসিডি, ডিএমআই ইত্যাদি প্রবর্তন করা।
  2. পরিসীমাভুক্ত বাজারের জন্য, এমন অপারেটিং লজিক প্রবর্তন করার কথা বিবেচনা করুন যা পরিসীমাভুক্ত বাজারের সাথে মানিয়ে নিতে পারে, যেমন গ্রিড ট্রেডিং।
  3. বিভিন্ন বাজারের বৈশিষ্ট্যগুলির জন্য, অভিযোজনযোগ্যতা উন্নত করার জন্য কৌশলটির পরামিতিগুলি পৃথকভাবে অনুকূলিত করুন।
  4. এই কৌশলকে অন্যান্য কৌশলগুলির সাথে একত্রিত করার কথা বিবেচনা করুন, যেমন ট্রেন্ড কৌশল + রেঞ্জবন্ড কৌশল, ট্রেন্ড কৌশল + কাউন্টার ট্রেন্ড কৌশল ইত্যাদির সংমিশ্রণ, কৌশলটির দৃঢ়তা উন্নত করতে।

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

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


/*backtest
start: 2023-05-17 00:00:00
end: 2024-05-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Quintuple Strong Moving Average Strategy","QuisMa", overlay=true, margin_long=100, margin_short=100)

// 1
mav1_show = input.bool(true, 'Show Plot', group='Level 1 ', inline='mav1_0')
mav1_label = input.bool(true, 'Show Label', group='Level 1 ', inline='mav1_0')
mav1_source = input.source(close, '', group='Level 1 ', inline='mav1_1')
mav1_timeframe = input.timeframe('5', '', group='Level 1 ', inline='mav1_1')
mav1_length = input.int(50, 'Length', group='Level 1 ', inline='mav1_3')
mav1_size = input.int(2000, 'Size', minval=1, group='Level 1 ', inline='mav1_3')
mav1_width = input.int(2, '', minval=0, group='Level 1 ', inline='mav1_2')
mav1_color = input.color(color.new(#ffd000, 0), '', group='Level 1 ', inline='mav1_2')
mav1_type = input.string(title='Moving Average Type 1', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF'])

// 2
mav2_show = input.bool(true, 'Show Plot', group='Level 2', inline='mav2_0')
mav2_label = input.bool(true, 'Show Label', group='Level 2', inline='mav2_0')
mav2_source = input.source(close, '', group='Level 2', inline='mav2_1')
mav2_timeframe = input.timeframe('30', '', group='Level 2', inline='mav2_1')
mav2_length = input.int(50, 'Length', group='Level 2', inline='mav2_3')
mav2_size = input.int(2000, 'Size', minval=1, group='Level 2', inline='mav2_3')
mav2_width = input.int(2, '', minval=0, group='Level 2', inline='mav2_2')
mav2_color = input.color(color.new(#ffd000, 0), '', group='Level 2', inline='mav2_2')
mav2_type = input.string(title='Moving Average Type 2', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF'])

// 3
mav3_show = input.bool(true, 'Show Plot', group='Level 3', inline='mav3_0')
mav3_label = input.bool(true, 'Show Label', group='Level 3', inline='mav3_0')
mav3_source = input.source(close, '', group='Level 3', inline='mav3_1')
mav3_timeframe = input.timeframe('60', '', group='Level 3', inline='mav3_1')
mav3_length = input.int(50, 'Length', group='Level 3', inline='mav3_3')
mav3_size = input.int(2000, 'Size', minval=1, group='Level 3', inline='mav3_3')
mav3_width = input.int(2, '', minval=0, group='Level 3', inline='mav3_2')
mav3_color = input.color(color.new(#ffd000, 0), '', group='Level 3', inline='mav3_2')
mav3_type = input.string(title='Moving Average Type 3', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF'])

// 4
mav4_show = input.bool(true, 'Show Plot', group='Level 4', inline='mav4_0')
mav4_label = input.bool(true, 'Show Label', group='Level 4', inline='mav4_0')
mav4_source = input.source(close, '', group='Level 4', inline='mav4_1')
mav4_timeframe = input.timeframe('480', '', group='Level 4', inline='mav4_1')
mav4_length = input.int(50, 'Length', group='Level 4', inline='mav4_3')
mav4_size = input.int(2000, 'Size', minval=1, group='Level 4', inline='mav4_3')
mav4_width = input.int(2, '', minval=0, group='Level 4', inline='mav4_2')
mav4_color = input.color(color.new(#ffd000, 0), '', group='Level 4', inline='mav4_2')
mav4_type = input.string(title='Moving Average Type 4', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF'])

// 5
mav5_show = input.bool(true, 'Show Plot', group='Level 5', inline='mav5_0')
mav5_label = input.bool(true, 'Show Label', group='Level 5', inline='mav5_0')
mav5_source = input.source(close, '', group='Level 5', inline='mav5_1')
mav5_timeframe = input.timeframe('720', '', group='Level 5', inline='mav5_1')
mav5_length = input.int(50, 'Length', group='Level 5', inline='mav5_3')
mav5_size = input.int(2000, 'Size', minval=1, group='Level 5', inline='mav5_3')
mav5_width = input.int(2, '', minval=0, group='Level 5', inline='mav5_2')
mav5_color = input.color(color.new(#ffd000, 0), '', group='Level 5', inline='mav5_2')
mav5_type = input.string(title='Moving Average Type 5', defval='VAR', options=['SMA', 'EMA', 'WMA', 'TMA', 'VAR', 'WWMA', 'ZLEMA', 'TSF'])


// FUNCTIONS {{{
candle_size_ms = time - time[1]  // milliseconds of a candle

timetostring(tms) =>
    d_ = math.floor(tms / 86400)
    h_ = math.floor((tms - d_ * 86400) / 3600)
    m_ = math.floor((tms - d_ * 86400 - h_ * 3600) / 60)
    s_ = math.floor(tms - d_ * 86400 - h_ * 3600 - m_ * 60)
    ret = d_ > 0 ? str.tostring(d_) + ' D ' : ''
    ret += (h_ > 0 ? str.tostring(h_) + ' H ' : '')
    ret += (m_ > 0 ? str.tostring(m_) + ' m ' : '')
    if d_ == 0
        ret += (s_ > 0 ? str.tostring(s_) + ' s ' : '')
        ret
    ret

tftostring(tf) =>
    tfa = str.split(tf, '')
    tfalast = array.get(tfa, array.size(tfa) - 1)
    tfalastIsNum = na(str.tonumber(tfalast)) ? false : true
    txt = tfalastIsNum ? timetostring(str.tonumber(tf) * 60) : tf
    txt

htfLabel(htfy, tf, col) =>
    txt = tftostring(tf)
    htftxt = 'ᐊ ' + txt
    htftip = 'HTF  [ ' + txt + ' ] ' + str.tostring(htfy, '#.##')
    label.new(x=time + candle_size_ms * 2, y=htfy, xloc=xloc.bar_time, yloc=yloc.price, color=color.new(color.black, 100), textcolor=col, style=label.style_label_left, size=size.normal, text=htftxt, tooltip=htftip)

// Moving Averages Functions {{{
Var_Func(src, length) =>
    valpha = 2 / (length + 1)
    vud1 = src > src[1] ? src - src[1] : 0
    vdd1 = src < src[1] ? src[1] - src : 0
    vUD = math.sum(vud1, 9)
    vDD = math.sum(vdd1, 9)
    vCMO = nz((vUD - vDD) / (vUD + vDD))
    VAR = 0.0
    VAR := nz(valpha * math.abs(vCMO) * src) + (1 - valpha * math.abs(vCMO)) * nz(VAR[1])
    VAR

Wwma_Func(src, length) =>
    wwalpha = 1 / length
    WWMA = 0.0
    WWMA := wwalpha * src + (1 - wwalpha) * nz(WWMA[1])
    WWMA

Zlema_Func(src, length) =>
    zxLag = length / 2 == math.round(length / 2) ? length / 2 : (length - 1) / 2
    zxEMAData = src + src - src[zxLag]
    ZLEMA = ta.ema(zxEMAData, length)
    ZLEMA

Tsf_Func(src, length) =>
    lrc = ta.linreg(src, length, 0)
    lrc1 = ta.linreg(src, length, 1)
    lrs = lrc - lrc1
    TSF = ta.linreg(src, length, 0) + lrs
    TSF

getMA(src, length, mav_type) =>
    ma = 0.0
    if mav_type == 'SMA'
        ma := ta.sma(src, length)
    if mav_type == 'EMA'
        ma := ta.ema(src, length)
    if mav_type == 'WMA'
        ma := ta.wma(src, length)
    if mav_type == 'TMA'
        ma := ta.sma(ta.sma(src, math.ceil(length / 2)), math.floor(length / 2) + 1)
    if mav_type == 'VAR'
        ma := Var_Func(src, length)
    if mav_type == 'WWMA'
        ma := Wwma_Func(src, length)
    if mav_type == 'ZLEMA'
        ma := Zlema_Func(src, length)
    if mav_type == 'TSF'
        ma := Tsf_Func(src, length)
    ma

mav1 = request.security(syminfo.tickerid, mav1_timeframe, getMA(mav1_source, mav1_length, mav1_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
plot(mav1_show ? mav1 : na, 'mav 1', color=mav1_color, linewidth=mav1_width, show_last=mav1_size)
var label mav1lbl = na
label.delete(mav1lbl)
mav1lbl := mav1_label ? htfLabel(mav1, mav1_timeframe, mav1_color) : na

mav2 = request.security(syminfo.tickerid, mav2_timeframe, getMA(mav2_source, mav2_length, mav2_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
plot(mav2_show ? mav2 : na, 'mav 2', color=mav2_color, linewidth=mav2_width, show_last=mav2_size)
var label mav2lbl = na
label.delete(mav2lbl)
mav2lbl := mav2_label ? htfLabel(mav2, mav2_timeframe, mav2_color) : na

mav3 = request.security(syminfo.tickerid, mav3_timeframe, getMA(mav3_source, mav3_length, mav3_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
plot(mav3_show ? mav3 : na, 'mav 3', color=mav3_color, linewidth=mav3_width, show_last=mav3_size)
var label mav3lbl = na
label.delete(mav3lbl)
mav3lbl := mav3_label ? htfLabel(mav3, mav3_timeframe, mav3_color) : na

mav4 = request.security(syminfo.tickerid, mav4_timeframe, getMA(mav4_source, mav4_length, mav4_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
plot(mav4_show ? mav4 : na, 'mav 4', color=mav4_color, linewidth=mav4_width, show_last=mav4_size)
var label mav4lbl = na
label.delete(mav4lbl)
mav4lbl := mav4_label ? htfLabel(mav4, mav4_timeframe, mav4_color) : na

mav5 = request.security(syminfo.tickerid, mav5_timeframe, getMA(mav5_source, mav5_length, mav5_type), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_on)
plot(mav5_show ? mav5 : na, 'mav 5', color=mav5_color, linewidth=mav5_width, show_last=mav5_size)
var label mav5lbl = na
label.delete(mav5lbl)
mav5lbl := mav5_label ? htfLabel(mav5, mav5_timeframe, mav5_color) : na

// Alış ve Satış Koşulları
alisKosulu = close > mav1 and close > mav2 and close > mav3
satisKosulu = close < mav1 and close < mav2 and close < mav3

// Alış ve Satış Sinyalleri
if (alisKosulu and not satisKosulu)
    strategy.entry("Alış", strategy.long)
if (satisKosulu and not alisKosulu)
    strategy.entry("Satış", strategy.short)

// Pozisyonları Kapatma Koşulları
if (strategy.opentrades > 0)
    if (close < mav1 and close < mav2 and strategy.position_size > 0)
        strategy.close("Alış")
    if (close > mav1 and close > mav2 and strategy.position_size < 0)
        strategy.close("Satış")

// Mum Rengi Ayarlama
longKosul = strategy.opentrades > 0 and strategy.position_size > 0
shortKosul = strategy.opentrades > 0 and strategy.position_size < 0

barcolor(longKosul ? color.green : shortKosul ? color.red : color.gray)


সম্পর্কিত

আরো