اس حکمت عملی کا بنیادی خیال اے ٹی آر اشارے کی بنیاد پر طویل اور مختصر اسٹاپ نقصان کی لائنوں کا حساب لگانا ہے۔ جب قیمت ان اسٹاپ نقصان کی لائنوں سے ٹوٹ جاتی ہے تو یہ تجارتی سگنل تیار کرتا ہے۔ اس میں رجحان کی پیروی اور اتار چڑھاؤ کی گرفتاری دونوں صلاحیتیں ہیں۔
اس حکمت عملی میں طویل اور مختصر سٹاپ نقصان کی لائنوں کا حساب لگانے کے لئے N مدت کے ATR کو ایک ضارب سے ضرب دیا جاتا ہے۔ حساب کتاب کے مخصوص فارمولے مندرجہ ذیل ہیں:
Long Stop = Highest Price - ATR * Coefficient
Short Stop = Lowest Price + ATR * Coefficient
جب قیمت بڑھتی ہے اور طویل اسٹاپ نقصان کی لائن کو توڑتی ہے تو یہ طویل ہوجاتا ہے ، اور جب قیمت گرتی ہے اور مختصر اسٹاپ نقصان کی لائن کو توڑتی ہے تو یہ مختصر ہوجاتا ہے۔ طویل یا مختصر جانے کے بعد ، یہ اسٹاپ نقصان کی لائنوں کو منتقل کرنے کے لئے حقیقی وقت میں قیمت میں اتار چڑھاؤ کو ٹریک کرے گا۔
اسٹاپ نقصان کی سطح کے طور پر اے ٹی آر بینڈ کا استعمال کرتے ہوئے ، یہ طریقہ اسٹاپ نقصان کے خطرے کو یقینی بناتے ہوئے قیمت کے رجحان کو مکمل طور پر پکڑ سکتا ہے۔ جب قیمت میں اہم پیشرفت ہوتی ہے تو یہ سگنل تیار کرتا ہے ، جو غلط خرابیوں کو مؤثر طریقے سے فلٹر کرسکتا ہے۔
اس حکمت عملی کا سب سے بڑا فائدہ یہ ہے کہ یہ خطرہ کو کنٹرول کرتے ہوئے قیمت کے رجحانات کو پکڑنے کے لئے اسٹاپ نقصان کی سطح کو خود بخود ایڈجسٹ کرسکتا ہے۔ مخصوص فوائد مندرجہ ذیل ہیں۔
اے ٹی آر اشارے پر مبنی فلوٹنگ اسٹاپ نقصان مارکیٹ میں اتار چڑھاؤ کے مطابق اسٹاپ نقصان کی حد کو ایڈجسٹ کر سکتا ہے تاکہ مؤثر طریقے سے واحد نقصان کو کنٹرول کیا جاسکے۔
سگنلز پیدا کرنے کے لیے ایک جدید طریقہ اپنانے سے کچھ شور کو فلٹر کیا جا سکتا ہے اور چوٹیوں اور نچلیوں کا پیچھا کرنے سے بچا جا سکتا ہے۔
قیمتوں میں اتار چڑھاؤ کو ٹریک کرنے کے لئے اسٹاپ نقصان کی لائنوں کی ریئل ٹائم ایڈجسٹمنٹ اسٹاپ نقصان کو بہت زیادہ لچکدار ہونے سے روکتی ہے اور زیادہ منافع میں تالے لگاتی ہے۔
اس حکمت عملی میں کچھ خطرات بھی شامل ہیں ، جو بنیادی طور پر اسٹاپ نقصان کی سطح اور سگنل کی تخلیق کے تعین میں مرکوز ہیں۔ مخصوص رسک پوائنٹس یہ ہیں:
غلط اے ٹی آر سائیکل اور گتانک بہت وسیع یا تنگ سٹاپ نقصان کا باعث بن سکتے ہیں۔
اختتامی سگنل کا طریقہ ابتدائی رجحان کے مواقع سے محروم ہوسکتا ہے.
رجحان کے اختتام کے دوران سٹاپ نقصان کی ٹریکنگ میں کچھ تاخیر ہوسکتی ہے، مکمل طور پر باہر نکلنے کے قابل نہیں.
اس کے برعکس، یہ اقدامات بنیادی طور پر پیرامیٹرز کو ایڈجسٹ کرنے کے لئے ہیں تاکہ سٹاپ نقصان زیادہ معقول ہو، یا رجحان اور سگنل کا تعین کرنے کے لئے دیگر اشارے کے ساتھ مدد کریں.
اسٹریٹیجی کو مندرجہ ذیل پہلوؤں میں مزید بہتر بنایا جاسکتا ہے:
خطرات کو مزید کنٹرول کرنے کے لیے دوسری سطح کا سٹاپ نقصان ترتیب دیں۔
رجحان کا تعین کرنے اور سگنل کے معیار کو بہتر بنانے کے لئے دیگر اشارے کو یکجا کریں.
جب رجحان مزید جاری رہتا ہے تو منافع میں اضافہ کرنے کے لئے اسٹاپ منافع کی حکمت عملیوں کو منتقل کریں.
اے ٹی آر سائیکل اور ضابطہ کار پیرامیٹرز کو بہتر بنائیں تاکہ اسٹاپ نقصان کو اصل قیمت کے اتار چڑھاؤ کے قریب بنایا جاسکے۔
مجموعی طور پر ، یہ حکمت عملی بہت عملی ہے۔ یہ اسٹاپ نقصان کی سطح کو خود بخود ایڈجسٹ کرکے خطرات کو مؤثر طریقے سے کنٹرول کرسکتا ہے ، جبکہ ٹرینڈ ٹریکنگ کے ذریعے اچھے منافع حاصل کرسکتا ہے۔ ہم موجودہ بنیاد پر دیگر تجزیاتی طریقوں کو جوڑ کر حکمت عملی کو مزید بہتر اور بہتر بنا سکتے ہیں تاکہ اسے زیادہ مستحکم اور ذہین بنایا جاسکے۔
/*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")