এই কৌশলটি লিনিয়ার রিগ্রেশন চ্যানেলের উপরের এবং নীচের ব্যান্ডগুলি ব্যবহার করে, ডাবল স্ট্যান্ডার্ড ডিভিয়েশন সহ ব্রেকআউট কিনুন এবং বিক্রয় সংকেত সেট করতে, যখন দামগুলি ভেঙে যায় তখন অবস্থানগুলি স্থাপন করতে। এটি মুনাফা লক করার জন্য মুনাফা গ্রহণের সংকেত হিসাবে চ্যানেলের মাঝারি লাইনের ক্রসওভার ব্যবহার করে।
এই কৌশলটির মূল যুক্তিটি রৈখিক রিগ্রেশন চ্যানেলের উপরের ব্যান্ড, নীচের ব্যান্ড এবং মাঝারি লাইনের উপর ভিত্তি করে। নির্দিষ্ট গণনা প্রক্রিয়াটি নিম্নরূপঃ
মূল্যের লিনিয়ার রিগ্রেশন মান এবং পরবর্তী সময়ের লিনিয়ার রিগ্রেশন মান linreg_p গণনা করুন
লিনিয়ার রিগ্রেশন লাইনের ঢাল ঢাল এবং ছেদ ছেদ গণনা করুন
রিগ্রেশন লাইনের তুলনায় দামের বিচ্যুতির বিচ্যুতি গণনা করুন
উপরের এবং নীচের ব্যান্ড অফসেট পেতে বিচ্যুতির বহুগুণ dev সেট করুন
যখন দাম নীচের ব্যান্ড থেকে উপরে ভাঙ্গন, সেট কিনতে সংকেত কিনতে
যখন দাম উপরের ব্যান্ড থেকে নেমে আসে, সেট বিক্রয় সংকেত বিক্রয়
যখন মূল্য চ্যানেলের মাঝারি লাইন থেকে বিপরীত, সেট লাভ সিগন্যাল প্রস্থান
ক্রয়, বিক্রয় এবং প্রস্থান সংকেতের উপর ভিত্তি করে ট্রেডিং লজিক সেট আপ করুন
এই কৌশলটির সবচেয়ে বড় সুবিধা হল যে এটি রৈখিক রিগ্রেশন চ্যানেল দ্বারা প্রতিফলিত মাঝারি এবং দীর্ঘমেয়াদী প্রবণতা ব্যবহার করে। বিশেষ করেঃ
উপরের এবং নীচের ব্যান্ডগুলি কার্যকরভাবে দামের ওঠানামা স্বাভাবিক পরিসীমা প্রতিফলিত করতে পারে। ট্রেডিং সংকেত সেট করার জন্য তাদের ব্যবহার করা মিথ্যা সংকেতগুলি হ্রাস করতে পারে।
মুনাফা গ্রহণের সংকেত হিসাবে মধ্যম লাইন ক্রসওভার মুনাফা সর্বাধিক করতে পারে এবং মুনাফা করার পরে বিপরীতমুখী কারণে ক্ষতি এড়াতে পারে।
লিনিয়ার রিগ্রেশন চ্যানেলে কিছু বিলম্ব রয়েছে, যা কার্যকরভাবে স্বল্পমেয়াদী বাজার গোলমাল ফিল্টার করতে পারে এবং ট্রেডিং সংকেতগুলিকে আরও নির্ভরযোগ্য করে তুলতে পারে।
এই কৌশলটিতে কয়েকটি পরামিতি রয়েছে এবং এটি বাস্তবায়ন করা সহজ, অ্যালগরিদমিক ট্রেডিংয়ের জন্য উপযুক্ত।
এই কৌশলটির কিছু ঝুঁকি রয়েছেঃ
রৈখিক রিগ্রেশন চ্যানেলের বিলম্ব দ্রুত স্বল্পমেয়াদী পরিবর্তনের পরে প্রবণতা মিস করতে পারে। অনুকূল করার জন্য সময়কালটি সংক্ষিপ্ত করা যেতে পারে।
বিচ্যুতি গুণকের ভুল সেটিংও মিথ্যা সংকেত হতে পারে। প্যারামিটারগুলি ব্যাকটেস্টিংয়ের মাধ্যমে অনুকূলিত করা যেতে পারে।
শুধুমাত্র ব্রেকআউট সিগন্যালের উপর নির্ভর করা হুইপস হ্রাসের দিকে পরিচালিত করতে পারে। সিগন্যাল ফিল্টারিংয়ের জন্য অন্যান্য সূচক ব্যবহার করা যেতে পারে।
কার্ভ ফিটিংয়ের কিছু ঝুঁকি রয়েছে। অন্যান্য চ্যানেল সূচকগুলির সাথে একত্রিত করা বা বিভিন্ন ডেটা উত্স পরীক্ষা করা সহায়ক হতে পারে।
এই কৌশলটির জন্য মূল অপ্টিমাইজেশান দিকঃ
বিলম্ব এবং সংবেদনশীলতা ভারসাম্য বজায় রাখতে লিনিয়ার রিগ্রেশন চ্যানেলের দৈর্ঘ্য অনুকূল করুন।
ঝুঁকি নিয়ন্ত্রণকে সর্বাধিক করে তুলতে সিগন্যালের গুণমান উন্নত করতে বিচ্যুতি গুণককে অনুকূল করুন।
জয়ের হার উন্নত করতে সিগন্যাল ফিল্টারিংয়ের জন্য অন্যান্য সূচক যোগ করুন, যেমন EMA, KDJ ইত্যাদি।
স্টপ লস মেকানিজম যোগ করুন যেমন ATR ট্রেলিং স্টপ লস।
কৌশল উপর বিভিন্ন তথ্য উৎস প্রভাব পরীক্ষা করুন, যেমন সংশোধিত বন্ধ, সূচক তথ্য ইত্যাদি।
বাজারের অবস্থার উপর ভিত্তি করে গতিশীলভাবে পরামিতি বা সংকেত ওজন সামঞ্জস্য করুন।
সংক্ষেপে, এটি একটি ব্রেকআউট সিস্টেম যা সিগন্যাল সূচক হিসাবে রৈখিক রিগ্রেশন চ্যানেল ব্যবহার করে। কৌশল যুক্তি পরিষ্কার এবং সহজেই বোঝা যায়, কয়েকটি পরামিতি সহ, লাইভ ট্রেডিংকে তুলনামূলকভাবে বাস্তবায়ন করা সহজ করে তোলে। তবে, বাজারের পরিবর্তিত অবস্থার উপর ভিত্তি করে প্যারামিটারগুলিকে গতিশীলভাবে অপ্টিমাইজ করা এবং সংকেত ফিল্টারিংয়ের জন্য অন্যান্য সূচকগুলিকে একত্রিত করা কীভাবে এই কৌশলটির সাফল্যের মূল চাবিকাঠি। অবিচ্ছিন্ন পরীক্ষা এবং অপ্টিমাইজেশনের মাধ্যমে, এই কৌশলটি একটি স্থিতিশীল মুনাফা উত্পাদনকারী পরিমাণগত সিস্টেমে পরিণত হতে পারে।
/*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)