প্রবণতা অনুসরণকারী কৌশল প্রবণতা আত্মবিশ্বাস উপর ভিত্তি করে

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

img

সারসংক্ষেপ

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

কৌশল নীতি

কৌশলটি সাধারণ লিনিয়ার রিগ্রেশন ব্যবহার করে অতীতের N বন্ধের দামের রৈখিক ফিট গণনা করে, বন্ধের দাম থেকে বিচ্যুতির ঢাল k এবং স্ট্যান্ডার্ড বিচ্যুতি σ পাওয়া যায়। তারপরে প্রবণতা নির্ভরতা k / σ হিসাবে সংজ্ঞায়িত করা হয়।

যখন প্রবণতার আস্থা লং এন্ট্রি থ্রেশহোল্ড অতিক্রম করে, তখন লং যান; যখন এটি লং আউটসিট থ্রেশহোল্ডে পড়ে, তখন লং বন্ধ করুন। একইভাবে, যখন প্রবণতার আস্থা শর্ট এন্ট্রি থ্রেশহোল্ডের নীচে থাকে, তখন শর্ট যান; যখন এটি শর্ট আউটসিট থ্রেশহোল্ড অতিক্রম করে, তখন শর্ট বন্ধ করুন।

এইভাবে এটি একটি স্পষ্ট রৈখিক প্রবণতা অনুসরণ করে না এমন বন্য মূল্যের গতি থেকে সংকেতগুলি ফিল্টার করতে পারে।

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

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

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

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

কৌশলটি ফাঁদে পড়ার ঝুঁকি রয়েছে। এটি যখন উল্লেখযোগ্য প্রবণতা বিপরীত ঘটে তখন এটি বড় ক্ষতির সৃষ্টি করবে। উপরন্তু, অনুপযুক্ত পরামিতি সেটিংগুলিও ওভারট্রেডিং বা ভাল ট্রেডিং সুযোগগুলি মিস করতে পারে।

ডাউনসাইড ঝুঁকি নিয়ন্ত্রণ করতে স্টপ লস সেট করা যেতে পারে। একই সময়ে, অতিরিক্ত ফিটিং এড়াতে প্যারামিটারগুলির পছন্দটি সাবধানে মূল্যায়ন করা উচিত।

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

কৌশলটি নিম্নলিখিত দিকগুলিতে আরও অনুকূলিত করা যেতে পারেঃ

  1. লাভ এবং নিয়ন্ত্রণ ঝুঁকি লক করার জন্য স্টপ লস / লাভ গ্রহণের যুক্তি যুক্ত করুন

  2. গতিশীল পরামিতি সমন্বয় জন্য অভিযোজিত অপ্টিমাইজেশান মডিউল যোগ করুন

  3. প্রবণতা বিপরীত পয়েন্ট নির্ধারণ এবং আরও জয় হার উন্নত করতে মেশিন লার্নিং মডেল যোগ করুন

  4. সাধারণীকরণ উন্নত করার জন্য বিভিন্ন পণ্য এবং সময়সীমার উপর অভিযোজনযোগ্যতা পরীক্ষা করুন

সিদ্ধান্ত

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


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © carefulCamel61097

// ################################################################################################

// "This is a trend following strategy that performed very well on the past 5 years"
// "Intended to be used on BTC-USDT, 4hr timeframe"

// "A factor 2 Leverage can be added by changing Order Size to 200% of equity"
// "Higher leverage is not recommended due to big drawdowns"

// "Also seems to work on 1D timeframe, although ideal parameters may be different"
// "Also seems to work on ETH-USDT and some other altcoins, although ideal parameters are different"

// ################################################################################################

//@version=5
strategy("Trend Following based on Trend Confidence", overlay=false )

// Inputs

source      = input(close)

since       = input(timestamp('2000-01-01'), title='Start trading interval')
till        = input(timestamp('2030-01-01'), title='End trading interval')

length      = input(30, title='Length')

longs_on    = input.bool(true, title='Longs')
shorts_on   = input.bool(true, title='Shorts')

// Parameters for best performance 2018 - 2022
// long_entry  = input.float(0.26, step=0.01, title='Long entry threshold')
// long_exit   = input.float(-0.10, step=0.01, title='Long exit threshold')
// short_entry = input.float(-0.24, step=0.01, title='Short entry threshold')
// short_exit  = input.float(-0.04, step=0.01, title='Short exit threshold')

long_entry  = input.float(0.25, step=0.01, title='Long entry threshold')
long_exit   = input.float(-0.10, step=0.01, title='Long exit threshold')
short_entry = input.float(-0.25, step=0.01, title='Short entry threshold')
short_exit  = input.float(-0.05, step=0.01, title='Short exit threshold')

stop_loss   = input.float(10, step=1, title='Stop loss (percentage)') / 100

// Trend Confidence

linreg = ta.linreg(source, length, 0)
linreg_p = ta.linreg(source, length, 0+1)

x = bar_index
slope = linreg - linreg_p
intercept = linreg - x*slope
deviationSum = 0.0
for i = 0 to length-1
    deviationSum := deviationSum + math.pow(source[i]-(slope*(x-i)+intercept), 2)
deviation = math.sqrt(deviationSum/(length))

slope_perc = slope / source[0]
deviation_perc = deviation / source[0]
trend_confidence = slope_perc / deviation_perc

// Strategy

in_interval = true

sl_long = strategy.position_avg_price * (1 - stop_loss)
sl_short = strategy.position_avg_price * (1 + stop_loss)

if in_interval and longs_on and ta.crossover(trend_confidence, long_entry)
    strategy.entry("TC Long Entry", strategy.long)
    strategy.exit("TC Long Exit", stop=sl_long)
if in_interval and longs_on and ta.crossunder(trend_confidence, long_exit)
    strategy.close("TC Long Entry")

if in_interval and shorts_on and ta.crossunder(trend_confidence, short_entry)
    strategy.entry("TC Short Entry", strategy.short)
    strategy.exit("TC Short Exit", stop=sl_short)
if in_interval and shorts_on and ta.crossover(trend_confidence, short_exit)
    strategy.close("TC Short Entry")

// Plots 

plot(trend_confidence, "Trend Confidence", color.rgb(255, 255, 255))

plot(long_entry, "", color.rgb(0, 255, 0), linewidth=1)
plot(long_exit, "", color.rgb(255, 0, 0), linewidth=1)
plot(short_entry, "", color=bar_index % 10 == 0 ? color.rgb(0, 255, 0) : #00000000, linewidth=1)
plot(short_exit, "", color=bar_index % 10 == 0 ? color.rgb(255, 0, 0) : #00000000, linewidth=1)


আরো