
অভ্যন্তরীণ মূল্যের শক্তি ট্রেন্ড বিপরীত ট্রেডিং সিস্টেম একটি অভ্যন্তরীণ মূল্যের শক্তি (আইবিএস) সূচকের উপর ভিত্তি করে একটি সূচক-স্তরের ট্রেডিং কৌশল। এই কৌশলটির মূলটি হ’ল সম্ভাব্য বাজার বিপরীত চিহ্নিত করা এবং পূর্ববর্তী স্ট্রিংয়ের সমাপ্তির দামের উচ্চ-নিম্নের মধ্যে আপেক্ষিক অবস্থান পর্যবেক্ষণ করে বাজারের ওভারবয় ওভারসেলের অবস্থা বিচার করা। এই কৌশলটি বিশেষত স্টক এবং ইউএসএ সূচক ব্যবসায়ের জন্য উপযুক্ত, ডিফল্ট প্যারামিটারগুলি এসপিওয়াই / এসপিএক্স এবং এনডিকিউ / কিউকিউ ইত্যাদির মতো প্রধান সূচকগুলির জন্য অনুকূলিত করা হয়েছে। ইন্ডেক্সের চলমান গড় ইএমএ (ইএমএ) সংযুক্ত করে একটি প্রবণতা ফিল্টার হিসাবে, কৌশলটি দীর্ঘমেয়াদী প্রবণতাগুলি অনুসরণ করার পাশাপাশি স্বল্পমেয়া দামের অস্থিরতার সাথে ব্যবসায়ের সুযোগগুলিকে ক্যাপচার করতে সক্ষম।
এই কৌশলটির কেন্দ্রবিন্দু হল অভ্যন্তরীণ মূল্যের শক্তি (IBS) সূচকের গণনা এবং প্রয়োগ। IBS সূচকটি নিম্নলিখিত সূত্রের মাধ্যমে গণনা করা হয়ঃ
IBS = (前一日收盘价 - 前一日最低价) / (前一日最高价 - 前一日最低价)
আইবিএস মান সবসময় ০ থেকে ১ এর মধ্যে থাকেঃ
এই কৌশলটির ট্রেডিং নিয়মগুলি হলঃ
একসাথে একাধিক প্রবেশের শর্তঃ
তিনি আরও বলেন,
এছাড়াও, কৌশলটি “সর্বনিম্ন নতুন প্রবেশের দূরত্বের শতাংশ” প্যারামিটার প্রবর্তন করেছে, যাতে নিশ্চিত করা যায় যে নতুন পজিশনগুলি কেবলমাত্র যখন দামের প্রত্যাহারের পর্যাপ্ত পরিমাণে খোলা হয়, কার্যকরভাবে প্রত্যাহারের ঝুঁকি হ্রাস করে এবং তহবিল পরিচালনাকে অনুকূল করে তোলে।
বাজার সময় সঠিকভাবে ধরাঃ আইবিএস সূচকটি বাজারের ওভার-বিক্রয় ও ওভার-বিক্রয় অবস্থাটি সঠিকভাবে ক্যাপচার করতে পারে, প্রবেশ এবং প্রস্থানগুলির জন্য একটি উদ্দেশ্যমূলক গাণিতিক ভিত্তি সরবরাহ করে, যা বিষয়গত বিচারের দ্বারা সৃষ্ট বিচ্যুতি হ্রাস করে।
প্রবণতা ফিল্টারিং ব্যবস্থাঃ ট্রেডিংয়ের দিকটি মূল প্রবণতার সাথে সামঞ্জস্যপূর্ণ তা নিশ্চিত করার জন্য ট্রেডিংয়ের ইএমএকে প্রবণতা ফিল্টার হিসাবে ব্যবহার করে, বিপরীতমুখী ব্যবসায়ের ঝুঁকি কার্যকরভাবে এড়ানো যায়। কৌশলটি বিভিন্ন বাজারের বৈশিষ্ট্য অনুসারে ইএমএ চক্রকে সামঞ্জস্য করতে পারে বা এই শর্তটি সম্পূর্ণরূপে অক্ষম করতে পারে।
নমনীয় পজিশন ম্যানেজমেন্টঃ কৌশলটি পিরামিডের মতো পজিশনিংকে সমর্থন করে (সর্বোচ্চ 2 বার) এবং “সর্বনিম্ন নতুন প্রবেশের দূরত্বের শতাংশ” প্যারামিটারটি প্রবর্তন করে, আরও বুদ্ধিমান ব্যাচ তৈরির পজিশনিং প্রক্রিয়া বাস্তবায়ন করে, যা দামের প্রত্যাহারের সময় গড় পজিশনিং খরচ কার্যকরভাবে হ্রাস করতে পারে।
স্বয়ংক্রিয় ঝুঁকি নিয়ন্ত্রণঃ কৌশলটি সর্বাধিক পজিশন হোল্ডিংয়ের সময়সীমা সেট করে, এমনকি যদি বাজারটি প্রচলিত প্রস্থান সংকেতটি ট্রিগার না করে, তবে সেট করা সর্বাধিক ট্রেডিং চক্রের পরে স্বয়ংক্রিয়ভাবে পজিশনটি সরিয়ে ফেলা হয়, কার্যকরভাবে একক লেনদেনের ঝুঁকি প্রকাশের সময়কে নিয়ন্ত্রণ করে।
প্যারামিটার অপ্টিমাইজেশনঃ ডিফল্ট প্যারামিটারগুলি SPY এবং QQQ/NDQ এর মতো প্রধান বাজার সূচকগুলির জন্য অপ্টিমাইজ করা হয়েছে, ব্যবহারকারীরা সরাসরি প্রস্তাবিত সেটিংস প্রয়োগ করতে পারেনঃ
সর্বস্তরের ট্রেডিং মোডঃ শুধুমাত্র ওভার, শুধুমাত্র বিয়ার বা দ্বি-মুখী ট্রেডিং মোড সমর্থন করে, যা বিভিন্ন বাজার পরিবেশ এবং ট্রেডিং স্টাইলের সাথে সামঞ্জস্যপূর্ণ।
প্যারামিটার সংবেদনশীলতাঃ আইবিএস ইনপুট এবং আউটপুট থ্রেশহোল্ডগুলি কৌশলগত পারফরম্যান্সের উপর ব্যাপক প্রভাব ফেলে, প্যারামিটারগুলির ভুল সেটগুলি অত্যধিক লেনদেন বা গুরুত্বপূর্ণ লেনদেনের সুযোগগুলি মিস করতে পারে। রিয়েল-টাইম প্রয়োগের আগে নির্দিষ্ট লেনদেনের জাতের জন্য পর্যাপ্ত ইতিহাসের ডেটা পুনরুদ্ধার এবং প্যারামিটার অপ্টিমাইজেশন করার পরামর্শ দেওয়া হয়।
ঝড়ের বাজার ঝুঁকিঃ কোন স্পষ্ট প্রবণতা ছাড়াই ঝড়ের বাজারগুলিতে, আইবিএস সংকেতগুলি ঘন ঘন দেখা দিতে পারে, যার ফলে অত্যধিক লেনদেন এবং অপ্রয়োজনীয় লেনদেনের ব্যয় বৃদ্ধি পায়। সমাধানটি হ’ল ফিল্টারিং শর্তগুলি যুক্ত করা, যেমন একাধিক ধারাবাহিক আইবিএস সংকেত নিশ্চিতকরণ বা অন্যান্য সূচকগুলির সাথে মিলিত হওয়া (যেমন এটিআর) বাজারের অস্থিরতার বিচার করা।
তীব্র প্রবণতা পরিবর্তনের বিলম্বিততাঃ যখন বাজারে দ্রুত প্রবণতা পরিবর্তিত হয়, তখন আইবিএস সূচকগুলি আগের দিনের ডেটা ভিত্তিতে গণনা করা যেতে পারে, যার ফলে প্রবেশ বা প্রস্থান করার সময়টি অনুকূল নয়। উচ্চ অস্থিরতার সময়কালে আইবিএস থ্রেশহোল্ডের যথাযথ সমন্বয় বা সর্বাধিক পজিশনের সময়টি সংক্ষিপ্ত করার পরামর্শ দেওয়া হয়।
তহবিল ব্যবস্থাপনা ঝুঁকিঃ ডিফল্ট অ্যাকাউন্টের 50% তহবিল ব্যবহার করে ট্রেড করা, একাধিকবার পজিশনিংয়ের ক্ষেত্রে ঝুঁকিটি অত্যধিক প্রকাশের কারণ হতে পারে। ব্যবহারকারীদের তাদের ঝুঁকি বহনযোগ্যতার উপর ভিত্তি করে পজিশনের আকার এবং পজিশনিং প্যারামিটারগুলি সামঞ্জস্য করার পরামর্শ দেওয়া হয়।
প্রযুক্তিগত বাস্তবায়নের সীমাবদ্ধতাঃ কৌশলটি বন্ধের দামের উপর ভিত্তি করে লেনদেনের উপর ভিত্তি করে, প্রকৃত ক্রিয়াকলাপে স্লাইড পয়েন্ট এবং মূল্যের পার্থক্যের মুখোমুখি হতে পারে। এই ধরনের ঝুঁকি হ্রাস করার জন্য, বন্ধের আগে নির্দিষ্ট সময় অর্ডার করা বা বাজার মূল্যের পরিবর্তে সীমাবদ্ধ মূল্যের লিস্ট ব্যবহার করা বিবেচনা করা যেতে পারে।
ডায়নামিক থ্রেশহোল্ড অ্যাডজাস্টমেন্টঃ বর্তমান কৌশলটি স্থির আইবিএস ইনপুট এবং আউটপুট থ্রেশহোল্ড ব্যবহার করে এবং বাজারের অস্থিরতার গতিশীলতার উপর ভিত্তি করে এই থ্রেশহোল্ডগুলিকে সামঞ্জস্য করার বিষয়ে বিবেচনা করা যেতে পারে। উদাহরণস্বরূপ, মিথ্যা সংকেত হ্রাস করার জন্য উচ্চতর ওঠানামা চলাকালীন যথাযথভাবে ইনপুট থ্রেশহোল্ড বাড়ানো এবং আউটপুট থ্রেশহোল্ড হ্রাস করা যেতে পারে; নিম্ন ওঠানামা চলাকালীন, আরও তীব্র সেটিং ব্যবহার করা যেতে পারে।
মাল্টি টাইম সাইকেল কনফার্মেশনঃ মাল্টি টাইম সাইকেল বিশ্লেষণ ফ্রেমওয়ার্ক চালু করা হয়েছে, যাতে স্বল্প ও মধ্যমেয়াদী আইবিএস সংকেত একসাথে নিশ্চিত করা হয় যাতে লেনদেন করা যায়। উদাহরণস্বরূপ, দৈনিক আইবিএস সংকেত ছাড়াও, ঘড়ি বা 4 ঘন্টা লাইনের আইবিএস মান গণনা করা যেতে পারে, কেবলমাত্র যখন একাধিক টাইম সাইকেলগুলি ওভারবই বা ওভারসোলের অবস্থা দেখায় তখনই প্রবেশ করা যায়, যা সংকেতের গুণমানকে ব্যাপকভাবে উন্নত করে।
স্মার্ট স্টপ মেকানিজমঃ বর্তমান কৌশলগুলি কেবলমাত্র আইবিএস প্রস্থান সংকেত এবং সর্বাধিক পজিশনের সময় নিয়ন্ত্রণের ঝুঁকির উপর নির্ভর করে, আরও স্মার্ট স্টপ মেকানিজম চালু করা যেতে পারে। উদাহরণস্বরূপ, এটিআর ভিত্তিক গতিশীল স্টপ, ট্র্যাকিং স্টপ বা সমর্থন / প্রতিরোধের অবস্থানের উপর ভিত্তি করে স্টপ কৌশলগুলি, মুনাফা আরও ভালভাবে সুরক্ষিত করতে এবং একক লেনদেনের ঝুঁকি নিয়ন্ত্রণ করতে।
বাজার পরিস্থিতি স্বনির্ধারণঃ বাজার পরিস্থিতি সনাক্তকরণ ব্যবস্থা চালু করা হয়েছে, বিভিন্ন বাজার পরিস্থিতির অধীনে বিভিন্ন প্যারামিটার সেটিং ব্যবহার করা হয়েছে। বাজার পরিস্থিতি সনাক্ত করার জন্য ADX (গড় দিকনির্দেশক) বা অন্যান্য প্রবণতা শক্তির সূচক ব্যবহার করা যেতে পারে, শক্তিশালী প্রবণতা পরিবেশে আইবিএস শর্তগুলি শিথিল করা হয়, ঝাঁকুনির বাজারে আরও কঠোর আইবিএস থ্রেশহোল্ড ব্যবহার করা হয়।
মেশিন লার্নিং অপ্টিমাইজেশনঃ মেশিন লার্নিং প্রযুক্তি ব্যবহার করে আইবিএস সংকেতগুলিকে অপ্টিমাইজ এবং ফিল্টার করা হয়। প্রশিক্ষণ মডেলগুলি সনাক্ত করে যে কোন আইবিএস সংকেতগুলি লাভজনক ব্যবসায়ের সম্ভাবনা বেশি, এবং বাজারের বৈশিষ্ট্য অনুসারে প্যারামিটারগুলি স্বয়ংক্রিয়ভাবে সামঞ্জস্য করে, কৌশলটির স্ব-অনুকূলিতকরণ কার্যকারিতা অর্জন করে। এই পদ্ধতিটি কৌশলগুলির স্থায়িত্ব এবং অভিযোজনযোগ্যতা উল্লেখযোগ্যভাবে বাড়িয়ে তুলতে পারে, বিশেষত যখন বিভিন্ন বাজার পরিস্থিতি এবং ব্যবসায়ের জাতের মুখোমুখি হয়।
অভ্যন্তরীণ মূল্যের শক্তি প্রবণতা বিপরীত ট্রেডিং সিস্টেম হল অভ্যন্তরীণ মূল্যের শক্তি (আইবিএস) সূচক এবং সূচকীয় চলমান গড় (ইএমএ) সংযুক্ত একটি সূচকীয় স্তরের ট্রেডিং কৌশল। এই কৌশলটি সম্ভাব্য বাজার বিপরীত পয়েন্টগুলি সনাক্ত করে এবং দীর্ঘমেয়াদী প্রবণতা অনুসরণ করে ট্রেডিং সিদ্ধান্তগুলিকে অনুকূল করে তোলে, বিশেষত স্টক এবং ইউএসএ সূচক ব্যবসায়ের জন্য। এর মূল সুবিধা হল এর উদ্দেশ্যমূলক গাণিতিক মডেল, নমনীয় অবস্থান পরিচালনা এবং অন্তর্নির্মিত ঝুঁকি নিয়ন্ত্রণ ব্যবস্থা।
কৌশলটি SPY/SPX এবং NDQ/QQQ এর মতো প্রধান বাজার সূচকগুলির জন্য প্যারামিটার অপ্টিমাইজ করা হয়েছে, ব্যবহারকারীরা সরাসরি সুপারিশকৃত সেটিংসে ট্রেড করতে পারেন। যাইহোক, যে কোনও ট্রেডিং কৌশল ঝুঁকিপূর্ণ, যার মধ্যে রয়েছে প্যারামিটার সংবেদনশীলতা, বাজারের ঝড়ের ঝুঁকি এবং তীব্র প্রবণতা পরিবর্তনের সময় পিছিয়ে পড়া ইত্যাদি।
ভবিষ্যতে অপ্টিমাইজেশনের দিকনির্দেশের মধ্যে রয়েছে ডায়নামিক থ্রেশহোল্ড অ্যাডজাস্টমেন্ট, মাল্টি-টাইম সাইকেল কনফার্মেশন, স্মার্ট স্টপ লস ম্যানেজমেন্ট, মার্কেট স্টেট অ্যাটাক এবং মেশিন লার্নিং অপ্টিমাইজেশন ইত্যাদি। এই উন্নতিগুলি কৌশলগুলির অভিযোজনযোগ্যতা এবং স্থিতিশীলতা আরও বাড়িয়ে তুলতে পারে, যাতে তারা বিভিন্ন বাজারের পরিবেশে ভাল পারফরম্যান্স বজায় রাখতে পারে।
পরিমাপযোগ্য ট্রেডিং কৌশল হিসাবে, অভ্যন্তরীণ মূল্যের শক্তি ট্রেডিং সিস্টেম ট্রেডারদের একটি নিয়ম-ভিত্তিক, বস্তুনিষ্ঠ ট্রেডিং পদ্ধতি প্রদান করে, ট্রেডিং সিদ্ধান্তের উপর আবেগগত প্রভাব হ্রাস করে এবং আরও ধারাবাহিক এবং পূর্বাভাসযোগ্য ট্রেডিং ফলাফল অর্জনে সহায়তা করে।
/*backtest
start: 2024-03-05 00:00:00
end: 2025-03-03 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//Implementation by AlgoTradeKit
//v.0.5
//The IBS Trading Strategy is a daily bars long-only trading system, based on the concept of Internal Bar Strength (IBS).
//The strategy aims to identify potential reversals by monitoring how the previous bar’s close positions itself within its high-low range.
//It is suitable for stock and US indices. The default parameters are optimized for SPY/SPX and NDQ/QQQ
//Setting for QQQ: 0.09, 0.985, 220, 0, 14
//Setting for SPY: 0.11, 0.995, 200, 0, 12
//@version=6
strategy("IBS (Internal Bar Strength) Trading Strategy for SPY and NDQ", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=50, pyramiding = 2, currency = currency.USD, process_orders_on_close=false)
// ***** INPUTS *****
// IBS thresholds
ibsEntryThreshold = input.float(0.09, title="IBS Entry Threshold", step=0.01, tooltip="IBS = (Previous Close - Previous Low) / (Previous High - Previous Low), and IBS value below 0.2 is typically interpreted as an oversold condition, while a value above 0.9 suggests an overbought state.")
ibsExitThreshold = input.float(0.985, title="IBS Exit Threshold", step=0.01, tooltip="IBS = (Previous Close - Previous Low) / (Previous High - Previous Low), and IBS value below 0.2 is typically interpreted as an oversold condition, while a value above 0.9 suggests an overbought state.")
// EMA period (set to 0 to disable the EMA condition)
emaPeriod = input.int(220, title="EMA Period (0 to disable)", minval=0, maxval=5000, step=1, tooltip="Exponential Moving Average Filter Period (0 to disable)")
// Minimum percentage drop required for a new entry (for dollar-cost averaging)
minEntryPct = input.float(0, title="Minimum Distance for New Entry (%)", step=0.05, minval=0.0, maxval=100, tooltip = "Distance in Price from Last Opened Position, in Percentage Terms (%)")
maxTradeDuration = input.int(title="Maximum Trade Duration (days)", defval=14, minval=1, step=1, maxval=1000, tooltip = "Exit at close if maximum trade duration is reached.")
// Persistent variable to record the bar index when the trade is entered.
var int entryBarIndex = na
// ***** EMA CALCULATION *****
// Calculate the EMA globally if the period is greater than 0, otherwise leave as na.
emaValue = emaPeriod > 0 ? ta.ema(close, emaPeriod) : na
// ***** IBS CALCULATION *****
// Calculate IBS using the previous bar’s values.
// Guard against division by zero: if previous high equals previous low, default IBS to 0.5.
prevHigh = high[1]
prevLow = low[1]
prevClose = close[1]
ibs = (prevHigh != prevLow) ? (prevClose - prevLow) / (prevHigh - prevLow) : 0.5
// ***** ENTRY AND EXIT CONDITIONS *****
// Define the EMA condition: if emaPeriod is 0, bypass the EMA check.
emaConditionLong = emaPeriod == 0 or (close > emaValue)
emaConditionShort = emaPeriod == 0 or (close < emaValue)
// Entry: IBS is below the entry threshold and the EMA condition holds.
enterLong = (ibs < ibsEntryThreshold) and emaConditionLong
enterShort = (ibs > ibsExitThreshold) and emaConditionShort
// Exit: IBS is above the exit threshold.
exitLong = ibs > ibsExitThreshold
exitShort = ibs < ibsEntryThreshold
// ***** DOLLAR-COST AVERAGING CONDITION IN PERCENTAGE *****
// Track the last entry price. Reset when there is no open position.
var float lastEntryPrice = na
if strategy.position_size == 0
lastEntryPrice := na
// If there is no previous entry, the condition is met.
// Otherwise, allow a new entry only if the current price is lower than the last entry price
// by at least the predefined percentage (converted to a fraction).
dcaCondition = na(lastEntryPrice) or ((close < lastEntryPrice) and (((lastEntryPrice - close) / lastEntryPrice) >= (minEntryPct / 100)))
dcaConditionShort = na(lastEntryPrice) or ((close > lastEntryPrice) and (((close - lastEntryPrice) / lastEntryPrice) >= (minEntryPct / 100)))
// ***** STRATEGY ORDERS *****
// Enter a long position only if both the entry condition and the DCA condition are met.
if enterLong and dcaCondition
strategy.entry("Long", strategy.long)
lastEntryPrice := close // update the last entry price
entryBarIndex := bar_index
if enterShort and dcaConditionShort
strategy.entry("Short", strategy.short)
lastEntryPrice := close // update the last entry price
entryBarIndex := bar_index
// Compute trade duration in days using the absolute difference
tradeDuration = not na(entryBarIndex) ? math.abs(bar_index - entryBarIndex) : 0
// Exit the long position when the exit condition is met or if the trade duration reaches maxTradeDuration days.
if exitLong or (tradeDuration >= maxTradeDuration)
strategy.close("Long")
// Exit the long position when the exit condition is met or if the trade duration reaches maxTradeDuration days.
if exitShort or (tradeDuration >= maxTradeDuration)
strategy.close("Short")
// ***** PLOTTING *****
// Plot IBS for reference, along with horizontal lines for the entry and exit thresholds.
//plot(ibs, title="IBS", color=color.blue, linewidth=2)
//hline(ibsEntryThreshold, title="IBS Entry Threshold", color=color.green)
//hline(ibsExitThreshold, title="IBS Exit Threshold", color=color.red)