
এই কৌশলটি বুলিং চ্যানেলের উপর ভিত্তি করে এবং স্বনির্ধারিত চলমান গড়ের সাথে মিলিত হয়, যা প্রবণতা সম্পর্কে সঠিক বিচার এবং ট্র্যাকিং সক্ষম করে। প্যারামিটারগুলিকে গতিশীলভাবে সামঞ্জস্য করে, কৌশলটি বিভিন্ন জাত এবং বাজারের পরিবেশের সাথে মানিয়ে নিতে সক্ষম করে, যার ফলে এটি আরও স্থিতিশীল এবং অভিযোজিত হয়।
এই কৌশলটি মূলত নিম্নলিখিত অংশগুলি নিয়ে গঠিতঃ
স্বনির্ধারিত চলমান গড় গণনা করুন। এখানে একটি নির্দিষ্ট সময়ের মধ্যে একটি লিনিয়ার রিগ্রেশন কার্ভকে চলমান গড় হিসাবে গণনা করার জন্য একটি লিনিয়ার রিগ্রেশন সূচক ব্যবহার করা হয়।
বুলিং ট্রানেলের উপর-নিচের ট্রেলার গণনা করুন। এখানে স্বনির্ধারিত এটিআর সূচক ব্যবহার করে একটি ট্রানেল ব্যান্ড গণনা করা হয়, তারপরে ব্যবহারকারীর দ্বারা নির্ধারিত প্যারামিটার ratio2 এর সাথে মিলিত হয়ে বুলিং ট্রানেলের উপর-নিচের ট্রানেল গণনা করা হয়।
ক্রয়-বিক্রয় সময় নির্ধারণ করুন। প্রবণতা দিক এবং ক্রয়-বিক্রয় সময় নির্ধারণ করুন যখন দামটি নীচে থেকে নীচে ট্র্যাকটি ভেঙে দেয়। যখন দামটি নীচে থেকে নীচে ট্র্যাকটি ভেঙে দেয় তখন এটি কেনার সংকেত হিসাবে বিবেচিত হয়। যখন দামটি উপরে থেকে নীচে ট্র্যাকটি ভেঙে দেয় তখন এটি বিক্রয় সংকেত হিসাবে বিবেচিত হয়।
স্টপ লস বন্ধ করুন। ঝুঁকি নিয়ন্ত্রণের জন্য একটি নির্দিষ্ট পয়েন্ট স্টপ ব্যবহার করুন, এবং প্রথমে নির্দিষ্ট পয়েন্টের পরে ট্র্যাকিং স্টপ পদ্ধতি ব্যবহার করে স্টপ স্টপ সেট করুন, মুনাফা নিশ্চিত করার সময় প্রবণতা সর্বাধিকীকরণ করুন।
পুনঃপরীক্ষার সময়কালের সাথে পুনঃপরীক্ষার শুরু এবং শেষের সময় নির্ধারণ করা হয়েছে, কৌশলটি পরীক্ষার জন্য অনুকূলিতকরণ করা হয়েছে।
স্বনির্ধারিত প্যারামিটার ডিজাইন: বুলিং চ্যানেলের চ্যানেল বন্ড এবং চলমান গড় উভয়ই স্বনির্ধারিত পদ্ধতিতে গণনা করা হয়, যাতে কৌশলগুলি বাজারের পরিবর্তনের সাথে খাপ খাইয়ে নিতে পারে।
ট্রেন্ড টার্ন পয়েন্ট নির্ধারণের জন্য বুলিন চ্যানেলের আপ-ডাউন ট্র্যাকের ব্যবহার করা হয়, বায়োসিগন্যাল তুলনামূলকভাবে পরিষ্কার।
স্টপ লস স্টপ সেটআপ যুক্তিসঙ্গত। ফিক্সড স্টপ লস কন্ট্রোল ঝুঁকি গ্রহণ করুন, স্টপ স্টপ পদ্ধতি অনুসরণ করুন প্রবণতা মুনাফা সর্বাধিকীকরণের জন্য।
পুনরাবৃত্তি কার্যকারিতা যাচাই করুন। কৌশলটি পুনরাবৃত্তি করার সময়টি সেট করুন যাচাই করার জন্য, এটি নিশ্চিত করুন যে এটি ঐতিহাসিক প্রেক্ষাপটেও কার্যকর ছিল।
সহজেই বোঝা যায়। এই কৌশলটি পরিষ্কার এবং সহজেই বোঝা যায়, কোডটি সহজেই বোঝা যায় এবং রিয়েল-ডিস্কে কাজ করা যায়।
বুলিং চ্যানেলের প্যারামিটার অপ্টিমাইজেশান প্রয়োজন। বুলিং চ্যানেলের চ্যানেল বেন্ড এবং রিটার্ন চক্রগুলি বিভিন্ন জাত এবং বাজারের পরিবেশের জন্য অপ্টিমাইজ করা দরকার। যদি অপ্টিমাইজেশনটি সঠিক না হয় তবে একাধিক মিসড সিগন্যাল বা ঘন ঘন মিথ্যা ট্রিগার দেখা দেয়।
পুনর্বিবেচনার সময় যথেষ্ট নাও হতে পারে। এই পুনর্বিবেচনাটি কেবলমাত্র সাম্প্রতিক পুনর্বিবেচনার ক্ষেত্রটি সেট করে, যা কৌশলগত স্থায়িত্বের সম্পূর্ণ যাচাইয়ের জন্য দীর্ঘতর ইতিহাসের ঘটনাকে কভার করতে পারে না।
ওভারফিট হওয়ার ঝুঁকি থাকতে পারে। বর্তমান রিটার্নিং প্যারামিটারগুলি কেবলমাত্র সাম্প্রতিক নির্দিষ্ট পরিস্থিতির জন্য অনুকূলিত হতে পারে, যার ফলে ঐতিহাসিক ওভারফিট হওয়ার ঝুঁকি রয়েছে।
স্টপ পয়েন্টের সংখ্যা নির্ধারণের জন্য মূল্যায়ন করা প্রয়োজন। বর্তমান স্টপ পয়েন্টের সংখ্যা কম, এটি খুব সংবেদনশীল হতে পারে এবং ছোট কম্পন দ্বারা স্টপ পয়েন্টের ক্ষতি হতে পারে। উপযুক্ত স্টপ পয়েন্টের সংখ্যা মূল্যায়ন করা প্রয়োজন।
কোয়ান্টিফিকেশন মেট্রিক্সের অভাব। বর্তমানে, ট্রেডিং সিগন্যালগুলিকে কেবল গ্রাফিকাল ব্রেকথ্রু দ্বারা বিচার করা হয়। সিগন্যালের কার্যকারিতা যাচাই করার জন্য কোয়ান্টিফিকেশন মেট্রিক্স চালু করা হয়নি।
আরো অনেক স্বনির্ধারিত সূচক চালু করা হয়েছে। বিভিন্ন স্বনির্ধারিত গড়রেখা, স্বনির্ধারিত চ্যানেল সূচকগুলির সমন্বয় পরীক্ষা করা যেতে পারে, আরো শক্তিশালী প্রবণতা ট্র্যাকিং কৌশল তৈরি করা যেতে পারে।
প্যারামিটার সেটিং অপ্টিমাইজ করুন। আপনি আরও পদ্ধতিগত পদ্ধতি যেমন জেনেটিক্যাল অ্যালগরিদমের মাধ্যমে ব্রুইন চ্যানেল এবং গড় লাইন প্যারামিটারগুলির সর্বোত্তম সমন্বয় খুঁজে পেতে পারেন।
পুনর্নির্মাণের সময়সীমা প্রসারিত করুন। পুনর্নির্মাণের সময়সীমা প্রসারিত করুন, পরামিতিগুলির অপ্টিমাইজেশনের স্থায়িত্ব পরীক্ষা করুন। আরও বাস্তবসম্মত পুনর্নির্মাণের জন্য স্লাইড পয়েন্ট, প্রসেসিং ফি এবং অন্যান্য লেনদেনের ব্যয় প্রবর্তন করুন।
কোয়ান্টামাইজেশন ফিল্টারিং নিয়ম চালু করুন। ট্রেডিং ভলিউম ব্রেকআউট, এমএসিডি স্তম্ভের ফাঁক ইত্যাদির মতো কোয়ান্টামাইজেশন সূচক নিয়মগুলি সেট করুন যাতে ভুল বুলিং চ্যানেল ব্রেকআউট সিগন্যালগুলি এড়ানো যায়।
অপ্টিমাইজড স্টপ মেশিন বিভিন্ন ফিক্সড স্টপ পয়েন্ট সেটআপ এবং স্টপ ট্র্যাকিংয়ের বিভিন্ন পদ্ধতির মূল্যায়ন করে সর্বোত্তম স্টপ মডেল খুঁজে বের করুন
৬. রিয়েল-সিস্টেম যাচাইকরণঃ রিয়েল-সিস্টেমে অপ্টিমাইজড কৌশল চালানো, উপার্জন প্রত্যাহারের রেকর্ড করা, কৌশলটির স্থিতিশীল নির্ভরযোগ্যতা আরও উন্নত করা।
এই কৌশলটি সামগ্রিকভাবে সুস্পষ্ট, ব্রিন চ্যানেল ব্যবহার করে প্রবণতা দিক নির্ধারণ এবং বিরতি সংকেত ক্যাপচার, এবং একটি চলমান গড় লাইন দ্বারা সামগ্রিক প্রবণতা দিক নির্ধারণ। নির্দিষ্ট অপ্টিমাইজেশনের মাধ্যমে, এটি একটি স্থিতিশীল এবং নির্ভরযোগ্য প্রবণতা ট্র্যাকিং কৌশল হতে পারে। তবে এখনও সময় পরিসীমা প্রতিনিধিত্বের দিকে মনোযোগ দিতে হবে, পরিমাপের ফিল্টারিং নিয়ম এবং স্টপ লস স্তরের বোঝা। যদি এই সমস্যাগুলি ভালভাবে পরিচালনা করা যায়, তবে কৌশলটি বাস্তব যুদ্ধে স্থিতিশীল এবং দৃশ্যমান লাভ অর্জন করতে পারে।
/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Linear Regression (Backtest / Trailing Stop)",overlay=true)
close_price = close[0]
len = input(40)
linear_reg = linreg(close_price, len, 0)
calculationToPlotAverageMeanLine=linear_reg
useUpperDeviation = input(true, "Upper Deviation", bool)
useLowerDeviation = input(true, "Lower Deviation", bool)
ratio2=input(defval=2,title=" Ratio 2")
avg=atr(len)
r2=avg*ratio2
top=linear_reg+r2
bott=linear_reg-r2
calculationToPlotUpperLine=top
calculationToPlotLowerLine=bott
plotUpperDeviationLine = plot(not useUpperDeviation ? na : calculationToPlotUpperLine, color=color(blue,0))
plotAverageMeanLine = plot(calculationToPlotAverageMeanLine, color=color(olive,0))
plotLowererDeviationLine = plot(not useLowerDeviation ? na : calculationToPlotLowerLine, color=color(red,0))
fill(plotUpperDeviationLine, plotAverageMeanLine, color=color(blue,85))
fill(plotLowererDeviationLine, plotAverageMeanLine, color=color(red,85))
//
length = input(title="linear Length", defval=40, minval=1)
multiplier = input(title="linear Deviation", type=float, defval=2, minval=1)
overbought = input(title="Overbought", defval=1, minval=1)
oversold = input(title="Oversold", defval=0, minval=1)
custom_timeframe = input(title="Use another Timeframe?", type=bool, defval=false)
highTimeFrame = input(title="Select The Timeframe", defval="60")
res1 = custom_timeframe ? highTimeFrame : timeframe.period
fixedSL = input(title="SL Activation", defval=70)
trailSL = input(title="SL Trigger", defval=10)
fixedTP = input(title="TP Activation", defval=50)
trailTP = input(title="TP Trigger", defval=10)
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2019, title = "From Year", minval = 2015)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2015)
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
smabasis = linreg(close_price, length, 0)
stdev = stdev(close, length)
cierre = request.security(syminfo.tickerid, res1, close, false)
alta = request.security(syminfo.tickerid, res1, high, false)
baja = request.security(syminfo.tickerid, res1, low, false)
basis1 = request.security(syminfo.tickerid, res1, smabasis, false)
stdevb = request.security(syminfo.tickerid, res1, stdev, false)
dev = multiplier * stdevb // stdev(cierre, length)
upper = basis1 + dev
lower = basis1 - dev
bbr = (cierre - lower)/(upper - lower)
// plot(bbr)
// // MARCA LAS RESISTENCIAS
pintarojo = 0.0
pintarojo := nz(pintarojo[1])
pintarojo := bbr[1] > overbought and bbr < overbought ? alta[1] : nz(pintarojo[1])
p = plot(pintarojo, color = red, style=circles, linewidth=2)
// // MARCA LOS SOPORTES
pintaverde = 0.0
pintaverde := nz(pintaverde[1])
pintaverde := bbr[1] < oversold and bbr > oversold ? baja[1] : nz(pintaverde[1])
g = plot(pintaverde, color = black, style=circles, linewidth=2)
zz= crossover(pintaverde,pintaverde[1]) or crossunder(pintaverde,pintaverde[1])
kp= crossover(pintarojo,pintarojo[1]) or crossunder(pintarojo,pintarojo[1])
plotshape(zz, title="buy", style=shape.triangleup,location=location.belowbar, color=green, transp=0, size=size.small)
plotshape(kp, title="sell", style=shape.triangledown,location=location.abovebar, color=red, transp=0, size=size.small)
strategy.entry("BUY", strategy.long, qty=10, oca_name="BUY", when=zz and window())
strategy.exit("B.Exit", "BUY", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.entry("SELL", strategy.short, qty=10, oca_name="SELL", when=kp and window())
strategy.exit("S.Exit", "SELL", qty_percent = 100, loss=fixedSL, trail_offset=trailSL, trail_points=fixedTP)