টুইন রেঞ্জ ফিল্টার কৌশলটি মূল্যের অস্থিরতার উপর ভিত্তি করে একটি ট্রেডিং কৌশল। এটি বিটকয়েনের মতো অত্যন্ত অস্থির ডিজিটাল সম্পদের জন্য উপযুক্ত। এটি মূল্য এবং পরিসরের মধ্যে সম্পর্ক সহ বিভিন্ন প্যারামিটার সেটিংসের সাথে দুটি গড় পরিসরের সূচক ব্যবহার করে ট্রেডিং সংকেত তৈরি করে।
এই কৌশলটি বিভিন্ন সময়কালের দৈর্ঘ্যের সাথে দুটি মসৃণ পরিসীমা সূচক ব্যবহার করেঃ একটি দ্রুত পরিসীমা সূচক (ডিফল্ট সময়কাল 27) এবং একটি ধীর পরিসীমা সূচক (ডিফল্ট সময়কাল 55) । পরিসীমা সূচক সূত্রটি হলঃ বর্তমান সময়ের মূল্য পরিসরের এক্সপোনেন্সিয়াল চলমান গড় গুণিত একটি ফ্যাক্টর (যেমন 1.6) ।
টুইন রেঞ্জ ফিল্টার কৌশলটি মূল্যকে দুটি রেঞ্জ সূচকের সাথে তুলনা করে এটি বর্তমানে একটি নির্দিষ্ট দোলের পরিসরের মধ্যে রয়েছে কিনা তা নির্ধারণ করে। যখন মূল্য এই দোলের পরিসরের মধ্য দিয়ে ভেঙে যায় তখন ট্রেডিং সংকেত তৈরি করা হয়।
বিশেষত, কৌশলটি একটি মাঝারি লাইনকে বেঞ্চমার্ক হিসাবে ব্যবহার করে, যা দুটি পরিসীমা সূচকগুলির গড়। যখন দাম একটি দ্রুত পরিসরের মধ্যবর্তী রেখার উপরে থাকে তখন একটি দীর্ঘ সংকেত উত্পন্ন হয়; যখন দাম একটি দ্রুত পরিসরের মধ্যবর্তী রেখার নীচে পড়ে তখন একটি সংক্ষিপ্ত সংকেত উত্পন্ন হয়।
মিথ্যা সংকেতগুলি ফিল্টার করতে, এটি একটি শর্তও যুক্ত করেঃ বর্তমান মূল্যের চলাচল পূর্ববর্তী সময়ের সাথে সামঞ্জস্যপূর্ণ হলে কেবলমাত্র একটি সংকেত উত্পন্ন হয়। উদাহরণস্বরূপ, যখন দাম বৃদ্ধি পায় এবং একটি পরিসরের মধ্যম রেখা অতিক্রম করে তখনই একটি দীর্ঘ সংকেত ট্রিগার হয়।
সংক্ষেপে, এই কৌশলটি যমজ পরিসীমা সূচকগুলির সাথে দোলন পরিসীমা সনাক্ত করে এবং যখন দামটি পরিসীমাটি ভেঙে যায় তখন অর্ডার তৈরি করে। মিথ্যা সংকেত হ্রাস করার জন্য মূল্য দিকনির্দেশ ফিল্টার যুক্ত করা হয়।
টুইন রেঞ্জ ফিল্টার কৌশলটির সুবিধাঃ
দামের অস্থিরতার বৈশিষ্ট্য ব্যবহার করে, বিটকয়েনের মতো অত্যন্ত অস্থির সম্পদের সাথে অভিযোজিত। যমজ ব্যাপ্তি সূচকগুলি মূল্যের ব্যাপ্তিগুলি আরও নির্ভুলভাবে সনাক্ত করতে পারে।
যমজ ব্যাপ্তি সূচকগুলির মধ্যে বিভিন্ন সময়সীমা রয়েছে। দ্রুততমটি স্বল্পমেয়াদী সুযোগগুলি ধরতে পারে, যখন ধীরতমটি দীর্ঘমেয়াদী প্রবণতা বিবেচনা করে।
দামের দিকনির্দেশ ফিল্টার যোগ করা স্বল্পমেয়াদী ওঠানামা থেকে মিথ্যা সংকেত হ্রাস করে।
সহজ এবং পরিষ্কার যুক্তি, সহজেই বোঝা এবং বাস্তবায়ন, আলগো ট্রেডিংয়ের জন্য উপযুক্ত।
কৌশলটির কিছু ঝুঁকি উল্লেখ করা উচিতঃ
এটি অস্থিরতার সূচকগুলির উপর নির্ভর করে, কম অস্থিরতার পরিবেশে এটি কম পারফর্ম করতে পারে।
বিভিন্ন পণ্যের জন্য পরিসীমা পরামিতিগুলি অপ্টিমাইজ করা দরকার, অন্যথায় ট্রেডিংয়ের সুযোগগুলি মিস হতে পারে বা মিথ্যা সংকেত দেখা দিতে পারে।
দাম এবং অস্থিরতার মধ্যে পার্থক্য বিবেচনা করা হয় না। যদি দামের সংশ্লিষ্ট বৃদ্ধি না করে অস্থিরতা বৃদ্ধি পায় তবে মিথ্যা সংকেত দেখা দিতে পারে।
উচ্চ অস্থিরতার পরিবেশে স্টপ লস স্তরের সমন্বয় প্রয়োজন হতে পারে। অত্যধিক সংকীর্ণ স্টপগুলি অত্যধিক স্টপ আউটগুলির কারণ হয়।
কৌশলটি বিভিন্ন দিক থেকে উন্নত করা যেতে পারে:
বিভিন্ন পণ্য এবং সময়সীমার জন্য সর্বোত্তম সমন্বয় খুঁজে পেতে পরিসীমা পরামিতি পরীক্ষা এবং অপ্টিমাইজ করুন।
স্টপ লস কৌশল অপ্টিমাইজ করার জন্য সাম্প্রতিক অস্থিরতার উপর ভিত্তি করে গতিশীল স্টপ লস প্রক্রিয়া যুক্ত করুন।
ভুল সংকেত এড়াতে মূল্য-বিবর্তনশীলতার বিপরীতে ভিত্তি করে ফিল্টার যুক্ত করুন।
ভলিউম পরিবর্তনের মতো অন্যান্য সূচক অন্তর্ভুক্ত করুন যাতে প্রবেশের নিশ্চয়তা বৃদ্ধি পায়।
কৌশলটির জন্য উপযুক্ত মুনাফা গ্রহণের যন্ত্রপাতি পরীক্ষা করুন এবং যোগ করুন।
সামগ্রিকভাবে, টুইন রেঞ্জ ফিল্টারটি অত্যন্ত অস্থির সম্পদের জন্য একটি কার্যকর ট্রেডিং কৌশল। এটি মূল্যের অস্থিরতার বৈশিষ্ট্যগুলি ভালভাবে ব্যবহার করে এবং সহজ এবং পরিষ্কার ট্রেডিং লজিক তৈরি করে। প্যারামিটার অপ্টিমাইজেশন এবং ঝুঁকি পরিচালনার মতো আরও উন্নতির সাথে এটি কোয়ান্ট ট্রেডিং সিস্টেমের একটি মূল্যবান উপাদান হয়ে উঠতে পারে। এটি বাজারের অস্থিরতার বৈশিষ্ট্যগুলির উপর ভিত্তি করে অ্যালগরিদমিক ট্রেডিংয়ের অন্তর্দৃষ্টিও সরবরাহ করে।
/*backtest start: 2023-11-05 00:00:00 end: 2023-11-12 00:00:00 period: 30m basePeriod: 15m 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/ // © colinmck, greenmask9 //@version=4 strategy(title="Twin Range Filter Algo", overlay=true) source = input(defval=close, title="Source") // Smooth Average Range per1 = input(defval=27, minval=1, title="Fast period") mult1 = input(defval=1.6, minval=0.1, title="Fast range") per2 = input(defval=55, minval=1, title="Slow period") mult2 = input(defval=2, minval=0.1, title="Slow range") smoothrng(x, t, m) => wper = t * 2 - 1 avrng = ema(abs(x - x[1]), t) smoothrng = ema(avrng, wper) * m smoothrng smrng1 = smoothrng(source, per1, mult1) smrng2 = smoothrng(source, per2, mult2) smrng = (smrng1 + smrng2) / 2 // Range Filter rngfilt(x, r) => rngfilt = x rngfilt := x > nz(rngfilt[1]) ? x - r < nz(rngfilt[1]) ? nz(rngfilt[1]) : x - r : x + r > nz(rngfilt[1]) ? nz(rngfilt[1]) : x + r rngfilt filt = rngfilt(source, smrng) upward = 0.0 upward := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1]) downward = 0.0 downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 : nz(downward[1]) hband = filt + smrng lband = filt - smrng longCond = bool(na) shortCond = bool(na) longCond := source > filt and source > source[1] and upward > 0 or source > filt and source < source[1] and upward > 0 shortCond := source < filt and source < source[1] and downward > 0 or source < filt and source > source[1] and downward > 0 CondIni = 0 CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1] long = longCond and CondIni[1] == -1 short = shortCond and CondIni[1] == 1 // Plotting // Strategy // From this part on, programmer is greenmaks9 // Separator = input(title="Following conditions and backtest algorithm are added by @greenmask9 🎯, original script is written by @colinmck 👍. Read both of their's release notes for more info on how this script works.", type=input.bool, defval=false) disabler = input(title="Disable greenmask9's ATR conditions", type=input.bool, defval=false) //second l2 = input(title="ATR1", defval=32, minval=1) s2 = input(title="Smoothing", defval="SMA", options=["RMA", "SMA", "EMA", "WMA"]) atr2(source, l2) => if s2 == "SMA" sma(source, l2) else if s2 == "RMA" rma(source, l2) else if s2 == "EMA" ema(source, l2) else wma(source, l2) //third l3 = input(title="ATR2", defval=64, minval=1) s3 = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"]) atr3(source, l3) => if s3 == "RMA" rma(source, l3) else if s3 == "SMA" sma(source, l3) else if s3 == "EMA" ema(source, l3) else wma(source, l3) atr20=atr2(tr(true), l2) atr30=atr3(tr(true), l3) strategy.initial_capital = 50000 ordersize=floor(strategy.initial_capital/close) profit = input(title="Ticks profit", type=input.integer, defval=900) stop = input(title="Ticks stoploss", type=input.integer, defval=300) maxcandles_till_close = input(title="Time stoploss", type=input.integer, defval=17) bull = long and (atr20<atr30 or disabler) bear = short and (atr20<atr30 or disabler) bullclock = barssince(bull) bearclock = barssince(bear) if (bull) strategy.entry("Twin Long", strategy.long, ordersize) strategy.exit("Exit", from_entry = "Twin Long", profit = profit, loss = stop) if (bear) strategy.entry("Twin Short", strategy.short, ordersize) strategy.exit("Exit", from_entry = "Twin Short", profit = profit, loss = stop) //time stoploss strategy.close("Twin Long", when = bullclock == maxcandles_till_close, comment = "Timed out") strategy.close("Twin Short", when = bearclock == maxcandles_till_close, comment = "Timed out")