এই কৌশলটির মূল ধারণা হ'ল এটিআর সূচকের উপর ভিত্তি করে দীর্ঘ এবং সংক্ষিপ্ত স্টপ-লস লাইনগুলি গণনা করা। এটি যখন দাম এই স্টপ-লস লাইনগুলি ভেঙে যায় তখন এটি ট্রেডিং সংকেত উত্পন্ন করে। এটিতে প্রবণতা ট্র্যাকিং এবং দোলন ক্যাপচার উভয় ক্ষমতা রয়েছে।
কৌশলটি দীর্ঘ এবং সংক্ষিপ্ত স্টপ-লস লাইন গণনা করার জন্য N সময়ের ATR গুণিত একটি সহগ ব্যবহার করে। নির্দিষ্ট গণনার সূত্রগুলি নিম্নরূপঃ
Long Stop = Highest Price - ATR * Coefficient
Short Stop = Lowest Price + ATR * Coefficient
এটি যখন দাম বেড়ে যায় এবং দীর্ঘ স্টপ-লস লাইনটি ভেঙে যায় এবং যখন দাম পড়ে এবং সংক্ষিপ্ত স্টপ-লস লাইনটি ভেঙে যায় তখন এটি দীর্ঘ হয়। দীর্ঘ বা সংক্ষিপ্ত হওয়ার পরে, এটি স্টপ-লস লাইনগুলি সরানোর জন্য রিয়েল টাইমে মূল্যের হ্রাসকে ট্র্যাক করবে।
স্টপ-লস স্তর হিসাবে এটিআর ব্যান্ড ব্যবহার করে, এই পদ্ধতিটি স্টপ-লস ঝুঁকি নিশ্চিত করার সময় মূল্যের প্রবণতা পুরোপুরি ক্যাপচার করতে পারে। এটি যখন মূল্যের উল্লেখযোগ্য অগ্রগতি হয় তখন সংকেত তৈরি করে, যা কার্যকরভাবে মিথ্যা ব্রেকআউটগুলি ফিল্টার করতে পারে।
এই কৌশলটির সবচেয়ে বড় সুবিধা হল যে এটি ঝুঁকি নিয়ন্ত্রণের সময় মূল্যের প্রবণতা ক্যাপচার করার জন্য স্বয়ংক্রিয়ভাবে স্টপ-লস স্তরটি সামঞ্জস্য করতে পারে। নির্দিষ্ট সুবিধাগুলি নিম্নরূপঃ
ATR সূচক ভিত্তিক ফ্লোটিং স্টপ-লসটি বাজারের অস্থিরতা অনুযায়ী স্টপ-লস পরিসীমা সামঞ্জস্য করতে পারে যাতে একক ক্ষতি কার্যকরভাবে নিয়ন্ত্রণ করা যায়।
সিগন্যাল উৎপন্ন করার জন্য একটি উদ্ভাবনী পদ্ধতি গ্রহণ করা কিছু শব্দ ফিল্টার করতে পারে এবং শীর্ষ এবং নীচে তাড়া করা এড়াতে পারে।
দামের ওঠানামা ট্র্যাক করার জন্য স্টপ-লস লাইনগুলির রিয়েল-টাইম সমন্বয় স্টপ-লসকে খুব বেশি শিথিল হতে বাধা দেয় এবং আরও লাভকে লক করে।
কৌশলটি কিছু ঝুঁকিও বহন করে, প্রধানত স্টপ-লস স্তর এবং সংকেত উত্পাদন সেটিংয়ে কেন্দ্রীভূত। নির্দিষ্ট ঝুঁকি পয়েন্টগুলি হলঃ
ভুল এটিআর চক্র এবং সহগগুলি অত্যধিক বিস্তৃত বা সংকীর্ণ স্টপ-লস হতে পারে।
অগ্রগতি সংকেত পদ্ধতি প্রাথমিক প্রবণতা সুযোগ মিস করতে পারে।
ট্রেন্ড শেষ হওয়ার সময় স্টপ-লস ট্র্যাকিংয়ে কিছু বিলম্ব হতে পারে, যা পুরোপুরি বেরিয়ে আসতে পারে না।
প্রতিরোধমূলক ব্যবস্থাগুলি মূলত স্টপ-লসকে আরও যুক্তিসঙ্গত করার জন্য পরামিতিগুলি সামঞ্জস্য করা বা প্রবণতা এবং সংকেতগুলি নির্ধারণের জন্য অন্যান্য সূচকগুলির সাথে সহায়তা করা।
কৌশলটি নিম্নলিখিত দিকগুলিতে আরও অনুকূলিত করা যেতে পারেঃ
ঝুঁকি নিয়ন্ত্রণের জন্য দ্বিতীয় স্তরের স্টপ-লস সেট করুন।
প্রবণতা নির্ধারণ এবং সংকেত মান উন্নত করার জন্য অন্যান্য সূচক একত্রিত করুন।
প্রবণতা অব্যাহত থাকলে মুনাফা বাড়ানোর জন্য চলমান স্টপ-লাভ কৌশল যুক্ত করুন।
এটিআর চক্র এবং সহগ পরামিতিগুলিকে অপ্টিমাইজ করুন যাতে স্টপ-লস প্রকৃত মূল্যের ওঠানামা থেকে আরও কাছাকাছি হয়।
সামগ্রিকভাবে, এই কৌশলটি খুব ব্যবহারিক। এটি স্বয়ংক্রিয়ভাবে স্টপ-লস স্তর সামঞ্জস্য করে ঝুঁকিগুলি কার্যকরভাবে নিয়ন্ত্রণ করতে পারে, প্রবণতা ট্র্যাকিংয়ের মাধ্যমে ভাল মুনাফা অর্জন করে। আমরা এটিকে আরও স্থিতিশীল এবং বুদ্ধিমান করার জন্য বিদ্যমান ভিত্তিতে অন্যান্য বিশ্লেষণ পদ্ধতিগুলিকে একত্রিত করে কৌশলটি আরও অনুকূল এবং উন্নত করতে পারি।
/*backtest start: 2024-01-04 00:00:00 end: 2024-02-03 00:00:00 period: 1h 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/ // © melihtuna //@version=4 strategy("Chandelier Exit - Strategy",shorttitle="CE-STG" , overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency=currency.USD, commission_value=0.03, commission_type=strategy.commission.percent) length = input(title="ATR Period", type=input.integer, defval=22) mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=false) useClose = input(title="Use Close Price for Extremums ?", type=input.bool, defval=true) highlightState = input(title="Highlight State ?", type=input.bool, defval=true) atr = mult * atr(length) longStop = (useClose ? highest(close, length) : highest(length)) - atr longStopPrev = nz(longStop[1], longStop) longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = (useClose ? lowest(close, length) : lowest(length)) + atr shortStopPrev = nz(shortStop[1], shortStop) shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop var int dir = 1 dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir var color longColor = color.green var color shortColor = color.red longStopPlot = plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor) buySignal = dir == 1 and dir[1] == -1 plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0) plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0) shortStopPlot = plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor) sellSignal = dir == -1 and dir[1] == 1 plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0) plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0) midPricePlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0, display=display.none, editable=false) longFillColor = highlightState ? (dir == 1 ? longColor : na) : na shortFillColor = highlightState ? (dir == -1 ? shortColor : na) : na fill(midPricePlot, longStopPlot, title="Long State Filling", color=longFillColor) fill(midPricePlot, shortStopPlot, title="Short State Filling", color=shortFillColor) long_short = input(true, "Long-Short",type=input.bool, group="Strategy Settings") start = input(timestamp("2019-01-01"), "Date", type=input.time, group="Strategy Settings") finish = input(timestamp("2025-01-01"), "Date", type=input.time, group="Strategy Settings") window() => true slRatio=input(5, "Manuel Stop Loss Ratio", type=input.float, minval=0, group="Strategy Settings") tpRatio=input(20, "Take Profit Ratio", type=input.float, minval=0, group="Strategy Settings") tsStartRatio=input(10, "Trailing Stop Start Ratio", type=input.float, minval=0, group="Strategy Settings") tsRatio=input(5, "Trailing Stop Ratio", type=input.float, minval=1, group="Strategy Settings") lastBuyPrice = strategy.position_avg_price diffHiPriceRatio = (high-lastBuyPrice)/lastBuyPrice*100 diffLoPriceRatio = (close-lastBuyPrice)/lastBuyPrice*100 posHiRatio=0.0 posHiRatio:= strategy.position_size > 0 ? diffHiPriceRatio > posHiRatio[1] ? diffHiPriceRatio : posHiRatio[1] : 0 s_diffHiPriceRatio = (low-lastBuyPrice)/lastBuyPrice*100 s_diffLoPriceRatio = (close-lastBuyPrice)/lastBuyPrice*100 s_posHiRatio=0.0 s_posHiRatio:= strategy.position_size < 0 ? s_diffLoPriceRatio < s_posHiRatio[1] ? s_diffLoPriceRatio : s_posHiRatio[1] : 0 strategy.entry("LONG", strategy.long, when = window() and buySignal) strategy.close("LONG", when = window() and sellSignal) strategy.close("LONG", when = diffLoPriceRatio<(slRatio*(-1)), comment="STOP-LONG") strategy.close("LONG", when = diffHiPriceRatio>tpRatio, comment="TAKE-PROFIT-LONG") strategy.close("LONG", when = ((posHiRatio[1]>tsStartRatio) and (posHiRatio[1]-diffHiPriceRatio)>tsRatio), comment="TRAILING-STOP-LONG") if long_short strategy.entry("SHORT", strategy.short, when = window() and sellSignal) strategy.close("SHORT", when = window() and buySignal) strategy.close("SHORT", when = s_diffLoPriceRatio>(slRatio), comment="STOP-SHORT") strategy.close("SHORT", when = s_diffHiPriceRatio<(tpRatio*(-1)), comment="TAKE-PROFIT-SHORT") strategy.close("SHORT", when = ((s_posHiRatio[1]*(-1)>tsStartRatio) and ((s_posHiRatio[1]-s_diffLoPriceRatio))*(-1)>tsRatio), comment="TRAILING-STOP-SHORT")