
এই কৌশলটি কমোডিটি চ্যানেল ইনডেক্স (সিসিআই) সূচকের উপর ভিত্তি করে, গতিশীল অভিযোজনযোগ্য এন্ট্রিগুলির মানদণ্ড ব্যবহার করে প্রবণতা বিপরীত হওয়ার সময় নির্ধারণ করে এবং ট্র্যাকিং স্টপ লস ব্যবহার করে মুনাফা লক করার জন্য। কৌশলটির নামটি CCI এর নীচে ক্যাপচার করার জন্য সামগ্রিকভাবে সামঞ্জস্যপূর্ণ। কমোডিটি ট্রেডিং কৌশলটি এই কৌশলটির মূল বিষয়গুলি অন্তর্ভুক্ত করেঃ ওভারসেল অঞ্চলগুলিকে ধরার জন্য CCI সূচকটি ব্যবহার করুন এবং গতিশীল অভিযোজনযোগ্য এন্ট্রিগুলি ব্যবহার করুন।
মূল সূচকটি হল CCI সূচক, যা ওভারসোল্ড অঞ্চলগুলি নির্ধারণের জন্য ব্যবহৃত হয় যাতে ট্রেন্ডের বিপরীত হওয়ার সম্ভাবনা থাকে। এছাড়াও, বিভিন্ন সূচক এবং বাজারের পরিবেশের উপর নির্ভর করে, CCI ওভারসোল্ড অঞ্চলের মাত্রাও পরিবর্তিত হতে পারে। অতএব, এই কৌশলটি একটি দূরদর্শী পদ্ধতি ব্যবহার করে, অতীতের সিসিআই সর্বনিম্ন পয়েন্টের অবস্থান নির্ধারণ করে এবং CCI ক্রয় স্তরটি গতিশীলভাবে সেট করে। গত 40 দিনের মধ্যে সর্বনিম্ন CCI পয়েন্টটি -90 এর চেয়ে বড় হলে, -90 নতুন ওভারসোল্ড অঞ্চল স্তর হিসাবে; গত 50 দিনের মধ্যে CCI সর্বনিম্ন পয়েন্টটি -70 এর চেয়ে বড় হলে, -70 নতুন ওভারসোল্ড অঞ্চল স্তর হিসাবে, এবং তাই। এইভাবে ডিজাইন করা হয়েছে যাতে সমতল এন্ট্রিগুলি বিভিন্ন বাজারের সাথে সামঞ্জস্যপূর্ণ হতে পারে, নিম্নমুখী বাজারের ক্ষেত্রে কম ঝুঁকিপূর্ণ এন্ট্রিগুলি অনুসরণ করে, এবং জোনাল বাজারে সমতল এন্ট্রিগুলি আরও শিথিল করে দেয়।
বিশেষ করে, ডিফল্ট ক্রয় সিগন্যালের সিসিআই স্তর -145। তারপর গত 40 দিন, 50 দিন ইত্যাদি বিভিন্ন দিনের মধ্যে সিসিআই সর্বনিম্ন পয়েন্টের অবস্থান বিচার করুন, যদি সর্বনিম্ন পয়েন্টটি ডিফল্ট স্তরের পরবর্তী স্তর যেমন -90 এর চেয়ে বেশি হয় তবে নতুন এন্ট্রি স্তর হিসাবে -90 ব্যবহার করুন। যদি সর্বনিম্ন পয়েন্টটি আবার -90 এর চেয়ে বেশি হয় তবে নতুন এন্ট্রি স্তর হিসাবে -70 ব্যবহার করুন, এইভাবে। এন্ট্রি স্তরটি -145 / -90 / -70 / -50 / -4 / 0 / +25 / +50 / +70 এর মধ্যে গতিশীলভাবে স্যুইচ করতে পারে। যখন সিসিআই প্রাসঙ্গিক স্তরের চেয়ে কম হয় তখন ক্রয় সংকেত তৈরি হয়।
এছাড়াও, স্টপ লস ট্র্যাকিং কৌশলটি মুনাফা লক করার জন্য ব্যবহার করা হয়, যেখানে স্টপ লস স্তরগুলি দামের সাথে চলতে থাকে।
স্থির এন্ট্রিগুলির তুলনায়, এই ধরণের গতিশীল নকশাটি এন্ট্রিগুলির সময়কে অনুকূলিত করতে পারে। উচ্চতর এন্ট্রি মানদণ্ডের জন্য উচ্চতর বাজারের ঝুঁকি হ্রাস করতে পারে; এবং বাজারের মধ্যে এন্ট্রিগুলির মানদণ্ড হ্রাস করা আরও বেশি সুযোগ দখল করতে পারে। এই ধরনের নকশা কৌশলটির অভিযোজনযোগ্যতা বাড়ায়।
সিসিআই নিজেই ওভারবয় ওভারসেলের পরিমাপের একটি পরিমাপক হিসাবে আরও পরিষ্কার এবং নির্ভরযোগ্য, সিসিআই-এর উপর ভিত্তি করে ট্রেন্ড রিভার্সনের বিচার করা কার্যকর। গতিশীল এন্ট্রিগুলির নকশার সাথে মিলিত, এই কৌশলটির সামগ্রিক সুবিধা উল্লেখযোগ্য।
CCI-এর উপর ভিত্তি করে প্রবণতা পাল্টাবারের ধারণাটি কিছুটা পিছিয়ে রয়েছে, যখন দাম দ্রুত বাড়ে বা পতন হয় তখন এন্ট্রিগুলির সময় সঠিক নাও হতে পারে। এছাড়াও, এন্ট্রিগুলির স্তরীয় গতিশীল অভিযোজন প্রক্রিয়াটি বর্তমান বাজারের পরিবেশের সাথে পুরোপুরি মেলে না, যার ফলে এন্ট্রিগুলি সর্বদা সর্বোত্তম সময় নয়। অবশেষে, পণ্যের বাজার নিজেই খুব অস্থির, এমনকি যদি স্টপ লস সেট করা হয়, তবে নির্দিষ্ট প্যারামিটার সেট না করাও সময়মতো বড় ক্ষতি হতে পারে।
মূলত CCI প্যারামিটার নিজেই, এন্ট্রিজ লেভেল সেট এবং স্টপ লস প্যারামিটার থেকে বেশ কয়েকটি দিক থেকে অপ্টিমাইজ করা যায়। নির্দিষ্ট মানের জন্য আরও ভাল প্যারামিটারগুলি কৌশলটির কার্যকারিতা বাড়িয়ে তুলতে পারে।
এই কৌশলটি সিসিআই সূচক ব্যবহার করে ওভারবাইট ওভারসোল্টের বিচার করার জন্য এবং গতিশীল অভিযোজনযোগ্য এন্ট্রি স্তরের নকশা ব্যবহার করে। স্থির প্যারামিটারের তুলনায় গতিশীল এন্ট্রি স্তরটি কৌশলটির অভিযোজনযোগ্যতাকে উল্লেখযোগ্যভাবে বাড়িয়ে তোলে। এন্ট্রিগুলির উপর ভিত্তি করে বিপরীত ক্যাপচার মোডটি স্টপ লস ট্র্যাকিংয়ের সাথে মিলিত হয়, যা শক্তিশালী গতির সুযোগকে ধরে রাখতে এবং সময়মতো স্টপ লস করতে পারে। এই কৌশলটি সঠিক প্যারামিটার সেট করার পরে সামগ্রিক কার্যকারিতা শক্তিশালী।
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Extended Adaptive CCI Entry Strategy for Commodities", shorttitle="Ext_Adaptive_CCI_Entry_Com", overlay=true)
// Inputs
cciLength = input(20, title="CCI Period")
defaultCCIEntryOversold = input(-145, title="Default CCI Entry Oversold Level")
adaptiveCCIEntryLevel90 = input(-90, title="Adaptive CCI Entry Level for 40 Days")
adaptiveCCIEntryLevel70_50Days = input(-70, title="Adaptive CCI Entry Level for 50 Days")
adaptiveCCIEntryLevel50 = input(-50, title="Adaptive CCI Entry Level for 60 Days")
adaptiveCCIEntryLevel4 = input(-4, title="Adaptive CCI Entry Level for 90 Days")
adaptiveCCIEntryLevel0 = input(0, title="Adaptive CCI Entry Level for 120 Days")
adaptiveCCIEntryLevel25 = input(25, title="Adaptive CCI Entry Level for 140 Days")
adaptiveCCIEntryLevel50_160Days = input(50, title="Adaptive CCI Entry Level for 160 Days")
adaptiveCCIEntryLevel70_180Days = input(70, title="Adaptive CCI Entry Level for 180 Days")
lookback40 = input(40, title="Lookback Period for -90 Level")
lookback50 = input(50, title="Lookback Period for -70 Level")
lookback60 = input(60, title="Lookback Period for -50 Level")
lookback90 = input(90, title="Lookback Period for -4 Level")
lookback120 = input(120, title="Lookback Period for 0 Level")
lookback140 = input(140, title="Lookback Period for +25 Level")
lookback160 = input(160, title="Lookback Period for +50 Level")
lookback180 = input(180, title="Lookback Period for +70 Level")
// Indicator Calculation
cci = ta.cci(close, cciLength)
// Determine adaptive entry level based on lookback periods
var float entryLevel = defaultCCIEntryOversold // Initialize with the default level
if ta.lowest(cci, lookback40) > adaptiveCCIEntryLevel90
entryLevel := adaptiveCCIEntryLevel90
if ta.lowest(cci, lookback50) > adaptiveCCIEntryLevel70_50Days
entryLevel := adaptiveCCIEntryLevel70_50Days
if ta.lowest(cci, lookback60) > adaptiveCCIEntryLevel50
entryLevel := adaptiveCCIEntryLevel50
if ta.lowest(cci, lookback90) > adaptiveCCIEntryLevel4
entryLevel := adaptiveCCIEntryLevel4
if ta.lowest(cci, lookback120) > adaptiveCCIEntryLevel0
entryLevel := adaptiveCCIEntryLevel0
if ta.lowest(cci, lookback140) > adaptiveCCIEntryLevel25
entryLevel := adaptiveCCIEntryLevel25
if ta.lowest(cci, lookback160) > adaptiveCCIEntryLevel50_160Days
entryLevel := adaptiveCCIEntryLevel50_160Days
if ta.lowest(cci, lookback180) > adaptiveCCIEntryLevel70_180Days
entryLevel := adaptiveCCIEntryLevel70_180Days
// Entry Condition
longCondition = cci < entryLevel
// Entry and Exit
if (longCondition)
strategy.entry("Long", strategy.long, qty=1)
alert("Long entry executed at " + str.tostring(close), alert.freq_once_per_bar)
trailOffset = input(10.0, title="Trailing Stop Offset in USD")
strategy.exit("Trailing Stop", "Long", trail_offset = trailOffset, trail_price = close)
if (close < entryLevel - trailOffset)
alert("Long position closed at " + str.tostring(close), alert.freq_once_per_bar)
// Plotting
plot(series=cci, color=color.purple, title="CCI")
hline(price=defaultCCIEntryOversold, color=color.red, title="Default CCI Entry Oversold Level")
hline(price=adaptiveCCIEntryLevel90, color=color.orange, title="CCI -90 Level (40 Days)")
hline(price=adaptiveCCIEntryLevel70_50Days, color=color.yellow, title="CCI -70 Level (50 Days)")
hline(price=adaptiveCCIEntryLevel50, color=color.green, title="CCI -50 Level (60 Days)")
hline(price=adaptiveCCIEntryLevel4, color=color.blue, title="CCI -4 Level (90 Days)")
hline(price=adaptiveCCIEntryLevel0, color=color.purple, title="CCI 0 Level (120 Days)")
hline(price=adaptiveCCIEntryLevel25, color=color.aqua, title="CCI +25 Level (140 Days)")
hline(price=adaptiveCCIEntryLevel50_160Days, color=color.black, title="CCI +50 Level (160 Days)")
hline(price=adaptiveCCIEntryLevel70_180Days, color=color.gray, title="CCI +70 Level (180 Days)")