মোমেন্টাম টার্টল ট্রেন্ড ট্র্যাকিং কৌশল

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

img

সারসংক্ষেপ

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

কৌশল নীতি

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

কিছু গোলমাল ট্রেড ফিল্টার করার জন্য, এই কৌশলটি একটি গতির ফ্যাক্টরও অন্তর্ভুক্ত করে। যদি দামের ওঠানামা 5 ATRs এর চেয়ে কম হয় তবে কৌশলটি ট্রেডগুলিতে প্রবেশ করবে না। এটি পার্শ্ববর্তী বাজারে whipsaws থেকে ক্ষতি এড়ায়।

স্টপ লসের জন্য মূল টার্টল নিয়মের N-ব্রেকআউট প্রস্থানগুলি ব্যবহার করে। এই সিস্টেমটি গত ২০ দিনের সর্বোচ্চ এবং সর্বনিম্ন মূল্যের উপর ভিত্তি করে স্টপ লস সেট করে। উদাহরণস্বরূপ, দীর্ঘ অবস্থানের জন্য স্টপ লস গত ২০ দিনের সর্বনিম্নের চেয়ে 2N ATRs কম হবে। এই কৌশলটির জন্য মুনাফা গ্রহণ সহজ - মোট অ্যাকাউন্টের মূল্যের 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)

আরো