ত্রিভুজীয় চলমান গড় ক্রসওভার ট্রেডিং কৌশল

লেখক:চাওঝাং, তারিখঃ 2024-01-16 18:18:02
ট্যাগঃ

img

সারসংক্ষেপ

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

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

টিএমএ কৌশল মূলত প্রবণতা দিক নির্ধারণের জন্য তিনটি চলমান গড় রেখার উপর নির্ভর করে। স্বল্পমেয়াদী চলমান গড় মূল্য পরিবর্তনের প্রতি সংবেদনশীলভাবে প্রতিক্রিয়া জানায়; মধ্যমেয়াদী চলমান গড় প্রবণতার আরও স্পষ্ট বিচার প্রদান করে; দীর্ঘমেয়াদী চলমান গড় বাজার গোলমাল ফিল্টার করে এবং দীর্ঘমেয়াদী প্রবণতা দিক নির্ধারণ করে।

যখন স্বল্পমেয়াদী চলমান গড়টি মাঝারি মেয়াদী চলমান গড়ের উপরে অতিক্রম করে, এটি নির্দেশ করে যে দামটি উপরে উঠতে শুরু করেছে। এই সময়ে, যদি মাঝারি মেয়াদী চলমান গড়টি দীর্ঘমেয়াদী চলমান গড়ের উপরে থাকে তবে এর অর্থ হ'ল বর্তমান বাজারটি আপট্রেন্ডে রয়েছে। অতএব, এখানে একটি ক্রয় সংকেত উত্পন্ন হয়।

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

এই কৌশলটি স্টপ-লস এবং টেক-লাভ লাইনও সেট করে। একটি ট্রেডে প্রবেশের পরে, স্টপ-লস এবং টেক-লাভের দামগুলি শতাংশ সেটিংসের ভিত্তিতে গণনা করা হবে। যদি দামটি কোনও লাইনে স্পর্শ করে তবে অবস্থানটি বন্ধ হয়ে যাবে।

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

  • বিচার সঠিকতা উন্নত করতে তিনটি চলমান গড় একসাথে ব্যবহার করুন
  • ট্রেডিং ঝুঁকি প্রতি কার্যকরভাবে নিয়ন্ত্রণ করতে স্টপ লস এবং লাভ গ্রহণ সেট করুন
  • বিভিন্ন পণ্যের জন্য উপযুক্ত কাস্টমাইজযোগ্য চলমান গড় পরামিতি
  • চলমান গড় প্রকারের জন্য সাতটি বিকল্প, বৈচিত্র্যপূর্ণ কৌশল প্রকার

ঝুঁকি বিশ্লেষণ এবং সমাধান

  • তিনটি এমএ একত্রিত হলে ভুল সংকেত

    সমাধানঃ ভুল সংকেত এড়ানোর জন্য সঠিকভাবে এমএ পরামিতিগুলি সামঞ্জস্য করুন

  • অতিরিক্ত আক্রমণাত্মক স্টপ-লস/টেক-প্রফিট শতাংশ

    সমাধানঃ সূক্ষ্ম-নিয়ন্ত্রিত শতাংশ; খুব বড় বা খুব ছোট হতে পারে না

  • অনুপযুক্ত প্যারামিটার সেটিং যা খুব বেশি বা খুব কম ট্রেডের দিকে পরিচালিত করে

    সমাধানঃ সর্বোত্তম খুঁজে পেতে বিভিন্ন পরামিতি সমন্বয় পরীক্ষা

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

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

  • সর্বোত্তম খুঁজে পেতে বিভিন্ন টাইপ এবং দৈর্ঘ্য সমন্বয় পরীক্ষা

    সর্বোত্তম ফলাফলের জন্য বিভিন্ন এমএ দৈর্ঘ্য বা টাইপ সমন্বয় পরীক্ষা করুন

  • সিগন্যাল ফিল্টার হিসাবে অন্যান্য প্রযুক্তিগত সূচক যোগ করুন

    মাল্টি-ফ্যাক্টর যাচাইয়ের জন্য কেডিজে, এমএসিডি ইত্যাদির মতো সূচক যুক্ত করুন

  • পণ্যের বৈশিষ্ট্যগুলির উপর ভিত্তি করে পরামিতি নির্বাচন করুন

    অস্থির পণ্যগুলির জন্য এমএ সময়কাল সংক্ষিপ্ত করা; স্থিতিশীল পণ্যগুলির জন্য সময়কাল বাড়ানো

  • সর্বোত্তম পরামিতি খুঁজে পেতে মেশিন লার্নিং ব্যবহার করুন

    স্বয়ংক্রিয় পরামিতি দ্রুত অনুকূল অবস্থানের জন্য sweeping

সিদ্ধান্ত

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


/*backtest
start: 2024-01-08 00:00:00
end: 2024-01-15 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Kozlod - 3 MA strategy with SL/PT", shorttitle="kozlod_3ma", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 5)

// 
// author: Kozlod
// date: 2018-03-25
// 

////////////
// INPUTS //
////////////

ma_type        = input(title = "MA Type",            defval = "SMA", options = ['SMA', 'EMA', 'WMA', 'VWMA', 'HMA', 'SMMA', 'DEMA'])
short_ma_len   = input(title = "Short MA Length",    defval = 5,     minval = 1)
short_ma_src   = input(title = "Short MA Source",    defval = close)
medium_ma_len  = input(title = "Medium MA Length",   defval = 20,    minval = 2)
medium_ma_src  = input(title = "Medium MA Source",   defval = close)
long_ma_len    = input(title = "Long MA Length",     defval = 100,   minval = 3)
long_ma_src    = input(title = "Long MA Source",     defval = close)

sl_lev_perc    = input(title = "SL Level % (0 - Off)", type = float,   defval = 0,  minval = 0, step = 0.01)
pt_lev_perc    = input(title = "PT Level % (0 - Off)", type = float,   defval = 0,  minval = 0, step = 0.01)

// Set initial values to 0
short_ma  = 0.0
long_ma   = 0.0
medium_ma = 0.0

// Simple Moving Average (SMA)
if ma_type == 'SMA' 
    short_ma  := sma(short_ma_src,  short_ma_len)
    medium_ma := sma(medium_ma_src, medium_ma_len)
    long_ma   := sma(long_ma_src,   long_ma_len)

// Exponential Moving Average (EMA)
if ma_type == 'EMA'
    short_ma  := ema(short_ma_src,  short_ma_len)
    medium_ma := ema(medium_ma_src, medium_ma_len)
    long_ma   := ema(long_ma_src,   long_ma_len)

// Weighted Moving Average (WMA)
if ma_type == 'WMA'
    short_ma  := wma(short_ma_src,  short_ma_len)
    medium_ma := wma(medium_ma_src, medium_ma_len)
    long_ma   := wma(long_ma_src,   long_ma_len)

// Hull Moving Average (HMA)
if ma_type == 'HMA'
    short_ma  := wma(2*wma(short_ma_src,  short_ma_len  / 2) - wma(short_ma_src,  short_ma_len),  round(sqrt(short_ma_len)))
    medium_ma := wma(2*wma(medium_ma_src, medium_ma_len / 2) - wma(medium_ma_src, medium_ma_len), round(sqrt(medium_ma_len)))
    long_ma   := wma(2*wma(long_ma_src,   long_ma_len   / 2) - wma(long_ma_src,   long_ma_len),   round(sqrt(long_ma_len)))

// Volume-weighted Moving Average (VWMA)
if ma_type == 'VWMA'
    short_ma  := vwma(short_ma_src,  short_ma_len)
    medium_ma := vwma(medium_ma_src, medium_ma_len)
    long_ma   := vwma(long_ma_src,   long_ma_len)

// Smoothed Moving Average (SMMA)    
if ma_type == 'SMMA'
    short_ma  := na(short_ma[1])  ? sma(short_ma_src, short_ma_len)   : (short_ma[1]  * (short_ma_len  - 1) + short_ma_src)  / short_ma_len
    medium_ma := na(medium_ma[1]) ? sma(medium_ma_src, medium_ma_len) : (medium_ma[1] * (medium_ma_len - 1) + medium_ma_src) / medium_ma_len
    long_ma   := na(long_ma[1])   ? sma(long_ma_src,  long_ma_len)    : (long_ma[1]   * (long_ma_len   - 1) + long_ma_src)   / long_ma_len

// Double Exponential Moving Average (DEMA)
if ma_type == 'DEMA'
    e1_short  = ema(short_ma_src , short_ma_len)
    e1_medium = ema(medium_ma_src, medium_ma_len)
    e1_long   = ema(long_ma_src,   long_ma_len)
    
    short_ma  := 2 * e1_short  - ema(e1_short,  short_ma_len)
    medium_ma := 2 * e1_medium - ema(e1_medium, medium_ma_len)
    long_ma   := 2 * e1_long   - ema(e1_long,   long_ma_len)

/////////////
// SIGNALS //
/////////////

long_signal  = crossover( short_ma, medium_ma) and medium_ma > long_ma
short_signal = crossunder(short_ma, medium_ma) and medium_ma < long_ma

// Calculate PT/SL levels 
// Initial values 
last_signal    = 0
prev_tr_price  = 0.0
pt_level       = 0.0
sl_level       = 0.0

// Calculate previous trade price
prev_tr_price := (long_signal[1] and nz(last_signal[2]) != 1) or (short_signal[1] and nz(last_signal[2]) != -1) ? open : nz(last_signal[1]) != 0 ? prev_tr_price[1] : na

// Calculate SL/PT levels 
pt_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 + pt_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 - pt_lev_perc / 100)  : na
sl_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 - sl_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 + sl_lev_perc / 100)  : na

// Calculate if price hit sl/pt 
long_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) ==  1 and close >= pt_level
long_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) ==  1 and close <= sl_level

short_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) ==  -1 and close <= pt_level
short_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) ==  -1 and close >= sl_level

// What is last active trade? 
last_signal := long_signal ? 1 : short_signal ? -1 : long_hit_pt or long_hit_sl or short_hit_pt or short_hit_sl ? 0 : nz(last_signal[1])

//////////////
// PLOTTING //
//////////////

// Plot MAs
plot(short_ma,  color = red,    linewidth = 2)
plot(medium_ma, color = green,  linewidth = 2)
plot(long_ma,   color = yellow, linewidth = 2)


// Plot Levels 
plotshape(prev_tr_price, style = shape.cross, color = gray, location  = location.absolute, size = size.small)


plotshape(sl_lev_perc > 0 ? sl_level : na, style = shape.cross, color = red,   location  = location.absolute, size = size.small)
plotshape(pt_lev_perc > 0 ? pt_level : na, style = shape.cross, color = green, location  = location.absolute, size = size.small)

//////////////
// STRATEGY //
//////////////

strategy.entry("long",  true,  when = long_signal)
strategy.entry("short", false, when = short_signal)

strategy.close("long",  when = long_hit_pt  or long_hit_sl)
strategy.close("short", when = short_hit_pt or short_hit_sl)

আরো