
এই কৌশলটির মূল ধারণা হল বিভিন্ন পিরিয়ডের Ratio OCHL Averager সূচক ব্যবহার করে একাধিক গড় লাইন তৈরি করা, গড় লাইনের ক্রস-আকারের উপর ভিত্তি করে একটি ক্রয়-বিক্রয় সংকেত তৈরি করা। এটি গতিশীলভাবে মূল্য প্রবণতা ক্যাপচার করতে সক্ষম, যা মাঝারি-মেয়াদী ব্যবসায়ের জন্য উপযুক্ত।
এই কৌশলটি দুটি ভিন্ন সময়ের Ratio OCHL Averager সূচক ব্যবহার করে, যথাক্রমে দ্রুত এবং ধীর লাইন হিসাবে। Ratio OCHL Averager সূচকের গণনা সূত্রটি নিম্নরূপঃ
b = abs(close-open)/(high - low)
c = min(max(b, 0), 1)
Ratio OCHL Averager = c*close + (1-c)*前一日Ratio OCHL Averager
যেখানে b হল সেই দিনের দামের অস্থিরতার অনুপাত এবং c হল b এর মানসম্মত প্রক্রিয়াকরণের পরে মান। Ratio OCHL Averager সূচকটি চারটি মূল্যের সমন্বয় করে, যার মধ্যে রয়েছে খোলার মূল্য, বন্ধের মূল্য, সর্বোচ্চ মূল্য এবং সর্বনিম্ন মূল্য।
এই কৌশলটি একটি সংক্ষিপ্ত এবং একটি দীর্ঘ সময়কালের জন্য একটি সংক্ষিপ্ত লাইন সেট করে। এটি একটি ক্রয় সংকেত উত্পন্ন করে যখন একটি দ্রুত লাইন একটি ধীর লাইন অতিক্রম করে, এবং বিপরীতভাবে যখন একটি দ্রুত লাইন একটি ধীর লাইন অতিক্রম করে যখন একটি বিক্রয় সংকেত উত্পন্ন করে। এটি সমান্তরাল ক্রস নীতি ব্যবহার করে ট্রেন্ড ক্যাপচার করে।
Ratio OCHL Averager সূচকটি মূল্যের তথ্যকে মসৃণ করতে পারে, কার্যকরভাবে বাজার শব্দকে ফিল্টার করে, যাতে ট্রেডিং সংকেত আরও নির্ভরযোগ্য হয়।
ডাবল ইক্যুয়ালাইন ক্রস বিভিন্ন পিরিয়ডের সাথে মিলিত হয়ে ট্রেন্ডের দিক নির্ধারণ করে, নতুন ট্রেন্ডের সূচনা আরও ভালভাবে নির্ধারণ করতে পারে।
ফাস্ট লাইন এবং লো লিনের পিরিয়ড প্যারামিটারগুলিকে সামঞ্জস্য করে বিভিন্ন বাজার পরিবেশের সাথে খাপ খাইয়ে নেওয়া যায়।
এই কৌশলটি সহজ, স্বজ্ঞাত এবং সহজেই বোঝা যায়।
আপনি নমনীয়ভাবে স্টপ লস স্টপ মান নির্ধারণ করতে পারেন এবং ঝুঁকি নিয়ন্ত্রণ করতে পারেন।
সমান্তরাল ক্রসিং কৌশলটি আরও ভুয়া সংকেত তৈরি করতে পারে এবং অন্যান্য প্রযুক্তিগত সূচকগুলির সাথে মিলিত ফিল্টারিংয়ের প্রয়োজন।
ফাস্ট লাইন এবং লো লিনের সময়কালের প্যারামিটারগুলি যুক্তিসঙ্গতভাবে বেছে নেওয়া দরকার, প্যারামিটারগুলির ভুল নির্বাচন কৌশলটির কার্যকারিতা প্রভাবিত করতে পারে।
ডাবল ইক্যুইলিয়ার ক্রস কৌশলটি প্রবণতা অনুসরণকারী কৌশলগুলির মধ্যে একটি, এটি ঝড়ের পরিস্থিতির জন্য উপযুক্ত নয়, এটি প্রবণতার পরিস্থিতিতে ব্যবহার করা উচিত।
ক্ষতির ঝুঁকি হ্রাস করার জন্য স্টপপয়েন্টগুলি যথাযথভাবে সামঞ্জস্য করা দরকার এবং স্টপপয়েন্টগুলি যুক্তিসঙ্গতভাবে সেট করা উচিত।
সিগন্যাল ফিল্টারিং এর জন্য গতিশীলতা সূচক ইত্যাদি ব্যবহার করা যেতে পারে। যেমন MACD, KDJ ইত্যাদি।
বিভিন্ন ফাস্টলাইন এবং স্লো লাইন পিরিয়ড প্যারামিটার সমন্বয় পরীক্ষা করে সর্বোত্তম প্যারামিটার খুঁজে বের করা যায়।
স্টপ লস স্টপ পয়েন্টটি পুনরুদ্ধারের ফলাফলের উপর ভিত্তি করে অপ্টিমাইজ করা যেতে পারে এবং সর্বোত্তম সেটিংটি খুঁজে পাওয়া যেতে পারে।
নির্দিষ্ট বাজারের পরিস্থিতিতে গতিশীল সমন্বয় পরামিতি বিবেচনা করা যেতে পারে, যেমন বড় প্যাকেজ কম্পনের সময় বৃহত আবর্তক পরামিতি।
এই কৌশলটির সামগ্রিক ধারণাটি পরিষ্কার এবং সহজেই বোঝা যায়, ধীরে ধীরে এবং গড়ের ক্রস দ্বারা প্রবণতার দিক নির্ধারণ করে, এটি একটি গতিশীল ট্র্যাকিং কৌশল যা মাঝারি এবং স্বল্পমেয়াদী ব্যবসায়ের জন্য উপযুক্ত। অপ্টিমাইজেশনের জায়গা এখনও অনেক বড়, প্যারামিটার সামঞ্জস্য, সংকেত ফিল্টারিং ইত্যাদির মাধ্যমে কৌশলটির কার্যকারিতা আরও উন্নত করা যায়। সামগ্রিকভাবে, এটি একটি নমনীয় এবং ব্যবহারিক প্রবণতা ট্রেডিং কৌশল।
/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="[XC] Adaptive Strategy V3 - Ratio OCHL Averager no repaint",shorttitle="R_OHCL", overlay=true, currency=currency.EUR,initial_capital=10000,
default_qty_value=100, default_qty_type=strategy.percent_of_equity , calc_on_every_tick=false, calc_on_order_fills=true)
// ╔═ SETTINGS ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░
strategy_1 = input ( defval=true , type=input.bool , title="STRATEGY 1? —>" )
Recursive = input(false)
RES201 = "Min",RES202= "D",RES203 = "W",RES204 = "M"
//++ Resolution 1 ++
inp_resolution1 = input(600, minval=1, title="Resolution Line 1")
restype1 = input ( defval="Min" , type=input.string , title= "Resolution Line 1" , options=[ "Min","D","W","M"])
multiplier1 = restype1 == "Min" ? "" : restype1 == "D" ? "D" : restype1 == "W" ? "W" : "M"
resolution1 = tostring(inp_resolution1)+ multiplier1
//++ Resolution 2 ++
inp_resolution2 = input(1440, minval=1, title="Resolution Line 2")
restype2 = input ( defval="Min" , type=input.string , title= "Resolution Line 2" , options=["Min","D","W","M"])
multiplier2 = restype2 == "Min" ? "" : restype2 == "D" ? "D" : restype2 == "W" ? "W" : "M"
resolution2 = tostring(inp_resolution2)+ multiplier2
StopLoss = input(defval = 500 , title = "Stop Loss", minval = 0)
TakeProfit = input(defval = 2500 , title = "Take Profit", minval = 0)
// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit = TakeProfit >= 1 ? TakeProfit : na
useStopLoss = StopLoss >= 1 ? StopLoss : na
// ╔═ BACKTEST RANGE ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░
line_breakBTR = input ( defval = true , type=input.bool , title="BACKTEST RANGE —" )
FromYear = input ( defval = 2019, title = "From Year", minval = 2017)
FromMonth = input ( defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input ( defval = 2, title = "From Day", minval = 1, maxval = 31)
//FromHour = input ( defval = 1, title = "From Hour", minval = 1, maxval = 24)
ToYear = input ( defval = 9999, title = "To Year", minval = 2017)
//ToHour = input ( defval = 0, title = "From Hour", minval = 0, maxval = 24)
ToMonth = input ( defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input ( defval = 1, title = "To Day", minval = 1, maxval = 31)
// === FUNCTION EXAMPLE ===
start = timestamp(syminfo.timezone, FromYear, FromMonth, FromDay, 0, 00) // backtest start window
finish = timestamp(syminfo.timezone, ToYear , ToMonth , ToDay , 0, 59) // backtest finish window
window() => time >= start and time <= finish ? true : false // create function "within window of time"
// ╔═ INDICATOR ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░
// "Ratio OCHL Averager" -> alexgrover / tradingview.com/script/RGAtOI6h-Ratio-OCHL-Averager-An-Alternative-to-VWAP/
rochla( res,Recursive)=>
//Recursive = false
H = security(syminfo.tickerid,res,high[1],gaps = barmerge.gaps_off, lookahead = barmerge.lookahead_on)
L = security(syminfo.tickerid,res,low[1] ,gaps = barmerge.gaps_off, lookahead = barmerge.lookahead_on)
d = 0.
//----
a = Recursive ? nz(d[1],open) : open
b = abs(close-a)/(H - L)
c = b > 1 ? 1 : b
d := c*close+(1-c)*nz(d[1],close)
strat1_line1=rochla(resolution1,Recursive)
strat1_line2=rochla(resolution2,Recursive)
plot(strat1_line1, title="Ratio OCHL Averager 1", color=#DAA520,linewidth=2,transp=0)
plot(strat1_line2, title="Ratio OCHL Averager 2", color=#B22222,linewidth=2,transp=0)
// ╔═ STRATEGY 1 ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░
trading_strat1_line1 = strategy_1 == 1 ? strat1_line1 : na
trading_strat1_line2 = strategy_1 == 1 ? strat1_line2 : na
longCross = crossunder (trading_strat1_line2, trading_strat1_line1) ? true : false
shortCross = crossover (trading_strat1_line2, trading_strat1_line1) ? true : false
plot( longCross ? trading_strat1_line1 : na , title = "Long" , color=color.aqua, style=plot.style_circles, linewidth=5, offset= 0)
plot( shortCross ? trading_strat1_line2 : na , title = "Short" , color=color.red , style=plot.style_circles, linewidth=5, offset= 0)
// ╔═ Backtest 1 ╗
//░░░░░░░░░░░░░░░░░ ╚════════════════════════════╝ ░░░░░░░░░░░░░░░░░░░░░░░░
strategy.exit("close",loss = useStopLoss, profit = useTakeProfit)
if longCross and window() and strategy_1 == 1
strategy.entry("Go Long", strategy.long)
if shortCross and window() and strategy_1 == 1
strategy.entry("Go Short", strategy.short)
//end