
اس حکمت عملی کا نام ہے بہترین ABCD شکل ٹریڈنگ حکمت عملی (stop loss tracking and stop stop tracking کے ساتھ) یہ ایک مقداری حکمت عملی ہے جس میں ٹریڈنگ آپریشنز کو واضح ABCD قیمت کی شکل کے ماڈل پر مبنی بنایا گیا ہے۔ اس کا بنیادی خیال یہ ہے کہ ایک بار جب مکمل ABCD شکل کا ماڈل پہچانا جاتا ہے تو ، شکل کی سمت کے مطابق زیادہ جگہ لے لی جائے ، اور پوزیشنوں کو منظم کرنے کے لئے اسٹاپ نقصان اور اسٹاپ ٹریکنگ ترتیب دی جائے۔
برن معاون فیصلے کا استعمال کرتے ہوئے قیمتوں کے اوپر اور نیچے ٹائپنگ پوائنٹس کی شناخت کریں ، جس سے قیمتوں کا زیگ زیگ منحنی خطوط ملتا ہے۔
زیگ زیگ منحنی خطوط پر مکمل ABCD شکل ماڈل کی شناخت کے لئے ، A ، B ، C اور D چاروں مقامات پر ایک خاص تناسب کا رشتہ پورا کرنا ضروری ہے۔ اہل ABCD شکل کی شناخت کے بعد ، زیادہ کریں یا خالی کریں۔
زیادہ لیک کرنے کے بعد ، خطرے پر قابو پانے کے لئے اسٹاپ ٹریکنگ ترتیب دیں۔ اسٹاپ نقصان شروع ہونے پر فکسڈ اسٹاپ کا استعمال کریں ، اور جب منافع کا ایک خاص تناسب حاصل ہوجائے تو اسے منافع میں سے کچھ کو لاک کرنے کے لئے متحرک اسٹاپ میں تبدیل کریں۔
اسی طرح ، اسٹاپ اسٹاپ لائن میں ٹریکنگ کی ترتیب بھی ہے تاکہ کافی منافع حاصل کرنے کے بعد بروقت اسٹاپ ہوجائے ، تاکہ منافع کی واپسی سے بچا جاسکے۔ اسٹاپ اسٹاپ ٹریکنگ بھی دو مراحل میں تقسیم ہے ، پہلے فکسڈ اسٹاپ کا استعمال کرتے ہوئے کچھ منافع حاصل کریں ، اور پھر قیمتوں کو ٹریک کرنے کے لئے موبائل اسٹاپ پر جائیں۔
جب قیمت نے اسٹاپ نقصان یا اسٹاپ ٹرگر کو متحرک کیا تو ، پوزیشن کو ختم کریں اور ایک تجارتی سائیکل مکمل کریں۔
برن معاون فیصلے کا استعمال کرتے ہوئے زیگ زیگ وکر کی شناخت ، روایتی زیگ زیگ وکر کی واپسی کے مسئلے سے گریز کرتے ہوئے ، تجارتی سگنل کو زیادہ قابل اعتماد بناتا ہے۔
اے بی سی ڈی فارمیٹ ٹریڈنگ ماڈل پختہ مستحکم ہے ، اور اس میں بہت سارے تجارتی مواقع ہیں۔ اور اے بی سی ڈی فارمیٹ کی سمت واضح ہے ، جس سے مارکیٹ میں داخل ہونے کی سمت کا اندازہ لگانا آسان ہے۔
دو مرحلے میں اسٹاپ اسٹاپ ٹریکنگ کا تعین کرنے سے آپ کو خطرہ پر قابو پانے اور منافع حاصل کرنے میں مدد ملتی ہے۔ موبائل اسٹاپ اسٹاپ سے حکمت عملی میں زیادہ لچک ملتی ہے۔
حکمت عملی کے پیرامیٹرز کو مناسب طریقے سے ڈیزائن کیا گیا ہے ، اسٹاپ اسٹاپ نقصان کا فیصد ، موبائل اسٹارٹ فیصد اپنی مرضی کے مطابق ہوسکتا ہے ، اور استعمال میں لچکدار ہے۔
یہ حکمت عملی کسی بھی قسم کے لئے استعمال کی جاسکتی ہے ، بشمول فاریکس ، کریپٹو کرنسی اور اسٹاک انڈیکس۔
اگرچہ ABCD کی شکل زیادہ واضح ہے ، لیکن تجارت کے مواقع نسبتا limited محدود ہیں ، جس کی وجہ سے کافی تجارت کی فراہمی کی ضمانت نہیں دی جاسکتی ہے۔
ہلچل کے حالات میں ، اس صورت میں ہوسکتا ہے کہ نقصان کی روک تھام کو کثرت سے متحرک کیا جائے۔ اس وقت نقصان کی روک تھام کی حد کو بڑھانے کے لئے پیرامیٹرز کو مناسب طریقے سے ایڈجسٹ کرنے کی ضرورت ہے۔
ٹریڈنگ کی اقسام کی خود کی لیکویڈیٹی پر توجہ دینے کی ضرورت ہے۔ کم لیکویڈیٹی والے اشارے پر ، اسٹاپ نقصان کی روک تھام کو درست طریقے سے نافذ کرنا مشکل ہے۔
اس حکمت عملی میں ٹریڈنگ کے اخراجات کے بارے میں زیادہ حساس حکمت عملی شامل ہے جس میں کم فیس والے بروکرز اور اکاؤنٹس کا انتخاب کرنا شامل ہے۔
کچھ پیرامیٹرز کو بہتر بنانے کے لئے جاری رکھا جا سکتا ہے، مثال کے طور پر، متحرک سٹاپ اور سٹاپ کے لئے شروع کرنے کی شرائط کو بہتر بنانے کے لئے مزید ٹیسٹ کیا جا سکتا ہے.
دوسرے اشارے کے ساتھ مل کر ، زیادہ فلٹرنگ شرائط طے کی جاسکتی ہیں ، جس سے کچھ ایچ ڈبلیو شکلوں سے بچا جاسکتا ہے۔
مارکیٹ کے تین حصوں کے ڈھانچے کے بارے میں زیادہ سے زیادہ فیصلے کریں ، صرف تیسرے حصے میں تجارت کے مواقع تلاش کریں۔ اس سے حکمت عملی کی کامیابی کی شرح میں اضافہ ہوسکتا ہے۔
ابتدائی سرمایہ کاری کے سائز کو بہتر بنانے کے لئے ٹیسٹ کریں تاکہ ابتدائی سرمایہ کاری کی بہترین سطح کو تلاش کیا جاسکے۔ بہت بڑا بہت چھوٹا بہترین واپسی کی شرح حاصل کرنے کے لئے نقصان دہ ہے۔
اس کے علاوہ، آپ کو آپ کی حکمت عملی کے طویل مدتی استحکام کے لئے ضروری ہے. آپ کو آپ کی حکمت عملی کے طویل مدتی استحکام کے لئے ضروری ہے.
موبائل اسٹاپ / فولڈ اسٹارٹ شرائط اور سلائڈ پوائنٹ سائز کو بہتر بنانا جاری رکھیں تاکہ حکمت عملی پر عملدرآمد کی کارکردگی کو بہتر بنایا جاسکے۔ SETTINGS کی اصلاح کبھی ختم نہیں ہوتی۔
اس حکمت عملی کا بنیادی فیصلہ اور مارکیٹ میں جانے کے لئے اے بی سی ڈی قیمت کی شکل پر انحصار کرتا ہے۔ خطرے اور منافع کو منظم کرنے کے لئے دو مرحلے میں اسٹاپ نقصان کا سراغ لگانا۔ حکمت عملی نسبتا mature مستحکم ہے ، لیکن اس کی تجارت کی فریکوئنسی کم ہوسکتی ہے۔ فلٹرنگ کی شرائط میں اضافہ کرکے ہم زیادہ موثر تجارت کے مواقع حاصل کرسکتے ہیں۔ اس کے علاوہ ، پیرامیٹرز اور فنڈز کی پیمائش کو بہتر بنانے کے لئے جاری رکھنا حکمت عملی کی مستحکم منافع بخش صلاحیت کو مزید بڑھا سکتا ہے۔ مجموعی طور پر ، حکمت عملی واضح ہے ، سمجھنے میں آسان ہے ، اور یہ ایک مقدار کی تجارت کی حکمت عملی ہے جو گہری تحقیق اور اطلاق کے قابل ہے۔
/*backtest
start: 2024-02-11 00:00:00
end: 2024-02-18 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version=4
// @author=Daveatt - BEST
// ABCD Pattern Strat
StrategyName = "BEST ABCD Pattern Strategy (Trailing SL + TP)"
ShortStrategyName = "BEST ABCD Strategy (Trailing)"
strategy(title=StrategyName, shorttitle=ShortStrategyName, overlay=true )
filterBW = input(false, title="filter Bill Williams Fractals?")
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////// UTILITIES ///////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
// ||-----------------------------------------------------------------------------------------------------||
// ||--- Fractal Recognition Functions: ---------------------------------------------------------------||
isRegularFractal(mode, _high, _low) =>
ret = mode == 1 ? _high[4] < _high[3] and _high[3] < _high[2] and _high[2] > _high[1] and _high[1] > _high[0] :
mode == -1 ? _low[4] > _low[3] and _low[3] > _low[2] and _low[2] < _low[1] and _low[1] < _low[0] : false
isBWFractal(mode, _high, _low) =>
ret = mode == 1 ? _high[4] < _high[2] and _high[3] <= _high[2] and _high[2] >= _high[1] and _high[2] > _high[0] :
mode == -1 ? _low[4] > _low[2] and _low[3] >= _low[2] and _low[2] <= _low[1] and _low[2] < _low[0] : false
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
////////////////////////////// ABCD PATTERN ///////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
f_abcd()=>
_r = timeframe.period
_g = barmerge.gaps_off
_l = barmerge.lookahead_on
_high = high
_low = low
filteredtopf = filterBW ? isRegularFractal(1, _high, _low) : isBWFractal(1, _high, _low)
filteredbotf = filterBW ? isRegularFractal(-1, _high, _low) : isBWFractal(-1, _high, _low)
// ||--- ZigZag:
istop = filteredtopf
isbot = filteredbotf
topcount = barssince(istop)
botcount = barssince(isbot)
zigzag = (istop and topcount[1] > botcount[1] ? _high[2] :
isbot and topcount[1] < botcount[1] ? _low[2] : na)
x = valuewhen(zigzag, zigzag, 4)
a = valuewhen(zigzag, zigzag, 3)
b = valuewhen(zigzag, zigzag, 2)
c = valuewhen(zigzag, zigzag, 1)
d = valuewhen(zigzag, zigzag, 0)
xab = (abs(b-a)/abs(x-a))
xad = (abs(a-d)/abs(x-a))
abc = (abs(b-c)/abs(a-b))
bcd = (abs(c-d)/abs(b-c))
// ABCD Part
_abc = abc >= 0.382 and abc <= 0.886
_bcd = bcd >= 1.13 and bcd <= 2.618
_bull_abcd = _abc and _bcd and d < c
_bear_abcd = _abc and _bcd and d > c
_bull = _bull_abcd and not _bull_abcd[1]
_bear = _bear_abcd and not _bear_abcd[1]
[_bull, _bear, zigzag]
lapos_x = timenow + round(change(time)*12)
[isLong, isShort, zigzag] = f_abcd()
plot(zigzag, title= 'ZigZag', color=color.black, offset=-2)
plotshape(isLong, style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), size=size.normal, text="ABCD", textcolor=color.white)
plotshape(isShort, style=shape.labeldown, location=location.abovebar, color=color.new(color.maroon, 0), size=size.normal, text="ABCD", textcolor=color.white)
long_entry_price = valuewhen(isLong, close, 0)
short_entry_price = valuewhen(isShort, close, 0)
sinceNUP = barssince(isLong)
sinceNDN = barssince(isShort)
buy_trend = sinceNDN > sinceNUP
sell_trend = sinceNDN < sinceNUP
change_trend = (buy_trend and sell_trend[1]) or (sell_trend and buy_trend[1])
entry_price = buy_trend ? long_entry_price : short_entry_price
///////////////////////////////
//======[ Trailing STOP ]======//
///////////////////////////////
// use SL?
useSL = input(true, "Use stop Loss")
// Configure trail stop level with input
StopTrailPerc = input(title="Trail Loss (%)", type=input.float, minval=0.0, step=0.1, defval=3) * 0.01
// Will trigger the take profit trailing once reached
use_SL_Trigger = input(true, "Use stop Loss Trigger")
StopTrailTrigger = input(2.0, "SL Trigger (%)",minval=0,step=0.5,type=input.float) * 0.01
StopLossPriceTrigger = 0.0
StopLossPriceTrigger := if (use_SL_Trigger)
if buy_trend
entry_price * (1 + StopTrailTrigger)
else
entry_price * (1 - StopTrailTrigger)
else
-1
var SL_Trigger_Long_HIT = false
SL_Trigger_Long_HIT := useSL and use_SL_Trigger and buy_trend and high >= StopLossPriceTrigger
? true : SL_Trigger_Long_HIT[1]
var SL_Trigger_Short_HIT = false
SL_Trigger_Short_HIT := useSL and use_SL_Trigger and sell_trend and low <= StopLossPriceTrigger
? true : SL_Trigger_Short_HIT[1]
display_long_SL_trigger = useSL and buy_trend and use_SL_Trigger
and SL_Trigger_Long_HIT == false and StopLossPriceTrigger != -1
display_short_SL_trigger = useSL and sell_trend and use_SL_Trigger
and SL_Trigger_Short_HIT == false and StopLossPriceTrigger != -1
display_SL_trigger = display_long_SL_trigger or display_short_SL_trigger
plot(display_SL_trigger ? StopLossPriceTrigger : na, title='SLPriceTrigger', transp=0,
color=color.maroon, style=plot.style_circles, linewidth=3)
// Determine trail stop loss prices
longStopPrice = 0.0, shortStopPrice = 0.0
longStopPrice := if useSL and buy_trend
stopValue = low * (1 - StopTrailPerc)
max(stopValue, longStopPrice[1])
else
0
shortStopPrice := if useSL and sell_trend
stopValue = high * (1 + StopTrailPerc)
min(stopValue, shortStopPrice[1])
else
999999
//////////////////////////////////////////////////////////////////////////////////////////
//*** STOP LOSS HIT CONDITIONS ***//
//////////////////////////////////////////////////////////////////////////////////////////
cond_long_stop_loss_hit = useSL and buy_trend and crossunder(low, longStopPrice[1])
and (SL_Trigger_Long_HIT or use_SL_Trigger == false)
cond_short_stop_loss_hit = useSL and sell_trend and crossover(high, shortStopPrice[1])
and (SL_Trigger_Short_HIT or use_SL_Trigger == false)
// Plot stop loss values for confirmation
plot(series=useSL and buy_trend and low >= longStopPrice
and (SL_Trigger_Long_HIT or use_SL_Trigger == false)
? longStopPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Long Trail Stop")
plot(series=useSL and sell_trend and high <= shortStopPrice
and (SL_Trigger_Short_HIT or use_SL_Trigger == false)
? shortStopPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Short Trail Stop")
///////////////////////////////
//======[ Take Profit ]======//
///////////////////////////////
// Use TP?
useTP = input(true, "Use take profit")
// TP trailing
ProfitTrailPerc = input(1.0, "Trailing Profit (%)",minval=0,step=0.5,type=input.float) * 0.01
use_TP_Trigger = input(true, "Use Take Profit Trigger")
// Will trigger the take profit trailing once reached
takeProfitTrigger = input(3.0, "Take Profit Trigger (%)",minval=0,step=0.5,type=input.float) * 0.01
// ttp := ttp>tp ? tp : ttp
takeprofitPriceTrigger = 0.0
takeprofitPriceTrigger := if (use_TP_Trigger)
if (buy_trend)
entry_price * (1 + takeProfitTrigger)
else
entry_price * (1 - takeProfitTrigger)
else
-1
//plot(entry_price, title='entry_price', transp=100)
var TP_Trigger_Long_HIT = false
TP_Trigger_Long_HIT := useTP and use_TP_Trigger and buy_trend and high >= takeprofitPriceTrigger
? true : TP_Trigger_Long_HIT[1]
var TP_Trigger_Short_HIT = false
TP_Trigger_Short_HIT := useTP and use_TP_Trigger and sell_trend and low <= takeprofitPriceTrigger
? true : TP_Trigger_Short_HIT[1]
display_long_TP_trigger = useTP and buy_trend and TP_Trigger_Long_HIT == false
and takeprofitPriceTrigger != -1
display_short_TP_trigger = useTP and sell_trend and TP_Trigger_Short_HIT == false
and takeprofitPriceTrigger != -1
display_TP_trigger = display_long_TP_trigger or display_short_TP_trigger
//🔷🔷🔷
// @hugo: Will display the TP trigger as long as not hit
// once the TP trigger is hit, the TP trailing will activate
plot(display_TP_trigger ? takeprofitPriceTrigger : na, title='takeprofitPriceTrigger', transp=0, color=color.orange,
style=plot.style_cross, linewidth=3)
longTrailTP= 0.0, shortTrailTP = 0.0
// Trailing Profit
// Start trailing once trigger is reached
longTrailTP := if useTP and buy_trend
tpValue = high * (1 + ProfitTrailPerc)
max(tpValue, longTrailTP[1])
else
0
shortTrailTP := if useTP and sell_trend
tpValue = low * (1 - ProfitTrailPerc)
min(tpValue, shortTrailTP[1])
else
999999
//plot(longTrailTP, title='debug longTrailTP', transp=100)
//plot(shortTrailTP, title='debug shortTrailTP', transp=100)
//////////////////////////////////////////////////////////////////////////////////////////
//*** TRAILING TAKE PROFIT HIT CONDITIONS TO BE USED IN ALERTS ***//
//////////////////////////////////////////////////////////////////////////////////////////
//🔷🔷🔷
// @hugo: I use crossover/crossunder for the alerts to trigger the events only once
cond_long_trail_tp_hit = useTP and buy_trend and crossover(high, longTrailTP[1])
and (TP_Trigger_Long_HIT or use_TP_Trigger == false)
cond_short_trail_tp_hit = useTP and sell_trend and crossunder(low, shortTrailTP[1])
and (TP_Trigger_Short_HIT or use_TP_Trigger == false)
// 🔷🔷🔷
// Plot take profits values for confirmation
// Display the trailing TP until not hit
plot(series= useTP and buy_trend and high <= longTrailTP and
(TP_Trigger_Long_HIT or use_TP_Trigger == false) ? longTrailTP : na,
color=color.aqua, style=plot.style_circles,
linewidth=2, title="Long Trail TP")
plot(series= useTP and sell_trend and low >= shortTrailTP and
(TP_Trigger_Short_HIT or use_TP_Trigger == false) ? shortTrailTP : na,
color=color.aqua, style=plot.style_circles,
linewidth=2, title="Short Trail TP")
close_long = cond_long_trail_tp_hit or cond_long_stop_loss_hit
close_short = cond_short_trail_tp_hit or cond_short_stop_loss_hit
strategy.entry("Long", 1, when=isLong)
strategy.close("Long", when=close_long)
strategy.entry("Short", 0, when=isShort)
strategy.close("Short", when=close_short)
if change_trend
SL_Trigger_Long_HIT := false
SL_Trigger_Short_HIT := false
TP_Trigger_Long_HIT := false
TP_Trigger_Short_HIT := false