আপেক্ষিক ভলিউম মূল্য কৌশল একটি পরিমাণগত ট্রেডিং কৌশল যা অস্বাভাবিক ট্রেডিং ভলিউম এবং দামের অস্থিরতার উপর ভিত্তি করে। এই কৌশলটি বর্তমান ট্রেডিং ভলিউমকে ঐতিহাসিক গড়ের সাথে তুলনা করে নির্ধারণ করে যে ট্রেডিং ভলিউমটি অস্বাভাবিক কিনা। এটি মূল্য তুলনামূলকভাবে স্থিতিশীল কিনা তা নির্ধারণ করতে গড় সত্য পরিসীমা ব্যবধানকেও একত্রিত করে। যখন ট্রেডিং ভলিউম অস্বাভাবিকভাবে বৃদ্ধি পায় এবং দাম তুলনামূলকভাবে স্থিতিশীল হয়, তখন এটি একটি প্রবেশ সংকেত হিসাবে বিবেচিত হয়।
আপেক্ষিক ভলিউম মূল্য কৌশলটির মূল যুক্তি মূল্যায়নের জন্য দুটি সূচকের উপর ভিত্তি করেঃ আপেক্ষিক ট্রেডিং ভলিউম এবং দামের ওঠানামা পরিসীমা।
প্রথমত, আমরা সাম্প্রতিকতম 20 টি সময়ের মধ্যে ট্রেডিং ভলিউমের সাধারণ চলমান গড়কে ঐতিহাসিক গড় ট্রেডিং ভলিউম হিসাবে গণনা করি। তারপরে আমরা একটি একাধিক পরামিতি সেট করি (যেমন 1.5 বার) । যখন বর্তমান ট্রেডিং ভলিউম গড় ট্রেডিং ভলিউমের 1.5 গুণের বেশি হয়, তখন আমরা ট্রেডিং ভলিউমকে অস্বাভাবিক বলে মনে করি এবং একটি
দ্বিতীয়ত, আমরা সর্বশেষ 14 টি সময়ের মধ্যে গড় সত্য পরিসীমা (এটিআর) মূল্যের উদ্বায়ীতা পরিমাপ হিসাবে গণনা করি। একই সময়ে, আমরা গড় উদ্বায়ীতার স্ট্যান্ডার্ড বিচ্যুতি গণনা করি। যদি বর্তমান সত্য উদ্বায়ীতা গড় প্লাস বা বিয়োগ এক স্ট্যান্ডার্ড বিচ্যুতির মধ্যে থাকে তবে আমরা দামের উদ্বায়ীতাকে অপেক্ষাকৃত স্থিতিশীল পরিসরে বিবেচনা করি।
যখন উপরের দুটি শর্ত একই সময়ে পূরণ করা হয়, তখন একটি দীর্ঘ অবস্থান খোলার জন্য একটি দীর্ঘ সংকেত জারি করা হয়। ধরে রাখার সময়কালে, দ্বিগুণ ATR স্টপ লস স্তর হিসাবে ব্যবহৃত হয়, এবং সর্বোচ্চ মূল্য বিয়োগ দ্বিগুণ ATR লাভের স্তর হিসাবে ব্যবহৃত হয়।
আপেক্ষিক ভলিউম মূল্য কৌশলটির সবচেয়ে বড় সুবিধা হ'ল এটি অস্বাভাবিক ট্রেডিং ভলিউম দ্বারা সৃষ্ট মূল্য প্রবণতা ক্যাপচার করে। যখন ট্রেডিং ভলিউম বেড়ে যায়, তখন এটি বাজারের অংশগ্রহণকারীদের মনোভাবের পরিবর্তনকে উপস্থাপন করে, যা প্রায়শই দামের ব্রেকআউট এবং নতুন প্রবণতার গঠনের সংকেত দেয়। ট্রেডিং ভলিউম এবং ঐতিহাসিক গড়ের মধ্যে সম্পর্কের তুলনা করে কৌশলটি কার্যকরভাবে অস্বাভাবিক ট্রেডিং ভলিউমের সময় নির্ধারণ করতে পারে।
অন্যদিকে, কৌশলটি অস্থিরতার হারকেও বিবেচনা করে, যাতে তুলনামূলকভাবে স্থিতিশীল মূল্যের সময়কালে সংকেতগুলি ঘটে। এটি হিংসাত্মক ওঠানামা চলাকালীন উচ্চতার পিছনে যাওয়ার কারণে ক্ষতির বিশাল ঝুঁকি এড়ায়। এটি লাভের সুযোগও বাড়ায় কারণ প্রবণতা সাধারণত আপেক্ষিক স্থিতিশীলতার পরে ভেঙে যেতে শুরু করে।
এই কৌশলটির সবচেয়ে বড় ঝুঁকি হ'ল ট্রেডিং ভলিউম সূচকটি নতুন প্রবণতা সম্পর্কে 100% নিশ্চিত হতে পারে না। ট্রেডিং ভলিউমের উত্থানগুলি মিথ্যা ব্রেকআউট হতে পারে এবং দামগুলি দ্রুত বিপরীত হতে পারে। এই ক্ষেত্রে, কৌশলটি বৃহত্তর ক্ষতির সম্মুখীন হয়।
ক্ষতি হ্রাস করার জন্য,
কৌশলটি নিম্নলিখিত দিকগুলিতে অপ্টিমাইজ করা যেতে পারেঃ
ট্রেডিং ভলিউম অস্বাভাবিক সংকেতকে আরো নির্ভরযোগ্য করার জন্য বিচারের জন্য অন্যান্য সূচক যোগ করুন, যেমন পরিবর্তন অনুপাত, টার্নওভার ইত্যাদি।
স্থিতিশীল মূল্যের পরিসীমা আরও সঠিকভাবে নির্ধারণের জন্য বিভিন্ন স্টকগুলির জন্য এটিআর প্যারামিটারটি অনুকূলিত করা যেতে পারে।
মেশিন লার্নিং অ্যালগরিদম যোগ করুন অস্বাভাবিক ট্রেডিং ভলিউমকে সক্রিয়ভাবে বিচার করার জন্য, শুধু ঐতিহাসিক গড়ের সাথে সহজ তুলনা নয়।
শুধুমাত্র ঐতিহাসিক এটিআর-এর উপর ভিত্তি করে নয়, মূল্যের অস্থিরতা পূর্বাভাস দেওয়ার জন্য গভীর শেখার মডেল ব্যবহার করুন।
আপেক্ষিক ভলিউম মূল্য কৌশল একটি বৈশিষ্ট্যযুক্ত সংকেত হিসাবে অস্বাভাবিক ট্রেডিং ভলিউম ক্যাপচার করে এবং ট্রেডিং সংকেত ইস্যু করার জন্য মূল্য স্থিতিশীলতা রায়কে একত্রিত করে। কৌশলটি সহজ এবং ব্যবহারিক, এবং অস্বাভাবিক স্টক ট্রেডিং ভলিউম ট্র্যাকিংয়ে ভাল কাজ করে। তবে ভুল সংকেতগুলির একটি নির্দিষ্ট ঝুঁকিও রয়েছে যা কার্যকারিতা উন্নত করার জন্য সূচক রায় দ্বারা আরও অনুকূলিতকরণের প্রয়োজন।
/*backtest start: 2022-12-21 00:00:00 end: 2023-12-27 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/ // © DojiEmoji (kevinhhl) //@version=4 strategy("[KL] Relative Volume + ATR Strategy",overlay=true,pyramiding=1) ENUM_LONG = "Long" // Timeframe { backtest_timeframe_start = input(defval = timestamp("01 Apr 2016 13:30 +0000"), title = "Backtest Start Time", type = input.time) USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)") backtest_timeframe_end = input(defval = timestamp("01 May 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time) within_timeframe = true // } len_volat = input(14,title="Length of ATR to determine volatility") ATR_volat = atr(len_volat) avg_ATR_volat = sma(ATR_volat, len_volat) std_ATR_volat = stdev(ATR_volat, len_volat) // } // Trailing stop loss { ATR_X2_TSL = atr(input(14,title="Length of ATR for trailing stop loss")) * input(2.0,title="ATR Multiplier for trailing stop loss",type=input.float) TSL_source = low var stop_loss_price = float(0) TSL_line_color = color.green, TSL_transp = 100 if strategy.position_size == 0 or not within_timeframe TSL_line_color := color.black stop_loss_price := TSL_source - ATR_X2_TSL else if strategy.position_size > 0 stop_loss_price := max(stop_loss_price, TSL_source - ATR_X2_TSL) TSL_transp := 0 plot(stop_loss_price, color=color.new(TSL_line_color, TSL_transp)) // } // Signals for entry { _avg_vol = sma(volume,input(20, title="SMA(volume) length (for relative comparison)")) _relative_vol = _avg_vol * input(1.5,title="Multiple of avg vol to consider relative volume as being high",type=input.float) __lowerOfOpenClose = min(open,close) _wickRatio_lower = (__lowerOfOpenClose - low) / (high - low) entry_signal1 = volume > _relative_vol entry_signal2 = ATR_volat < avg_ATR_volat + std_ATR_volat and ATR_volat > avg_ATR_volat - std_ATR_volat // } alert_per_bar(msg)=> prefix = "[" + syminfo.root + "] " suffix = "(P=" + tostring(close) + "; atr=" + tostring(ATR_volat) + ")" alert(tostring(prefix) + tostring(msg) + tostring(suffix), alert.freq_once_per_bar) // MAIN: if within_timeframe if strategy.position_size > 0 and strategy.position_size[1] > 0 and (stop_loss_price/stop_loss_price[1]-1) > 0.005 alert_per_bar("TSL raised to " + tostring(stop_loss_price)) // EXIT :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: // placed before entry, will re-enter if stopped out exit_msg = close <= strategy.position_avg_price ? "stop loss" : "take profit" if strategy.position_size > 0 and TSL_source <= stop_loss_price strategy.close(ENUM_LONG, comment=exit_msg) // ENTRY ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: if entry_signal1 and entry_signal2// and entry_signal3 entry_msg = strategy.position_size > 0 ? "adding" : "initial" strategy.entry(ENUM_LONG, strategy.long, comment=entry_msg) // CLEAN UP: if strategy.position_size == 0 stop_loss_price := float(0)