اس حکمت عملی میں ولیمز فریکٹل اشارے کا استعمال کیا گیا ہے تاکہ قیمت کی اونچائی اور کم کی نشاندہی کی جاسکے اور ABCD شکل کے ساتھ مل کر رجحان کی سمت کا فیصلہ کیا جاسکے ، جس کے بعد رجحان کی تصدیق کے بعد داخلہ لیا گیا ، تاکہ مختصر لائن رجحانات سے فائدہ اٹھایا جاسکے۔
ولیمز فریکٹل اشارے کا استعمال کرتے ہوئے قیمتوں کی اونچائی اور کم کی نشاندہی کریں ، مختلف شکلوں کے مطابق فیصلہ کریں کہ آیا یہ بیل مارکیٹ کی ABCD شکل ہے یا ریچھ مارکیٹ کی ABCD شکل ہے۔
ABCD شکل کا فیصلہ کرنے کا معیار:
اے بی اور سی ڈی کے درمیان فاصلہ قریب ہے ، بی سی اور سی ڈی کے درمیان فاصلہ تناسب کی ضرورت کو پورا کرتا ہے ((0.382-0.886 اور 1.13-2.618 کے درمیان))
D پوائنٹ سے کم C پوائنٹ بیل مارکیٹ کی شکل ہے ، D پوائنٹ سے زیادہ C پوائنٹ ریچھ مارکیٹ کی شکل ہے۔
بارسنس فنکشن کے ذریعہ ، موجودہ مجموعی رجحان کی سمت کا اندازہ لگانے کے لئے ، پچھلے سمت کا فریکٹل موجودہ سے قریب ترین ہے۔
ABCD فارمیٹ کی شناخت کرتے وقت زیادہ / کم کرنے کے لئے داخل ہوں ، اور اسٹاپ نقصان اور اسٹاپ کو ترتیب دیں ، جس میں شارٹ لائن رجحانات کو ٹریک کریں۔
ولیمز فریکٹل اشارے کے معاون فیصلے کا استعمال کرتے ہوئے ، موڑ کے مقامات کو زیادہ درست طریقے سے پہچانا جاسکتا ہے۔
ABCD شکل کا فیصلہ کرنے کا معیار سادہ ، قابل اعتماد اور پروگرام کرنے میں آسان ہے۔
بارسنسی فنکشن کے ساتھ مل کر بڑے رجحان کی سمت کا تعین کرنے کے لئے ، جعلی توڑ سے ہونے والے نقصان کو مؤثر طریقے سے کم کیا جاسکتا ہے۔
اسٹاپ نقصان اسٹاپ سیٹ کرنے کے بعد ، آپ کو ٹریکنگ میں مختصر لائن رجحانات سے فائدہ اٹھانا ہوگا۔
Williams Fractal کے پیچھے رہ گیا ہے، اور اس کے نتیجے میں ممکنہ طور پر نقصان پہنچا ہے.
درمیانی شارٹ لائن پر متعدد اوورلیپڈ اے بی سی ڈی شکلیں موجود ہیں ، جو شناخت کی غلطی کا سبب بن سکتی ہیں۔
جب بڑے رجحانات کا اندازہ درست نہیں ہوتا ہے تو ، سینٹ اور شارٹ لائن کا کاروبار آسانی سے قید ہوجاتا ہے۔
نقصان کی روک تھام کی ترتیب بہت چھوٹی ہے اور اس کی وجہ سے ٹکرانے کا خطرہ ہے ، اور اس کی ترتیب بہت بڑی ہے جس کی وجہ سے اس کا پتہ لگانے میں بہتری نہیں آتی ہے۔
بہتر بنانے کے طریقوں کا موازنہ:
ٹرانسمیشن پوائنٹس کو زیادہ مؤثر طریقے سے شناخت کرنے کے طریقوں کو تلاش کرنے کے لئے معاون فیصلے کے لئے دوسرے اشارے استعمال کرنے کی کوشش کی جا سکتی ہے.
ABCD شکل کے پیرامیٹرز کو بہتر بنائیں تاکہ فیصلے زیادہ سخت اور قابل اعتماد ہوں۔
بڑے رجحانات کا اندازہ لگانے کے طریقوں کو بہتر بنانا ، بڑے رجحانات کے غلط اندازے سے بچنے کے لئے۔
مختلف سٹاپ نقصان سٹاپ تناسب کو ٹیسٹ کریں اور بہترین سٹاپ نقصان سٹاپ پوائنٹ تلاش کریں۔
میکڈ ، کے ڈی جے ، اور دیگر اشارے کے ساتھ رجحانات کا اندازہ لگانے کے لئے کوشش کی جاسکتی ہے تاکہ زیادہ درست داخلے کا وقت تلاش کیا جاسکے۔
مختلف نسلوں کے لئے مختلف سائیکلوں کے مطابق پیرامیٹرز کو بہتر بنایا جاسکتا ہے تاکہ اس نسل کے لئے موزوں ترین سائیکل کو روکنے کے لئے روک تھام کی حد کو تلاش کیا جاسکے۔
مارکیٹ میں تبدیلیوں کے مطابق بہتر بنانے کے لئے ایک مکمل سائیکل لے لو، بہترین پیرامیٹرز کا مجموعہ تلاش کریں.
اسٹریٹجی کی استحکام کو بہتر بنانے کے لئے داخلہ سگنل کو فلٹر کرنے والے اشارے جیسے مساوی لائنوں کو جوڑا جاسکتا ہے۔
مشین لرننگ الگورتھم کو متعارف کرایا جاسکتا ہے تاکہ شناخت کی درستگی کو بہتر بنانے کے لئے زیادہ سے زیادہ ڈیٹا ٹریننگ ماڈل استعمال کیے جاسکیں۔
اس حکمت عملی کا مجموعی نظریہ واضح اور قابل اعتماد ہے ، جس میں ولیمز فریکٹل اشارے اور اے بی سی ڈی شکل کے فیصلے میں شارٹ لائن رجحان کی سمت کا استعمال کیا گیا ہے ، پھر رجحان فلٹرنگ اور اسٹاپ نقصان کی روک تھام کی ترتیب کے ساتھ رجحان سے باخبر رہنے سے فائدہ اٹھایا گیا۔ حکمت عملی کو بہتر بنانے کے لئے بہت زیادہ گنجائش موجود ہے ، جس میں انٹری سگنل ، پیرامیٹرز کی اصلاح ، رجحان کا فیصلہ وغیرہ سے بہتر بنایا جاسکتا ہے ، تاکہ حکمت عملی مختلف مارکیٹ کے ماحول کے لئے موزوں ہو۔ مجموعی طور پر ، اس حکمت عملی کو ایک discretionary + quant سے ملحق حکمت عملی کے ماڈل کے طور پر استعمال کیا جاسکتا ہے۔
/*backtest
start: 2023-09-16 00:00:00
end: 2023-09-23 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version=4
// @author=Daveatt - BEST
// ABCD Pattern Strat
StrategyName = "BEST ABCD Pattern Strategy"
ShortStrategyName = "BEST ABCD Pattern Strategy"
// strategy(title=StrategyName, shorttitle=ShortStrategyName, overlay=true,
// pyramiding=2, default_qty_value=100, precision=7, currency=currency.USD,
// commission_value=0.2,commission_type=strategy.commission.percent, initial_capital=1000000,
// default_qty_type=strategy.fixed)
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
//////////////////////////
//* Profit Component *//
//////////////////////////
//////////////////////////// MinTick ///////////////////////////
fx_pips_value = syminfo.type == "forex" ? syminfo.mintick*10 : 1
input_tp_pips = input(100, "Backtest Profit Goal (in USD)",minval=0)*fx_pips_value
input_sl_pips = input(20, "Backtest STOP Goal (in USD)",minval=0)*fx_pips_value
tp = buy_trend? long_entry_price + input_tp_pips : short_entry_price - input_tp_pips
sl = buy_trend? long_entry_price - input_sl_pips : short_entry_price + input_sl_pips
plot_tp = buy_trend and high[1] <= tp ? tp : sell_trend and low[1] <= tp ? tp : na
plot_sl = buy_trend and low[1] >= sl ? sl : sell_trend and high[1] >= sl ? sl : na
plot(plot_tp, title="TP", style=plot.style_circles, linewidth=3, color=color.blue)
plot(plot_sl, title="SL", style=plot.style_circles, linewidth=3, color=color.red)
longClose = isShort
shortClose = isLong
strategy.entry("Long", 1, when=isLong)
// strategy.close("Long", when=longClose )
strategy.exit("XL","Long", limit=tp, when=buy_trend, stop=sl)
strategy.entry("Short", 0, when=isShort)
// strategy.close("Short", when=shortClose )
strategy.exit("XS","Short", when=sell_trend, limit=tp, stop=sl)