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


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

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

ওভারভিউ

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

কৌশল নীতি

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

এই কৌশলটি কিছু গোলমাল ট্রেডিং ফিল্টার করার জন্য একটি গতিশীলতা ফ্যাক্টর যুক্ত করেছে। যদি দামের ওঠানামা 5 টিএটিআর এর চেয়ে কম হয় তবে কৌশলটি ট্রেডে প্রবেশ করবে না। এটি ক্ষুদ্র ব্যবসায়ের ক্ষয়ক্ষতি এড়াতে পারে কারণ অতিরিক্ত শূন্যপদ রয়েছে।

পজিশন খোলার পর, কৌশলটি N-এর মান ব্যবহার করে, যা সমুদ্রের নীতির মধ্যে রয়েছে। এই সিস্টেমটি সাম্প্রতিক 20 দিনের সর্বোচ্চ এবং সর্বনিম্ন মূল্যের উপর ভিত্তি করে একটি স্টপ লস সেট করে। উদাহরণস্বরূপ, একাধিক স্টপ লস মূল্য গত 20 দিনের সর্বনিম্ন মূল্যের নীচে 2N এর ATR। কৌশলটির স্টপ পদ্ধতিটি তুলনামূলকভাবে সহজ, অ্যাকাউন্টের মোট সম্পদের 10% হিসাবে সেট করা হয়েছে।

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

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

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

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

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

যদিও এই কৌশলটির অপ্টিমাইজেশনের জন্য অনেক জায়গা রয়েছে, তবে এর কিছু সম্ভাব্য ঝুঁকি রয়েছে যা এড়ানো দরকারঃ

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

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

উপরোক্ত ঝুঁকি বিশ্লেষণের ভিত্তিতে, এই কৌশলটির আরও কয়েকটি প্রধান অপ্টিমাইজেশান দিক রয়েছেঃ

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

সারসংক্ষেপ

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

কৌশল সোর্স কোড
/*backtest
start: 2023-10-23 00:00:00
end: 2023-11-22 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Heiken Ashi BF 🚀", overlay=false, 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 ///////////////
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(2029, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// HA /////////////
haTicker = heikinashi(syminfo.tickerid)
haOpen = security(haTicker, "D", open)
haHigh = security(haTicker, "D", high)
haLow = security(haTicker, "D", low)
haClose = security(haTicker, "D", close)

///////////// Rate Of Change ///////////// 
source = close
roclength = input(30, minval=1)
pcntChange = input(7.0, minval=1)
roc = 100 * (source - source[roclength]) / source[roclength]
emaroc = ema(roc, roclength / 2)
isMoving() => emaroc > (pcntChange / 2) or emaroc < (0 - (pcntChange / 2))

/////////////// Strategy ///////////////
long = haOpen < haClose and isMoving()
short = haOpen > haClose and isMoving()

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])

sl_inp = input(2.0, title='Stop Loss %') / 100
tp_inp = input(5000.0, title='Take Profit %') / 100
 
take_level_l = strategy.position_avg_price * (1 + tp_inp)
take_level_s = strategy.position_avg_price * (1 - tp_inp)

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

slLong = in_long_signal ? strategy.position_avg_price * (1 - sl_inp) : na
slShort = strategy.position_avg_price * (1 + sl_inp)
long_sl = in_long_signal ? slLong : na
short_sl = in_short_signal ? slShort : na

/////////////// Execution ///////////////
if testPeriod()
    strategy.entry("L",  strategy.long, when=long)
    strategy.entry("S", strategy.short, when=short)
    strategy.exit("L SL", "L", stop=long_sl, limit=take_level_l, when=since_longEntry > 0)
    strategy.exit("S SL", "S", stop=short_sl, limit=take_level_s, when=since_shortEntry > 0)

/////////////// Plotting ///////////////
plotcandle(haOpen, haHigh, haLow, haClose, title='HA Candles', color = haOpen < haClose ? color.lime : color.red)
bgcolor(isMoving() ? long ? color.lime : short ? color.red : na : color.white, transp=70)
bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=50)