এই কৌশলটি একটি মাল্টি-টাইমফ্রেম ভলিউম মূল্য সূচক ট্রেডিং কৌশল। এটি সম্ভাব্য দীর্ঘ সংকেত সনাক্ত করতে আপেক্ষিক শক্তি সূচক (আরএসআই), গড় সত্য পরিসীমা (এটিআর), সহজ চলমান গড় (এসএমএ) এবং কাস্টম ভলিউম মূল্য শর্তগুলি ব্যাপকভাবে ব্যবহার করে। যখন নির্দিষ্ট ওভারসোল্ড, ভলিউম মূল্য ক্রসওভার, মূল্য ব্রেকআউট এবং অন্যান্য এন্ট্রি শর্তগুলি পূরণ করা হয়, তখন এই কৌশলটি দীর্ঘ অবস্থান স্থাপন করবে। এটি প্রতি বাণিজ্যের ঝুঁকি-পুরষ্কার অনুপাত নিয়ন্ত্রণ করতে স্টপ লস এবং লাভের স্তরগুলিও সেট করে।
এই কৌশলটির মূল বিষয়গুলি হল:
বিশেষত, এই কৌশলটি আরএসআই সূচকের জন্য দৈর্ঘ্য এবং ওভারসোল্ড পরামিতিগুলি সেট করে এবং এই পরামিতিগুলির উপর ভিত্তি করে আরএসআই মানগুলি গণনা করে। যখন আরএসআই একাধিক ধারাবাহিক বারগুলির জন্য ওভারসোল্ড স্তরের নীচে থাকে, তখন একটি ওভারসোল্ড সংকেত ট্রিগার হয়।
এছাড়াও, কৌশলটি 3 টি ভলিউম থ্রেশহোল্ড সংজ্ঞায়িত করে এবং বিভিন্ন সময়সীমার তথ্যের উপর ভিত্তি করে ভলিউম মূল্যের শর্তগুলির একাধিক সেট সেট করে। উদাহরণস্বরূপ, 90-কালীন সময়ের ভলিউম মান 49-কালীন সময়ের তুলনায় 1.5 গুণ বেশি। যখন এই সমস্ত ভলিউম মূল্যের শর্তগুলি একই সময়ে পূরণ করা হয়, তখন ভলিউম মূল্য সূচক একটি দীর্ঘ সংকেত তৈরি করে।
দামের দিক থেকে, কৌশলটি 13 পিরিয়ডের এসএমএ গণনা করে এবং যখন দাম এসএমএ এর উপরে ভেঙে যায় তখন বার সংখ্যা গণনা করে। যখন দাম এসএমএ এর উপরে ভেঙে যায় এবং ব্রেকআউটের পরে বার সংখ্যা 5 এর চেয়ে কম হয়, তখন এটি মূল্য ব্রেকআউট সংকেত হিসাবে বিবেচিত হয়।
ATR সময়ের পরামিতিগুলির জন্য, এই কৌশলটি ATR এর জন্য একটি ছোট সময়কাল 5 এবং একটি বড় সময়কাল 14 নির্দিষ্ট করে। যখন ছোট সময়কাল ATR বড় সময়কাল ATR এর চেয়ে কম হয়, এটি ইঙ্গিত দেয় যে বাজারের অস্থিরতা নিচে ত্বরান্বিত হচ্ছে এবং দীর্ঘ সংকেত অবদান রাখে।
অবশেষে, কৌশলটি ওভারসোল্ড, ভলিউম মূল্য, মূল্য ব্রেকআউট এবং ATR সূচক সহ উপরের সমস্ত প্রবেশের মানদণ্ড বিবেচনা করে। যখন এই সমস্ত শর্ত একই সাথে পূরণ করা হয়, তখন চূড়ান্ত দীর্ঘ সংকেতটি সক্রিয় হয় এবং একটি দীর্ঘ অবস্থান প্রতিষ্ঠিত হয়।
এই কৌশল নিম্নলিখিত সুবিধাগুলি আছেঃ
মাল্টি-টাইমফ্রেম ভলিউম মূল্য শর্ত বিচার নির্ভুলতা উন্নত করে। শুধুমাত্র একটি সময়সীমার পরিবর্তে বিভিন্ন সময়সীমার উপর ভলিউম মূল্য তথ্য একাধিক সেট মূল্যায়ন করে, কৌশল ট্রেডিং ভলিউম ঘনত্ব আরো সঠিকভাবে বিচার করতে পারেন।
ওভারসোল্ড + ভলিউম প্রাইস + প্রাইস ব্রেকআউটের ত্রিগুণ নিশ্চিতকরণ প্রক্রিয়া নির্ভরযোগ্য এন্ট্রি সিগন্যাল নিশ্চিত করে। ওভারসোল্ড শর্ত এন্ট্রিগুলির জন্য মৌলিক সময় সরবরাহ করে, যখন ভলিউম প্রাইস এবং মূল্য সূচক থেকে অতিরিক্ত নিশ্চিতকরণ দীর্ঘ সংকেতগুলির নির্ভরযোগ্যতা আরও নিশ্চিত করে।
স্টপ লস এবং লাভ নেওয়ার প্রক্রিয়াটি প্রতি ব্যবসায়ের ঝুঁকি কঠোরভাবে নিয়ন্ত্রণ করে। প্রতি ব্যবসায়ের ঝুঁকিকে যুক্তিসঙ্গতভাবে নিয়ন্ত্রণ করার সময় লাভকে সর্বাধিক করার জন্য ব্যক্তিগত ঝুঁকি ক্ষুধা ভিত্তিতে স্টপ লস এবং লাভের পরামিতিগুলি সামঞ্জস্য করা যেতে পারে।
একাধিক সূচককে একীভূত করা নির্ভরযোগ্যতা বৃদ্ধি করে। এমনকি যদি কিছু সূচক ব্যর্থ হয় বা ভুলভাবে কাজ করে, তবে কৌশলটি এখনও বিচার করার জন্য অন্যান্য সূচকগুলির উপর নির্ভর করতে পারে এবং একটি নির্দিষ্ট স্তরের স্থিতিস্থাপকতা নিশ্চিত করতে পারে।
এই কৌশলটির সাথে কিছু ঝুঁকিও রয়েছেঃ
প্যারামিটার কনফিগারেশন ঝুঁকি। সূচকগুলির প্যারামিটার সেটিংস সরাসরি বিচারকে প্রভাবিত করে এবং অনুপযুক্ত প্যারামিটারগুলি ট্রেডিং সংকেতগুলিতে পক্ষপাতের দিকে পরিচালিত করতে পারে। যুক্তিসঙ্গত প্যারামিটার মানগুলি সাবধানে যাচাই করা দরকার।
সীমিত মুনাফা সম্ভাব্যতাঃ সমষ্টিগত বিচার করার জন্য একাধিক সূচককে একীভূত করার কৌশল হিসাবে, এর সংকেতগুলি প্রতি ইউনিট সময়ের তুলনামূলকভাবে কম ব্যবসায়ের সাথে আরও সংরক্ষণশীল হওয়ার প্রবণতা রয়েছে, সুতরাং মুনাফা সম্ভাব্যতার কিছু সীমাবদ্ধতা রয়েছে।
সূচক বিভক্তি ঝুঁকি। যখন কিছু সূচক দীর্ঘ সংকেত দেয় এবং অন্যরা সংক্ষিপ্ত সংকেত দেয়, তখন কৌশলটি সর্বোত্তম সিদ্ধান্ত নির্ধারণ করতে পারে না। সূচকগুলির মধ্যে এই ধরনের সম্ভাব্য বিভক্তি সনাক্ত করা এবং পূর্বে সমাধান করা প্রয়োজন।
এই কৌশল নিম্নলিখিত দিকগুলির মধ্যে আরও অপ্টিমাইজ করা যেতে পারেঃ
মেশিন লার্নিং মডেল অন্তর্ভুক্ত করুন যা বিচারকে সহায়তা করে। মডেলগুলিকে ম্যানুয়ালি সংজ্ঞায়িত পরামিতিগুলিকে গতিশীলভাবে সামঞ্জস্য করতে ভলিউম মূল্য এবং অস্থিরতার বৈশিষ্ট্যগুলিতে প্রশিক্ষণ দেওয়া যেতে পারে।
ট্রেড প্রতি মুনাফা আরও বাড়ানোর জন্য মুনাফা নেওয়ার কৌশলগুলি যেমন ট্রেলিং স্টপ মুনাফা নেওয়ার, আংশিক মুনাফা নেওয়ার ইত্যাদি উন্নত করুন।
অর্ডার বুক ডেটা অন্তর্ভুক্ত করে মূল্যায়ন করুন। মূল্য এবং ভলিউম চার্ট ডেটা ছাড়াও, অর্ডার বুক ডেটা অতিরিক্ত রেফারেন্স সংকেত প্রদানের জন্য গভীরতা তরলতা বিতরণ তথ্য প্রকাশ করে।
অন্যান্য সূচকগুলির সাথে পরীক্ষার সংমিশ্রণ। এই কৌশলটি মূলত আরএসআই, এটিআর এবং এসএমএ এর মতো সূচকগুলি ব্যবহার করে। ট্রেডিং সংকেতগুলির উত্সগুলিকে বৈচিত্র্যময় এবং অনুকূল করতে বোলিংজার ব্যান্ড এবং কেডিজে এর মতো অন্যান্য সূচকগুলিও একত্রিত করা যেতে পারে।
এই কৌশলটি সম্ভাব্য দীর্ঘ প্রবেশের সুযোগগুলি সনাক্ত করতে আরএসআই, এটিআর, এসএমএ এবং কাস্টম ভলিউম মূল্যের শর্তগুলি সহ সূচকগুলির সংমিশ্রণ ব্যবহার করে। এটিতে মাল্টি-টাইমফ্রেম ভলিউম মূল্য মূল্যায়ন, ট্রিপল নিশ্চিতকরণ প্রক্রিয়া এবং স্টপ লস / লাভের ঝুঁকি নিয়ন্ত্রণের মতো সুবিধাগুলি রয়েছে। তবুও, প্যারামিটার কনফিগারেশন, সীমাবদ্ধ মুনাফা সম্ভাবনার মতো ঝুঁকিগুলিও লক্ষ করা দরকার। ভবিষ্যতে, এই কৌশলটি মেশিন লার্নিং অগমেন্টেশন, আরও পরিশীলিত লাভের নকশা, অর্ডার বুকের ডেটা অন্তর্ভুক্ত করার পাশাপাশি বর্ধিত সূচক সংমিশ্রণের মাধ্যমে আরও উন্নত করা যেতে পারে।
/*backtest start: 2023-10-24 00:00:00 end: 2023-11-23 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // © Kimply_Tr //@version=5 // Strategy settings and parameters strategy(title='Volume ValueWhen Velocity', overlay=true) // Define the stop-loss and take-profit percentages for the long strategy long_stoploss_value = input.float(defval=3, title='Stop-Loss (SL) %', minval=0, group='▶ Stop Loss/Take Profit => Long-Strategy', inline='2') long_stoploss_percentage = close * (long_stoploss_value / 100) / syminfo.mintick // Calculate long stop-loss percentage long_takeprofit_value = input.float(defval=2, title='Take-Profit (TP) %', minval=0, group='▶ Stop Loss/Take Profit => Long-Strategy', inline='2') long_takeprofit_percentage = close * (long_takeprofit_value / 100) / syminfo.mintick // Calculate long take-profit percentage // Define parameters related to ValueWhen occurrences occurrence_ValueWhen_1 = input.int(title='occurrence_ValueWhen_1', defval=1, maxval=100, step=1, group="▶ ValueWhen",tooltip ="Its value must be smaller than (occurrence_ValueWhen_2)") occurrence_ValueWhen_2 = input.int(title='occurrence_ValueWhen_2', defval=5, maxval=100, step=1, group="▶ ValueWhen" ,tooltip="Its value must be greater than (occurrence_ValueWhen_1)") distance_value=input.int(title='distance_value_occurrence', defval=170, maxval=5000, step=1, group="▶ ValueWhen" ,tooltip="It indicates the minimum distance between the occurrences of 1 and 2, i.e. the difference between the occurrences of 1 and 2 is greater than (distance_value_occurrence)") // Define RSI-related parameters rsi_over_sold = input.int(defval=60, minval=1, title='Oversold Level', group='▶ RSI',inline ='2') // Input for oversold level in RSI rsi_length = input.int(defval=40, minval=1, title='RSI Length', group='▶ RSI',inline ='2') // Input for RSI length rsi = ta.rsi(close, rsi_length) // Calculate RSI // Define volume thresholds volume_threshold1 = input.float(title='volume_threshold_1', defval=0.5, maxval=10, step=0.1, group="▶ Volume") volume_threshold2 = input.float(title='volume_threshold_2', defval=0.4, maxval=10, step=0.1, group="▶ Volume") volume_threshold3 = input.float(title='volume_threshold_3', defval=0.62, maxval=10, step=0.1, group="▶ Volume") // ATR (Average True Range) // Define ATR parameters atr_small = input.int(title='ATR_Small', defval=5, maxval=500, step=1, group="▶ Atr",inline ='2') atr_big = input.int(title='ATR_Big ', defval=14, maxval=500, step=1, group="▶ Atr",inline ='2') atr_value3 = ta.atr(15) // Calculate ATR value 3 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Date Range // Define the date range for back-testing start_date = input.int(title='Start Day', defval=1, minval=1, maxval=31, group='▶ Time-Period for Back-Testing', inline='1') // Input for start day end_date = input.int(title='until Day', defval=1, minval=1, maxval=31, group='▶ Time-Period for Back-Testing', inline='1') // Input for end day start_month = input.int(title='Start Month', defval=7, minval=1, maxval=12, group='▶ Time-Period for Back-Testing', inline='2') // Input for start month end_month = input.int(title='until Month', defval=1, minval=1, maxval=12, group='▶ Time-Period for Back-Testing', inline='2') // Input for end month start_year = input.int(title='Start Year', defval=2022, minval=1800, maxval=3000, group='▶ Time-Period for Back-Testing', inline='3') // Input for start year end_year = input.int(title='until Year', defval=2077, minval=1800, maxval=3000, group='▶ Time-Period for Back-Testing', inline='3') // Input for end year in_date_range = time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0) and time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0) // Check if the current time is within the specified date range //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// was_over_sold = ta.barssince(rsi <= rsi_over_sold) <= 10 // Check if RSI was oversold in the last 10 bars //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// getVolume(symbol, bar) => request.security(syminfo.tickerid, "D", volume)[bar] // Function to get volume data for a specific symbol and bar getVolume2(symbol, bar) => request.security(syminfo.tickerid, "39", volume)[bar] // Function to get volume data for a specific symbol and bar 2 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// firstCandleColor1 = request.security(syminfo.tickerid, "D", close[2] > open[1] ? 1 : 0) firstCandleColor2 = request.security(syminfo.tickerid, "1", close[2] > open[0] ? 1 : 0) firstCandleColor3 = request.security(syminfo.tickerid, "W", close[1] > open[1] ? 1 : 0) firstCandleColor= ((firstCandleColor1+firstCandleColor2)) > firstCandleColor3 ? 1 : 0 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// sma = ta.sma(close, 13) // Calculate the simple moving average (SMA) of the close price over 13 periods numCandles = ta.barssince(close > sma) // Count the number of candles since the close price crossed above the SMA atr1=request.security(syminfo.tickerid, "30", ta.atr(atr_small)<ta.atr(atr_big)) // Get the ATR value for the specific security and timeframe (30 minutes) and check if ATR_small is less than ATR_big prevClose = ta.valuewhen(close > sma, close, occurrence_ValueWhen_1) // Get the close price when it first crosses above the SMA based on occurrence_ValueWhen_1 prevCloseBarsAgo = ta.valuewhen(close > sma, close, occurrence_ValueWhen_2) // Get the close price when it first crosses above the SMA based on occurrence_ValueWhen_2 prevCloseChange = (prevCloseBarsAgo - prevClose ) // Calculate the change in the close price between the occurrences of crossing above the SMA atrval=(atr_value3>140) or (atr_value3 < 123) // Check if atr_value3 is either greater than 140 or less than 123 Condition = getVolume(syminfo.tickerid, 90) > volume_threshold1 * getVolume(syminfo.tickerid, 49) and getVolume(syminfo.tickerid, 110) > volume_threshold3 * getVolume(syminfo.tickerid, 49) and getVolume2(syminfo.tickerid, 30) > volume_threshold2 * getVolume2(syminfo.tickerid, 55) and getVolume2(syminfo.tickerid, 7) > volume_threshold2 * getVolume2(syminfo.tickerid, 3) // Check multiple volume conditions buy_signal=Condition and atrval and firstCandleColor==0 and was_over_sold and prevCloseChange> distance_value and atr1 and numCandles<5 // Determine if the buy signal is generated based on various conditions //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // Long Strategy // Enter long position if the buy signal conditions are met and within the specified date range if buy_signal and in_date_range strategy.entry('Long', strategy.long, alert_message='Open Long Position') // Enter long position strategy.exit('Long SL/TP', from_entry='Long', loss=long_stoploss_percentage, profit=long_takeprofit_percentage, alert_message='Your SL/TP-Limit for the Long-Strategy has been activated.') // Exit long position with stop-loss and take-profit