ট্রেন্ড অনুসরণকারী মোমেন্টাম ব্রেকআউট কৌশল


সৃষ্টির তারিখ: 2023-11-15 11:09:21 অবশেষে সংশোধন করুন: 2023-11-15 11:09:21
অনুলিপি: 0 ক্লিকের সংখ্যা: 584
1
ফোকাস
1617
অনুসারী

ট্রেন্ড অনুসরণকারী মোমেন্টাম ব্রেকআউট কৌশল

ওভারভিউ

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

কৌশল নীতি

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

কৌশলটি প্রথমে 18 চক্রের দৈর্ঘ্যের গতিশীলতা গণনা করে, অর্থাৎ বর্তমান বন্ধের দামকে 18 চক্রের আগের বন্ধের দাম থেকে বিয়োগ করে mom0 ≠, তারপর mom0 এর এক চক্রের গতিশীলতা গণনা করে mom1 ≠।

যখন mom0>0 এবং mom1>0 হয় তখন একটি মাল্টিসিগন্যাল তৈরি হয়, তখন দামের উত্থানের গতি শক্তিশালী হয়; যখন mom0 এবং mom1 হয় তখন একটি শূন্য সংকেত তৈরি হয়, তখন দামের পতনের গতি শক্তিশালী হয়।

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

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

এই কৌশলটির সুবিধাগুলো হলঃ

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

  2. ডায়নামিক সূচকগুলি বাজারের প্রবণতা এবং শক্তিকে ক্যাপচার করতে সক্ষম, মধ্য-লং লাইন প্রবণতা অনুসরণ করে উচ্চতর সাফল্যের হার রয়েছে।

  3. ডাবল-ডাইমেনশন ফিল্টার ব্যবহার করে, ভুয়া ব্রেকআউটের কিছু অংশ ফিল্টার করা যায়।

  4. ট্রেডিং সিগন্যালের পরে ট্রেন্ডিং পজিশন তৈরির জন্য পজিশন বাড়ানো হয়, যা ট্রেন্ডিং পরিস্থিতির অতিরিক্ত লাভ অর্জন করতে পারে।

  5. সময়মতো স্টপ লস এট্রিবিউট করা একক ক্ষতি নিয়ন্ত্রণ করতে পারে এবং বিপরীতের কারণে অত্যধিক ক্ষতি এড়াতে পারে।

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

এই কৌশলটির কিছু ঝুঁকি রয়েছে যা সম্পর্কে সতর্ক থাকা দরকারঃ

  1. বহু-হ্যান্ডেড ট্রেডিংয়ের মধ্যে স্বল্পমেয়াদী সমন্বয়গুলি স্টপ-লস আউট তৈরি করে, পুরো চক্রের ট্রেডিং ধরতে পারে না। স্টপ-লসের পরিধি যথাযথভাবে শিথিল করা যেতে পারে।

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

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

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

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

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

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

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

  3. অপ্টিমাইজ করা স্টপ লস কৌশল, ট্রেডিং প্রবণতাগুলিতে যথাযথভাবে স্টপ লস শিথিল করা; অ-প্রবণতা বাজার যথাযথভাবে স্টপ লস কঠোর করা।

  4. পজিশন ম্যানেজমেন্ট কৌশল বাড়ান, ট্রেন্ডিং না হলে পজিশন হ্রাস করুন; ট্রেন্ডিং হলে পজিশন বাড়ান যাতে আরও আয় হয়।

  5. বিভিন্ন জাতের জন্য প্যারামিটারগুলিকে অপ্টিমাইজ করুন, প্যারামিটারগুলির অভিযোজনযোগ্যতা বাড়ান।

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

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*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)