এই কৌশলটি লিনিয়ার রিটার্ন চ্যানেলের উপরে এবং নীচে ট্র্যাক ব্যবহার করে, ডাবল স্ট্যান্ডার্ড ডিফারেন্স সেটিংয়ের সাথে মিলিত ক্রয় এবং বিক্রয় সংকেতগুলি ভেঙে দেয়, দামের বিপর্যয়ের পরে পজিশন খোলার জন্য অবস্থান তৈরি করে। একই সাথে চ্যানেলের মধ্যবর্তী লাইনের ক্রসগুলিকে সমতল পজিশনের সংকেত হিসাবে ব্যবহার করে, মুনাফার পরে স্টপ।
এই কৌশলটির কেন্দ্রীয় যুক্তিটি লিনিয়ার রিগ্রেশন চ্যানেলের উপরের এবং নীচের ট্র্যাক এবং মধ্যম লাইনগুলির উপর ভিত্তি করে। নির্দিষ্ট গণনা প্রক্রিয়াটি নিম্নরূপঃ
মূল্যের লিনিয়ার রিগ্রেশন linreg, এবং পরবর্তী চক্রের লিনিয়ার রিগ্রেশন linreg_p
লিনিয়ার রিগ্রেশন মানের উপর ভিত্তি করে লিনিয়ার রিগ্রেশন লাইনের ঢালুতা slope এবং বিভাজক intercept
রিগ্রেশন লাইন থেকে মূল্য বিচ্যুতি গণনা
deviation এর গুণিতক dev সেট করুন, এবং আপনি আপ এবং ডাউন ট্র্যাকের বিচ্যুতি পাবেন
যখন দাম নিচের ট্র্যাক থেকে উপরে উঠে যায়, তখন buy সিগন্যাল সেট করুন
বিক্রয় সংকেত সেট করুন যখন দাম উপরের ট্র্যাক থেকে নীচে ভেঙে যায়
যখন দাম মধ্যম লাইন থেকে বিপরীত হয়, তখন স্টপ সিগন্যাল exit সেট করুন
ক্রয় সংকেত, বিক্রয় সংকেত এবং স্টপ সংকেতের উপর ভিত্তি করে ট্রেডিং লজিক সেট করুন
এই কৌশলটির সবচেয়ে বড় সুবিধা হল যে এটি লিনিয়ার রিগ্রেশন চ্যানেলের দ্বারা প্রতিফলিত মূল্যের মাঝারি এবং দীর্ঘমেয়াদী প্রবণতা ব্যবহার করে। এটি নিম্নলিখিত দিকগুলিতে বিশেষভাবে প্রকাশিত হয়ঃ
একটি লিনিয়ার রিগ্রেশন চ্যানেলের উপরের এবং নীচের ট্র্যাকগুলি কার্যকরভাবে দামের ওঠানামার স্বাভাবিক পরিসীমা প্রতিফলিত করতে পারে, চ্যানেলের পরিসীমা ব্যবহার করে ট্রেডিং সিগন্যাল সেট করে, যা ভুল সংকেত হ্রাস করতে পারে।
মাঝের লাইনটি ক্রস করুন স্টপ সিগন্যাল হিসাবে, আপনি লাভের সর্বাধিক লক করতে পারেন, লাভের পরে পুনরাবৃত্তির ক্ষতি এড়াতে পারেন।
লিনিয়ার রিগ্রেশন ট্রান্সমিটার একটি নির্দিষ্ট ধরনের বিলম্বের সাথে কাজ করে যা স্বল্পমেয়াদী বাজারের শব্দকে কার্যকরভাবে মুছে ফেলতে পারে এবং ট্রেডিং সংকেতকে আরও নির্ভরযোগ্য করে তোলে।
এই কৌশলটি অ্যালগরিদমাইজেশনের জন্য সহজ, কম প্যারামিটারযুক্ত এবং কোয়ান্টাম ট্রেডিংয়ের জন্য উপযুক্ত।
এই কৌশলটির কিছু ঝুঁকিও রয়েছে, যেমনঃ
লিনিয়ার রিগ্রেশন চ্যানেলটি পিছিয়ে আছে এবং স্বল্পমেয়াদী তীব্র পরিবর্তনের পরে প্রবণতাটি মিস করতে পারে। চ্যানেলের চক্রটি যথাযথভাবে সংক্ষিপ্ত করা যেতে পারে, প্যারামিটারটি অপ্টিমাইজ করা যেতে পারে।
ভুলভাবে সেট করা ডিফারেনশিয়ালের গুণকও ভুল সংকেতের কারণ হতে পারে। এটি ফিডব্যাক অপ্টিমাইজেশান প্যারামিটারগুলির সাথে একত্রিত হতে পারে।
কেবলমাত্র ব্রেকিং সিগন্যালের উপর ভিত্তি করে, ঝাঁকুনির ক্ষতির সম্ভাবনা বেশি। অন্যান্য সূচকগুলির সাথে মিলিয়ে ফিল্টারিং বিবেচনা করা যেতে পারে।
কার্ভ ফিট হওয়ার কিছু ঝুঁকি রয়েছে। অন্যান্য চ্যানেলের সাথে সংযুক্ত হওয়া বা বিভিন্ন ডেটা উত্স পরীক্ষা করা বিবেচনা করা যেতে পারে।
এই কৌশলটি মূলত নিম্নলিখিত দিকগুলি থেকে অপ্টিমাইজ করা যেতে পারেঃ
লিনিয়ার রিগ্রেশন চ্যানেলের দৈর্ঘ্য অপ্টিমাইজ করা, বিলম্বিততা এবং প্রতিক্রিয়া সংবেদনশীলতার ভারসাম্য।
অপ্টিমাইজড ডিফারেনশিয়াল কোয়ালিটি, সিগন্যালের গুণমান বাড়ানোর জন্য, ঝুঁকি নিয়ন্ত্রণের সর্বোচ্চ সম্ভাবনার সাথে।
ইএমএ, কেডিজে ইত্যাদির মতো অন্যান্য সূচক যুক্ত করুন।
এটিআর স্টপ, ট্র্যাকিং স্টপ ইত্যাদি।
বিভিন্ন ডেটা উত্সের কৌশলগত প্রভাব পরীক্ষা করা। যেমন পুনর্বাসন ডেটা, সূচক ডেটা ইত্যাদি ব্যবহার করা।
বাজারের পরিবেশের সাথে মিলিতভাবে ((মাল্টি-ফ্রি হেড মার্কেট) গতিশীল সমন্বয় প্যারামিটার বা সিগন্যাল ওজন
সামগ্রিকভাবে, এই কৌশলটি একটি লিনিয়ার রিগ্রেশন চ্যানেলকে সংকেত সূচক হিসাবে ব্যবহার করে। কৌশলটি পরিষ্কার এবং সহজেই বোঝা যায়, প্যারামিটারগুলি কম এবং বাস্তবায়নের ক্ষেত্রে খুব বেশি অসুবিধা হয় না। তবে কীভাবে বাজারের পরিবেশের গতিশীলতার সাথে প্যারামিটারগুলিকে অনুকূলিত করা যায় এবং অন্যান্য সূচকগুলির সাথে সংযুক্ত করে সংকেত ফিল্টার করা যায় তা কৌশলটির সাফল্যের মূল চাবিকাঠি। ক্রমাগত পরীক্ষা এবং অপ্টিমাইজেশনের মাধ্যমে, কৌশলটি একটি স্থিতিশীল লাভজনক পরিমাণে পরিমাপযোগ্য সিস্টেম হতে পারে।
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Robotrading
//@version=4
strategy("robotrading linreg", "linreg", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, commission_value = 0.1)
//Settings
source = input(close)
length = input(100, minval=1)
offset = input(0, minval=0)
dev = input(2.0, "Deviation")
smoothing = input(1, minval=1)
mtf_val = input("", "Resolution", input.resolution)
signals = input("Recent", "Signals Display", options=["Recent", "All"])
goto = input(0, "End At Bar Index")
//Lin.reg.
cc(x) => x=="Red"?color.red:x=="Lime"?color.lime:x=="Orange"?color.orange:x=="Teal"?color.teal:x=="Yellow"?color.yellow:x=="Black"?color.black:color.white
data(x) => sma(security(syminfo.tickerid, mtf_val!="" ? mtf_val : timeframe.period, x), smoothing)
linreg = data(linreg(source, length, offset))
linreg_p = data(linreg(source, length, offset+1))
//Deviation
x = bar_index
slope = linreg - linreg_p
intercept = linreg - x*slope
deviationSum = 0.0
for i = 0 to length-1
deviationSum:= deviationSum + pow(source[i]-(slope*(x-i)+intercept), 2)
deviation = sqrt(deviationSum/(length))
x1 = x-length
x2 = x
y1 = slope*(x-length)+intercept
y2 = linreg
//Cross
dm_current = -deviation*dev + y2
dp_current = deviation*dev + y2
ex_current = (dm_current + dp_current) / 2
buy = crossunder(close, dm_current)
sell = crossover(close, dp_current)
exit = crossover(close, ex_current) or crossunder(close, ex_current)
//Channel
updating = goto <= 0 or x < goto
// if updating
// line b = line.new(x1, y1, x2, y2, xloc.bar_index, extend.right, color.aqua, width = 3)
// line.delete(b[1])
// line dp = line.new(x1, deviation*dev + y1, x2, deviation*dev + y2, xloc.bar_index, extend.right, color.red, width = 3)
// line.delete(dp[1])
// line dm = line.new(x1, -deviation*dev + y1, x2, -deviation*dev + y2, xloc.bar_index, extend.right, color.lime, width = 3)
// line.delete(dm[1])
//Lines
plot(dm_current, color = color.lime)
plot(dp_current, color = color.red)
plot(ex_current)
//Trading
if ex_current > 0
strategy.entry("Long", strategy.long, na, limit = dm_current)
strategy.entry("Short", strategy.short, na, limit = dp_current)
strategy.exit("ExitLong", "Long", limit = ex_current)
strategy.exit("ExitShort", "Short", limit = ex_current)