ইম্পুটাম ব্রেকআউট কৌশল

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

img

সারসংক্ষেপ

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

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

এই কৌশলটির মূল ভিত্তি গতির সূচক উপর ভিত্তি করে। গতির সূচক হ'ল বর্তমান সময়ের বন্ধের মূল্য বিয়োগ N সময়ের আগে বন্ধের মূল্য। যখন সর্বশেষ বারটি N সময়ের আগে বন্ধের চেয়ে বেশি হয়, তখন গতি ধনাত্মক হয়, যা একটি ঊর্ধ্বমুখী প্রবণতা নির্দেশ করে; যখন সর্বশেষ বারটি N সময়ের আগে বন্ধের চেয়ে কম হয়, তখন গতি নেতিবাচক হয়, যা নেতিবাচক প্রবণতা নির্দেশ করে।

কৌশলটি প্রথমে ১৮ পেরিডিয়াম ইম্পোমেন্ট গণনা করে, যা বর্তমান বন্ধ বিয়োগ ১৮ পেরিডিয়াম আগে বন্ধ, mom0 এ সংরক্ষিত। এটি তারপর mom0 এর 1-পেরিডিয়াম ইম্পোমেন্ট গণনা করে, mom1 এ সংরক্ষিত।

যখন mom0>0 এবং mom1>0 হয়, তখন একটি দীর্ঘ সংকেত উৎপন্ন হয়, যা শক্তিশালী আপসাইড ইম্পোমেন্ট নির্দেশ করে। যখন mom0<0 এবং mom1<0, একটি সংক্ষিপ্ত সংকেত উৎপন্ন হয়, যা শক্তিশালী ডাউনসাইড ইম্পোমেন্ট নির্দেশ করে।

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

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

এই কৌশলটির সুবিধাগুলির মধ্যে রয়েছেঃ

  1. যুক্তিটি সহজ এবং সহজেই বোঝা যায়, যা পরিমাণগত ট্রেডিংয়ে নতুনদের জন্য উপযুক্ত।

  2. ইম্পটম সূচকগুলি মাঝারি থেকে দীর্ঘমেয়াদী প্রবণতা ট্র্যাক করার সময় তুলনামূলকভাবে উচ্চ বিজয় হার সহ বাজারের প্রবণতা এবং শক্তি ক্যাপচার করতে পারে।

  3. ডাবল ইম্পোমেন্ট ফিল্টার মিথ্যা ব্রেকআউট থেকে ক্ষতি এড়াতে সাহায্য করে।

  4. এটি ট্রেন্ডিং মার্কেটে ট্রেন্ডিং পজিশন তৈরি করতে এবং অতিরিক্ত রিটার্ন অর্জনের জন্য সিগন্যালের পরে পজিশন যুক্ত করে।

  5. সময়মতো স্টপ লস এক্সট্রিপশন একক ট্রেড ক্ষতির আকার নিয়ন্ত্রণ করে এবং বিপরীতমুখী থেকে বড় ক্ষতি এড়ায়।

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

এই কৌশলটির কিছু ঝুঁকি উল্লেখ করা উচিতঃ

  1. একটি আপট্রেন্ডে স্বল্পমেয়াদী pullbacks সময় স্টপ লস প্রস্থান, পুরো প্রবণতা ক্যাপচার করতে অক্ষম। স্টপ লস পরিসীমা প্রসারিত বিবেচনা করতে পারেন।

  2. বিভিন্ন বাজারে ঘন ঘন খোলা এবং বন্ধ ট্রেডিং কমিশন এবং স্লিপিং থেকে ব্যয় বৃদ্ধি করে। ট্রেডিং ফ্রিকোয়েন্সি হ্রাস করার জন্য ফিল্টারগুলি শিথিল করার বিষয়টি বিবেচনা করতে পারে।

  3. প্রবণতা বিপরীত হওয়ার পরে মূল দিকের ধারণ অব্যাহত থাকলে ক্ষতি বৃদ্ধি পায়। বিপরীততা সনাক্ত করতে প্রবণতা সূচক অন্তর্ভুক্ত করতে পারে।

  4. অনুপযুক্ত প্যারামিটার সেটিংগুলি অনুপস্থিত সংকেত বা মিথ্যা সংকেত তৈরি করে। বিভিন্ন বাজারের জন্য প্যারামিটারগুলি সামঞ্জস্য করা দরকার।

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

কৌশলটি অপ্টিমাইজ করার কিছু উপায়ঃ

  1. সময়সীমা এবং বাজারের উপর ভিত্তি করে গতি দৈর্ঘ্যের গণনা সামঞ্জস্য করে গতির পরামিতিগুলি অনুকূল করুন। সংকেতের গুণমান উন্নত করুন।

  2. প্রবণতা বিপরীত হওয়ার ফলে ক্ষতি এড়াতে MACD, KD এর মতো অন্যান্য সূচক ফিল্টার যুক্ত করুন।

  3. ট্রেন্ডিং মার্কেটে স্টপ লস বাড়িয়ে এবং ট্রেন্ডিং নয় এমন মার্কেটে স্টপ স্টপ কড়া করে স্টপ লস কৌশলটি অপ্টিমাইজ করা।

  4. পজিশনের আকার নির্ধারণের নিয়ম যোগ করুন যাতে অ-ট্রেন্ডের আকার কম হয় এবং আরও লাভ অর্জনের জন্য ট্রেন্ডের আকার বাড়ানো যায়।

  5. বিভিন্ন পণ্যের জন্য পৃথকভাবে প্যারামিটার অপ্টিমাইজ করুন অভিযোজনযোগ্যতা উন্নত করতে।

  6. মেশিন লার্নিং অ্যালগরিদম অন্তর্ভুক্ত করুন গতিশীলভাবে পরামিতি অপ্টিমাইজ করার জন্য।

সিদ্ধান্ত

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


/*backtest
start: 2023-10-15 00:00:00
end: 2023-11-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Momentum BF 🚀", overlay=true, precision=2, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)

/////////////// Time Frame ///////////////
_0 = input(false,  "════════ Test Period ═══════")
testStartYear = input(2017, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// Momentum /////////////
_1 = input(false, "═══════ Momentum ══════")
length = input(18)
price = close

momentum(seria, length) =>
    mom = seria - seria[length]
    mom

mom0 = momentum(price, length)
mom1 = momentum(mom0, 1)

/////////////// Strategy /////////////// 
long = mom0 > 0 and mom1 > 0
short = mom0 < 0 and mom1 < 0

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

last_open_long_signal = 0.0
last_open_short_signal = 0.0
last_open_long_signal := long_signal ? open : nz(last_open_long_signal[1])
last_open_short_signal := short_signal ? open : nz(last_open_short_signal[1])

last_long_signal = 0.0
last_short_signal = 0.0
last_long_signal := long_signal ? time : nz(last_long_signal[1])
last_short_signal := short_signal ? time : nz(last_short_signal[1])

in_long_signal = last_long_signal > last_short_signal
in_short_signal = last_short_signal > last_long_signal

last_high = 0.0
last_low = 0.0
last_high := not in_long_signal ? na : in_long_signal and (na(last_high[1]) or high > nz(last_high[1])) ? high : nz(last_high[1])
last_low := not in_short_signal ? na : in_short_signal and (na(last_low[1]) or low < nz(last_low[1])) ? low : nz(last_low[1])

since_longEntry = barssince(last_open_long_signal != last_open_long_signal[1]) 
since_shortEntry = barssince(last_open_short_signal != last_open_short_signal[1]) 

/////////////// Stop Losses Long ///////////////
_5 = input(false,  "═══════ Stop Loss L ══════")
SL_typel = input("Fixed", options=["Fixed", "ATR Derived"], title="Stop Loss Type")
sl_inpl = input(8.0, title='Fixed Stop Loss %') / 100
atrLkbl = input(20, minval=1, title='ATR Stop Period')
atrMultl = input(1.5, step=0.25, title='ATR Stop Multiplier') 
atr1l = atr(atrLkbl)

longStop1l = 0.0
longStop1l := short_signal ? na : long_signal ? close - (atr1l * atrMultl) : longStop1l[1]

slLongl = in_long_signal ? strategy.position_avg_price * (1 - sl_inpl) : na
long_sll = in_long_signal ? slLongl : na

/////////////// Stop Losses Short ///////////////
_6 = input(false, "═══════ Stop Loss S ══════")
SL_types = input("Fixed", options=["Fixed", "ATR Derived"], title="Stop Loss Type")
sl_inps = input(7.0, title='Fixed Stop Loss %') / 100
atrLkbs = input(20, minval=1, title='ATR Stop Period')
atrMults = input(1.5, step=0.25, title='ATR Stop Multiplier') 
atr1s = atr(atrLkbs)

shortStop1s = 0.0
shortStop1s := long_signal ? na : short_signal ? close + (atr1s * atrMults) : shortStop1s[1]

slShorts = strategy.position_avg_price * (1 + sl_inps)
short_sls = in_short_signal ? slShorts : na

_7 = input(false, "══════ Longs or Shorts ═════")
useLongs = input(true, title="Use Longs")
useShorts = input(true, title="Use Shorts")

/////////////// Execution ///////////////
if testPeriod()
    if useLongs
        strategy.entry("L", strategy.long, when=long)
        strategy.exit("L SL", "L", stop = SL_typel == "Fixed" ? long_sll : longStop1l, when=since_longEntry > 0)
    if useShorts
        strategy.exit("S SL", "S", stop = SL_types == "Fixed" ? short_sls : shortStop1s, when=since_shortEntry > 0)
        strategy.entry("S", strategy.short, when=short)
    if not useShorts
        strategy.close("L", when=short)
    if not useLongs
        strategy.close("S", when=long)

/////////////// Plotting /////////////// 
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=40)
p0 = plot(close)
p1 = plot(strategy.position_size <= 0 ? na : SL_typel == "Fixed" ? long_sll : longStop1l, title="Long Stop Loss", color=color.yellow, style=plot.style_linebr, linewidth=2)
p2 = plot(strategy.position_size >= 0 ? na : SL_types == "Fixed" ? short_sls : shortStop1s, title="Short Stop Loss", color=color.orange, style=plot.style_linebr, linewidth=2)
p3 = plot(strategy.position_size <= 0 ? na : strategy.position_avg_price, style=plot.style_linebr, title="Long Entry", color=color.green, linewidth=2)
p4 = plot(strategy.position_size >= 0 ? na : strategy.position_avg_price, style=plot.style_linebr, title="Short Entry", color=color.red, linewidth=2)
fill(p0, p3, color = color.lime, transp=60)
fill(p0, p4, color = color.red, transp=60)

আরো