বেস্ট এটিআর স্টপ মাল্টিপল কৌশল একটি প্রবণতা অনুসরণকারী কৌশল যা স্টপ লস পয়েন্ট সেট করতে এবং ঝুঁকিকে গতিশীলভাবে সামঞ্জস্য করতে গড় সত্য পরিসীমা (এটিআর) এর বহুগুণ ব্যবহার করে। এটি বিপুল ক্ষতি এড়াতে মূল্যের প্রবণতা পরিবর্তনের সময় সময়ে অবস্থানগুলি থেকে বেরিয়ে আসতে পারে।
কৌশলটি প্রথমে দ্রুত এবং ধীর এসএমএ সময়ের সহজ চলমান গড় গণনা করে। যখন দ্রুত এসএমএ ধীর এসএমএ অতিক্রম করে তখন এটি দীর্ঘ হয় এবং যখন দ্রুত এসএমএ ধীর এসএমএর নীচে অতিক্রম করে তখন এটি সংক্ষিপ্ত হয়।
প্রবেশের পরে, এটি রিয়েল-টাইমে এটিআর মান পর্যবেক্ষণ করে। এটিআর একটি নির্দিষ্ট লুকব্যাক সময়ের মধ্যে গড় অস্থিরতা উপস্থাপন করে। কৌশলটি আমাদের এটিআর সময়কাল (ডিফল্ট 14) এবং গুণক (ডিফল্ট 2) সেট করতে দেয়। সিস্টেমটি প্রবেশের সময় এটিআর মান গণনা করে, তারপরে এটি সেট গুণক দ্বারা স্টপ দূরত্ব হিসাবে গুণ করে।
উদাহরণস্বরূপ, যদি প্রবেশের পরে এটিআর 50 পয়েন্ট হয় এবং গুণকটি 2 এ সেট করা থাকে তবে স্টপ দূরত্ব 100 পয়েন্ট হবে। যদি দাম 100 পয়েন্টের বেশি চলে যায় তবে স্টপ লস অর্ডারটি ট্রিগার হবে। এটি অত্যধিক ক্ষতি এড়াতে সময়মত স্টপ লসকে অনুমতি দেয়।
কৌশলটি প্রবণতা নির্ধারণের বিষয়টিও বিবেচনা করে। দীর্ঘ স্টপ লস শুধুমাত্র তখনই সক্ষম হয় যখন ক্রয় সংকেত একটি আপসোর্সিং প্রবণতার সাথে মেলে। সংক্ষিপ্ত স্টপ লস একটি ডাউনসোর্সিং প্রবণতার সাথে মেলে।
স্টপ লস লাইনগুলি চার্টে প্রদর্শিত হয় যাতে আমরা এগুলি রিয়েল টাইমে যাচাই করতে পারি। যখন স্টপ লস শর্তগুলি ট্রিগার করা হয়, সংশ্লিষ্ট অবস্থানগুলি স্বয়ংক্রিয়ভাবে সিস্টেম দ্বারা বন্ধ হয়ে যায়।
এই কৌশলটির সবচেয়ে বড় সুবিধা হ'ল এটি গতিশীলভাবে স্টপ লস দূরত্ব সামঞ্জস্য করে এবং বাজারের অস্থিরতার পরিবর্তনের ভিত্তিতে স্বয়ংক্রিয়ভাবে ঝুঁকি এক্সপোজার পরিবর্তন করে। যখন অস্থিরতা প্রসারিত হয়, স্টপ লস দূরত্বও বৃদ্ধি পায়, স্টপ লসের সম্ভাবনা হ্রাস পায়। কম অস্থিরতার বাজারে, স্টপ দূরত্ব হ্রাস পায়।
স্থির স্টপ লস দূরত্বের তুলনায়, এই পদ্ধতিটি ট্রেডের ভিত্তিতে কার্যকরভাবে ক্ষতি নিয়ন্ত্রণ করে এবং প্রবণতা অনুসরণ করে। এটি লাভের পাশাপাশি ঝুঁকি পরিচালনা নিশ্চিত করে।
উপরন্তু, প্রবণতা নির্ধারণের সাথে মিলিত, এই ধরনের স্টপ লস পদ্ধতিগুলি একীকরণ অঞ্চলে whipsaws দ্বারা বন্ধ হওয়ার সম্ভাবনা হ্রাস করতে পারে।
এই কৌশলটির মূল ঝুঁকি হল একটি পজিশনের সময় স্বল্পমেয়াদে দামের প্রত্যাহারের সম্ভাবনা, যা স্টপ লসকে ট্রিগার করে। বিশেষত যদি এটিআর সময়কাল খুব ছোট হয়, স্টপ দূরত্বগুলি স্বল্পমেয়াদী ওঠানামাগুলির প্রভাবকে পুরোপুরি ফিল্টার করতে পারে না।
আরেকটি ঝুঁকি হ'ল দামগুলি হিংস্র গতিতে স্টপ লস স্তরের মধ্য দিয়ে ফাঁক হতে পারে। এর জন্য বৃহত্তর ATR গুণক সেটিং প্রয়োজন হবে, তবে এর অর্থ হ'ল লাভের সম্ভাবনাও হ্রাস পাবে।
অবশেষে, কৌশলটি এটিআর মানগুলিতে ঘন্টা পরে এবং প্রিমার্কেট ট্রেডিংয়ের প্রভাব বিবেচনা করে না। এর ফলে খোলা বা বন্ধের সময় এটিআর ডেটা সঠিকভাবে গণনা করা যায় না।
কৌশলটি বেশ কয়েকটি দিক থেকে অপ্টিমাইজ করা যেতে পারেঃ
ATR সময়ের পরামিতিগুলি অপ্টিমাইজ করুন এবং বিভিন্ন বাজারের জন্য সেরা সমন্বয়গুলি পরীক্ষা করুন
রিটার্নের দিক থেকে স্থির বনাম গতিশীল এটিআর গুণকগুলির তুলনা করুন
এটিআর গণনাতে অপারেশন ডেটা অন্তর্ভুক্ত করুন
এটিআর শর্তাবলী সেট করুনঃ এটিআর নির্দিষ্ট স্তরে পৌঁছলে কেবলমাত্র স্টপগুলি সক্ষম করুন, কম অস্থিরতার পরিবেশে অপ্রয়োজনীয় স্টপগুলি এড়ানো
আরও ফিল্টার অন্তর্ভুক্ত করুনঃ প্রধান প্রবণতা, ভলিউম / গতির সূচক ইত্যাদি
বেস্ট এটিআর স্টপ মাল্টিপল স্ট্র্যাটেজি গতিশীলভাবে স্টপ দূরত্ব সামঞ্জস্য করে প্রবণতা অনুসরণ এবং ঝুঁকি নিয়ন্ত্রণকে কার্যকরভাবে ভারসাম্য করে। স্থির স্টপগুলির তুলনায়, এটি কার্যকরভাবে ক্ষতির সীমাবদ্ধতার সাথে লাভের সম্ভাবনা নিশ্চিত করে।
অবশ্যই কিছু ঝুঁকি রয়েছে, যেমন মূল্যের ফাঁক এবং অত্যধিক সংবেদনশীল স্টপ। একাধিক মাত্রায় আরও অপ্টিমাইজেশন স্থিতিশীলতা এবং রিটার্ন উন্নত করতে পারে।
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //@author=Daveatt //This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ SystemName = "BEST ATR Stop Multiple Strategy" TradeId = "BEST" InitCapital = 100000 InitPosition = 100 InitCommission = 0.075 InitPyramidMax = 1 CalcOnorderFills = true CalcOnTick = true DefaultQtyType = strategy.fixed DefaultQtyValue = strategy.fixed Precision = 2 Overlay=true strategy(title=SystemName, shorttitle=SystemName, overlay=Overlay ) fastSMAperiod = input(defval=15, title='Fast SMA', type=input.integer, minval=2, step=1) slowSMAperiod = input(defval=45, title='Slow SMA', type=input.integer, minval=2, step=1) src = close // Calculate moving averages fastSMA = sma(src, fastSMAperiod) slowSMA = sma(src, slowSMAperiod) // Calculate trading conditions enterLong = crossover(fastSMA, slowSMA) enterShort = crossunder(fastSMA, slowSMA) // trend states since_buy = barssince(enterLong) since_sell = barssince(enterShort) buy_trend = since_sell > since_buy sell_trend = since_sell < since_buy is_signal = enterLong or enterShort // get the entry price entry_price = valuewhen(enterLong or enterShort, src, 0) // Plot moving averages plot(series=fastSMA, color=color.teal) plot(series=slowSMA, color=color.orange) // Plot the entries plotshape(enterLong, style=shape.circle, location=location.belowbar, color=color.green, size=size.small) plotshape(enterShort, style=shape.circle, location=location.abovebar, color=color.red, size=size.small) /////////////////////////////// //======[ Trailing STOP ]======// /////////////////////////////// // use SL? useSL = input(true, "Use stop Loss") // ATR multiple Stop stop_atr_length = input(14,title="ATR Length", minval=1, type=input.integer) stop_atr_mult = input(2,title="ATR Multiple", minval=0.05, step=0.1, type=input.float) // Global STOP stop_price = 0.0, stop_price := nz(stop_price[1]) // STOP ATR var stop_atr = 0.0 var entry_stop_atr = 0.0 stop_atr := nz(atr(stop_atr_length)) if enterLong or enterShort entry_stop_atr := stop_atr * stop_atr_mult // display the ATR value multiple plotshape(enterLong, title='ATR Long Stop value', style=shape.labelup, location=location.bottom, color=color.green, transp=0, text='', textcolor=color.navy, editable=true, size=size.small, show_last=1, size=size.small) // var label atr_long_label = na // var label atr_short_label = na lapos_y_entry_up = lowest(30) lapos_y_entry_dn = highest(30) // text_label = "ATR value: " + tostring(stop_atr, '#.#') + "\n\nATR Multiple value: " + tostring(entry_stop_atr, '#.#') // if enterLong // label.delete(atr_long_label) // atr_long_label := label.new(bar_index, lapos_y_entry_up, text=text_label, // xloc=xloc.bar_index, yloc=yloc.price, color=color.green, style=label.style_labelup, textcolor=color.white, // size=size.normal) // if enterShort // label.delete(atr_short_label) // atr_short_label := label.new(bar_index, lapos_y_entry_dn, text=text_label, // xloc=xloc.bar_index, yloc=yloc.price, color=color.red, style=label.style_labeldown, textcolor=color.black, // size=size.normal) // Determine trail stop loss prices longStopPrice = 0.0, shortStopPrice = 0.0 longStopPrice := if useSL and buy_trend stopValue = entry_price - entry_stop_atr else 0 shortStopPrice := if useSL and sell_trend stopValue = entry_price + entry_stop_atr else 999999 ////////////////////////////////////////////////////////////////////////////////////////// //*** STOP LOSS HIT CONDITIONS TO BE USED IN ALERTS ***// ////////////////////////////////////////////////////////////////////////////////////////// cond_long_stop_loss_hit = useSL and buy_trend and crossunder(low, longStopPrice[1]) cond_short_stop_loss_hit = useSL and sell_trend and crossover(high, shortStopPrice[1]) // Plot stop loss values for confirmation plot(series=useSL and buy_trend and low >= longStopPrice ? longStopPrice : na, color=color.fuchsia, style=plot.style_cross, linewidth=2, title="Long Trail Stop") plot(series=useSL and sell_trend and high <= shortStopPrice ? shortStopPrice : na, color=color.fuchsia, style=plot.style_cross, linewidth=2, title="Short Trail Stop") close_long = cond_long_stop_loss_hit close_short = cond_short_stop_loss_hit // Submit entry orders strategy.entry(TradeId + " L", long=true, when=enterLong) strategy.close(TradeId + " L", when=close_long) //if (enterShort) strategy.entry(TradeId + " S", long=false, when=enterShort) strategy.close(TradeId + " S", when=close_short)