
এই কৌশলটি একটি মাল্টি টাইম ফ্রেমের পরিমাণ-মূল্য সূচক ট্রেডিং কৌশল। এটি সম্ভাব্য ওভারসোল সংকেত সনাক্ত করার জন্য তুলনামূলকভাবে দুর্বল সূচক (আরএসআই), গড় বাস্তব তরঙ্গদৈর্ঘ্য (এটিআর), সরল চলমান গড় (এসএমএ) এবং কাস্টমাইজড পরিমাণের শর্তগুলিকে সমন্বিতভাবে ব্যবহার করে। নির্দিষ্ট ওভারসোল, পরিমাণ-মূল্য সূচক ক্রস, মূল্যের ব্রেকআউট ইত্যাদির মতো শর্তগুলি পূরণ করার সময় এই কৌশলটি একাধিক অবস্থান তৈরি করে। একই সাথে, এটি প্রতিটি ঝুঁকি-লাভের অনুপাতের জন্য স্টপ লস এবং স্টপ লেভেল নিয়ন্ত্রণ করে।
এই কৌশলটি মূলত নিম্নলিখিত মূল বিষয়গুলির উপর ভিত্তি করে তৈরি করা হয়েছেঃ
বিশেষত, এই কৌশলটি আরএসআই সূচকের জন্য দৈর্ঘ্য এবং ওভারসোল্ড লাইন প্যারামিটার সেট করে এবং এই প্যারামিটারগুলির উপর ভিত্তি করে আরএসআই মান গণনা করে। যখন আরএসআই সূচকটি একাধিক ক্রমাগত কে লাইন ওভারসোল্ড লাইনের নীচে থাকে, তখন একটি ওভারসোল্ড সংকেত তৈরি হয়।
উপরন্তু, এই কৌশলটি 3 টি লেনদেনের পরিমাণের হ্রাসকে সংজ্ঞায়িত করে, বিভিন্ন সময়কালের ডেটা অনুসারে একাধিক সেট পরিমাণের শর্ত নির্ধারণ করে। উদাহরণস্বরূপ, 90 টি সময়ের পরিমাণটি 49 টি সময়ের পরিমাণের চেয়ে 1.5 গুণ বেশি। যখন এই পরিমাণের শর্তগুলি একসাথে পূরণ হয়, তখন পরিমাণের সূচকের একাধিক সংকেত দেওয়া হয়।
দামের ক্ষেত্রে, কৌশলটি ১৩ টি চক্রের এসএমএ সূচক গণনা করে এবং এসএমএ অতিক্রম করার পর থেকে দামের K লাইন সংখ্যা গণনা করে। যখন দাম নীচে থেকে উপরে এসএমএ অতিক্রম করে এবং 5 টিরও কম K লাইন অতিক্রম করে, তখন এটি মূল্যের ব্রেকিং সিগন্যাল হিসাবে বিবেচিত হয়।
ATR চক্রের প্যারামিটারগুলির ক্ষেত্রে, এই কৌশলটি ছোট চক্র 5 এবং বড় চক্র 14 এর ATR নির্দিষ্ট করে। যখন ছোট চক্রের ATR বড় চক্রের ATR এর চেয়ে কম থাকে, তখন বাজার ওঠানামা ত্বরান্বিত হয় এবং এটি একটি সহায়ক সংকেত হিসাবে কাজ করে।
অবশেষে, এই কৌশলটি উপরের একাধিক ক্রয় শর্তগুলিকে বিবেচনা করে, যার মধ্যে রয়েছে ওভারসেল, পরিমাণের সূচক, মূল্যের ব্রেকডাউন এবং এটিআর সূচক। যখন এই শর্তগুলি একসাথে পূরণ করা হয়, তখন চূড়ান্ত বহু-সিগন্যাল তৈরি করা হয় এবং বহু-পদক্ষেপ স্থাপন করা হয়।
এই কৌশলটির বেশ কিছু সুবিধা রয়েছেঃ
মাল্টিটাইম ফ্রেম মূল্যের পরিমাপ পরিমাপ, নির্ভুলতা উন্নত করুন। কৌশলটি কেবলমাত্র একক পিরিয়ডের মূল্যের ডেটা বিবেচনা করে না, তবে বিভিন্ন পিরিয়ডের মূল্যের শর্তগুলির একাধিক গ্রুপের ক্রসগুলি মূল্যায়ন করে, যা পরিমাপের দক্ষতার ঘনত্বকে আরও নির্ভুলভাবে বিচার করতে পারে।
ওভারসেলিং + পরিমাণ + মূল্য ত্রিগুণ বিচার ব্যবস্থা, ক্রয় সংকেতের নির্ভরযোগ্যতা নিশ্চিত করে। ওভারসেলিং ক্রয় করার জন্য সবচেয়ে মৌলিক সময় নির্বাচন করে, অতিরিক্তভাবে, পরিমাণ এবং মূল্যের সূচকগুলি ক্রস করার সময় ক্রয়ের জন্য অতিরিক্ত নিশ্চিতকরণ এবং উচ্চতর নির্ভরযোগ্যতা যোগ করে।
স্টপ লস স্টপ মেকানিজম সেট করুন যাতে একক লেনদেনের ঝুঁকি কঠোরভাবে নিয়ন্ত্রণ করা যায়। স্টপ লস এবং স্টপ প্যারামিটারগুলি ব্যক্তিগত ঝুঁকির পছন্দ অনুসারে সামঞ্জস্য করা যায়, যাতে লাভের সর্বাধিকীকরণের সাথে সাথে প্রতিটি লেনদেনের ঝুঁকিও যুক্তিসঙ্গতভাবে নিয়ন্ত্রণ করা যায়।
মাল্টি-ইনডিকেটর ইন্টিগ্রেটেড বিচার আরও স্থিতিস্থাপকতা দেয়। এমনকি যদি কিছু সূচক ব্যর্থ বা ভুল হয় তবে অন্যান্য সূচক বিচারের উপর নির্ভর করে একটি নির্দিষ্ট ধারাবাহিক অপারেশন ক্ষমতা নিশ্চিত করা যায়।
এই কৌশলটির কিছু ঝুঁকিও রয়েছেঃ
প্যারামিটার কনফিগারেশন ঝুঁকি। বিভিন্ন ধরণের সূচকের প্যারামিটার সেটিং সরাসরি বিচার ফলাফলের উপর প্রভাব ফেলে, অযৌক্তিক প্যারামিটারগুলি ট্রেডিং সিগন্যালের বিচ্যুতি সৃষ্টি করতে পারে। প্যারামিটারগুলির যুক্তিসঙ্গত মানগুলি গুরুত্ব সহকারে যাচাই করা দরকার।
লাভের স্থান সীমিত। একাধিক সূচককে একত্রিত করার কৌশল হিসাবে, সংকেত উত্পাদনের ফ্রিকোয়েন্সি তুলনামূলকভাবে বেশি রক্ষণশীল, একক সময়ের মধ্যে কম সংখ্যক লেনদেন, লাভের জায়গার একটি নির্দিষ্ট সীমাবদ্ধতা রয়েছে।
সূচক ছড়িয়ে পড়ার ঝুঁকি। যখন কিছু সূচক একাধিক সংকেত দেয় এবং অন্যরা শূন্য সংকেত দেয়, তখন কৌশলটি সর্বোত্তম সিদ্ধান্ত নির্ধারণ করতে পারে না। এর জন্য সূচকগুলির মধ্যে সম্ভাব্য ছড়িয়ে পড়ার ঘটনাগুলি আগে থেকেই সনাক্ত করা এবং সমাধান করা প্রয়োজন।
এই কৌশলটি নিম্নলিখিত দিকগুলি থেকে আরও উন্নত করা যেতে পারেঃ
মেশিন লার্নিং মডেল সহায়ক বিচার যোগ করুন। আপনি ভলিউম মূল্য এবং তরঙ্গ বৈশিষ্ট্য মডেল প্রশিক্ষণ করতে পারেন, ম্যানুয়ালি সেট করা প্যারামিটারগুলিকে সহায়তা করুন, প্যারামিটারগুলির গতিশীলতা অর্জন করুন।
স্টপ স্টপ কৌশলটির পরিপক্কতা বাড়ান। যেমন, ফ্লোটিং স্টপ, ব্যাচ স্টপ, ট্র্যাকিং স্টপ ইত্যাদি সেট করা যেতে পারে, যা প্যাকেজিং এড়ানোর পাশাপাশি প্রতিটি উপার্জনকে আরও উন্নত করতে পারে।
খোলার ডেটা মূল্যায়ন করুন। কে-লাইন ভলিউম ডেটা ছাড়াও, গভীরতা কেনা বেচা খোলার ডেটা সহ পোজিশনের বন্টন নির্ধারণ করতে পারে, অতিরিক্ত রেফারেন্স সংকেত সরবরাহ করতে পারে।
অন্যান্য সূচকগুলির সমন্বয় পরীক্ষা করুন। এই কৌশলটি মূলত আরএসআই, এটিআর এবং এসএমএর মতো সূচকগুলিকে সমন্বয় করার জন্য ব্যবহার করে, তবে অন্যান্য সূচকগুলির সমন্বয় যেমন ব্রিন লাইন, কেডিজে এবং আরও অনেক কিছু প্রবর্তন, সমৃদ্ধ এবং অপ্টিমাইজ করার চেষ্টা করা যেতে পারে।
এই কৌশলটি RSI, ATR, SMA এবং কাস্টমাইজড মূল্যের শর্তের বিচার ব্যবহার করে সম্ভাব্য অতিরিক্ত সময় সনাক্তকরণের জন্য। এটি একই সাথে একাধিক টাইম ফ্রেম মূল্যের সূচক বিচার, ত্রি সিগন্যাল নিশ্চিতকরণ ব্যবস্থা এবং স্টপ লস স্টপ নিয়ন্ত্রণ ঝুঁকির মতো সুবিধা রয়েছে। অবশ্যই, প্যারামিটার কনফিগারেশন ঝুঁকি, লাভের জায়গার সীমাবদ্ধতা ইত্যাদির মতো বিষয়গুলিও লক্ষ্য করা দরকার। ভবিষ্যতে এই কৌশলটি মেশিন লার্নিং সহায়ক, স্টপ স্টপ কৌশল অনুকূলিতকরণ, ওয়ারেজ ডেটা প্রবর্তন এবং সূচক সংহতকরণ সম্প্রসারণ ইত্যাদির ক্ষেত্রে আরও অনুকূলিতকরণ করা যেতে পারে।
/*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