এই কৌশলটি শেয়ারের মূল্য পরিবর্তনের জন্য গড় সত্য পরিসীমা (এটিআর) সূচকের উপর ভিত্তি করে একটি গতিশীল স্টপ লস লাইন সেট করে, যাতে মুনাফা গ্রহণের সাথে সাথে স্টপ লস রক্ষা করা যায়।
কৌশলটি মূলত নিম্নলিখিত ধাপগুলির মাধ্যমে বাস্তবায়িত হয়ঃ
এটিআর সূচক গণনা করুন, এটিআর সময়কাল nATRPeriod প্যারামিটার দ্বারা সেট করা হয়, ডিফল্ট 5;
এটিআর মানের উপর ভিত্তি করে স্টপ লস লাইন গণনা করুন, স্টপ লস ম্যাগনিটিউড nATRMultip প্যারামিটার দ্বারা সেট করা হয়, ডিফল্টভাবে এটিআর এর 3.5 গুণ;
যখন মূল্য বৃদ্ধি পায়, যদি পূর্ববর্তী স্টপ লস লাইনের চেয়ে বেশি হয়, তখন স্টপ লস লাইনটি মূল্য ছাড়িয়ে স্টপ লসের পরিমাণ পর্যন্ত সামঞ্জস্য করুন; যখন দাম কমে যায়, যদি পূর্ববর্তী স্টপ লস লাইনের চেয়ে কম হয়, তখন স্টপ লস লাইনটি দাম ছাড়িয়ে স্টপ লসের পরিমাণ পর্যন্ত সামঞ্জস্য করুন;
মূল্য স্টপ লস লাইন অতিক্রম করে কিনা তা বিচার করুন, যদি এটি অতিক্রম করে, কিনুন বা বিক্রয় সংকেত পাঠান;
স্টপ লস লাইনের ব্রেকআউট সিগন্যালের উপর ভিত্তি করে লং বা শর্ট পজিশন প্রবেশ করুন এবং যখন দাম আবার স্টপ লস লাইনে স্পর্শ করে তখন পজিশন বন্ধ করুন।
যখন মূল্য বৃদ্ধি পায়, তখন স্টপ লস লাইনটি মুনাফা লক করার জন্য অবিচ্ছিন্নভাবে উপরে চলে যাবে। যখন দাম কমে যায়, স্টপ লস লাইনটি ক্ষতি বন্ধ করার জন্য অবিচ্ছিন্নভাবে নীচে চলে যাবে। এটিআর সূচক মূল্যের ওঠানামা আরও সঠিকভাবে প্রতিফলিত করতে পারে। এটিআর ভিত্তিক স্টপ লস লাইনটি গতিশীলভাবে সামঞ্জস্য করা অত্যধিক আক্রমণাত্মক বা অত্যধিক সংরক্ষণশীল স্টপ লস এড়াতে পারে।
এটিআর সময়কাল এবং স্টপ লসের মাত্রা সামঞ্জস্য করে প্যারামিটারগুলি অনুকূলিত করা যেতে পারে যাতে স্টপ লস এবং ট্রেলিংয়ের মধ্যে সর্বোত্তম ভারসাম্য খুঁজে পাওয়া যায়। অপ্রয়োজনীয় স্টপ লস হ্রাস করার জন্য প্রবেশের সময় ফিল্টার করতে অন্যান্য প্রযুক্তিগত সূচকগুলিও ব্যবহার করা যেতে পারে।
এই কৌশলটি গতিশীল এটিআর ট্রেইলিং স্টপ লস লাইনের মাধ্যমে হোল্ডিংয়ের সময় স্টপ লস এবং মুনাফা গ্রহণের উপলব্ধি করে। স্থির স্টপ লস পয়েন্টগুলির তুলনায়, এটি অত্যধিক আক্রমণাত্মক বা অত্যধিক সংরক্ষণশীল স্টপ লস এড়ানো, দামের ওঠানামায় আরও ভালভাবে মানিয়ে নেয়। এটিআর সূচকটি স্টপ লস লাইনের সমন্বয়কে আরও লক্ষ্যবস্তু করে তোলে। তবে অপ্রয়োজনীয় স্টপগুলি হ্রাস এবং মুনাফা মার্জিন প্রসারিত করার জন্য পরামিতি এবং পুনরায় প্রবেশের কৌশলগুলির আরও অপ্টিমাইজেশনের প্রয়োজন। সামগ্রিকভাবে এটি আরও গবেষণা এবং প্রয়োগের মূল্যবান একটি ভাল গতিশীল ট্রেইলিং স্টপ লস ধারণা।
/*backtest start: 2023-09-08 00:00:00 end: 2023-10-08 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //@okadoke //////////////////////////////////////////////////////////// // Based on Average True Range Trailing Stops Strategy by HPotter // Average True Range Trailing Stops Strategy, by Sylvain Vervoort // The related article is copyrighted material from Stocks & Commodities Jun 2009 //////////////////////////////////////////////////////////// strategy(title="ATR Trailing Stops Strategy", shorttitle="ATRTSS", overlay = true, initial_capital=100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type="percent", commission_value=0.0) nATRPeriod = input(5, "ATR Period") nATRMultip = input(3.5, "ATR Multiplier") useShorts = input(false, "Test w/Shorts?") daysBackMax = input(defval = 360, title = "Max Days Back to Test", minval = 0) daysBackMin = input(defval = 0, title = "Min Days Back to Test", minval = 0) msBackMax = 1000 * 60 * 60 * 24 * daysBackMax msBackMin = 1000 * 60 * 60 * 24 * daysBackMin xATR = atr(nATRPeriod) nLoss = nATRMultip * xATR xATRTrailingStop = na xATRTrailingStop := iff(close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), close - nLoss), iff(close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), close + nLoss), iff(close > nz(xATRTrailingStop[1], 0), close - nLoss, close + nLoss))) pos = na pos := iff(close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0), 1, iff(close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) color = pos == -1 ? red: pos == 1 ? green : blue plot(xATRTrailingStop, color=color, title="ATR Trailing Stop") isWithinTimeBounds = (msBackMax == 0 or (time > (timenow - msBackMax))) and (msBackMin == 0 or (time < (timenow - msBackMin))) buy = crossover(close, xATRTrailingStop) sell = crossunder(close, xATRTrailingStop) strategy.entry("LONG", long=true, when=buy and isWithinTimeBounds) strategy.close("LONG", when=sell and isWithinTimeBounds) strategy.entry("SHORT", long=false, when=useShorts and sell and isWithinTimeBounds) strategy.close("SHORT", when=useShorts and buy and isWithinTimeBounds)