यह रणनीति विलियम्स फ्रैक्टल सूचकांक का उपयोग करती है जो कीमतों के उच्च और निम्न बिंदुओं की पहचान करती है, और एबीसीडी के साथ मिलकर प्रवृत्ति की दिशा का आकलन करती है, जो प्रवृत्ति की पुष्टि के बाद प्रवेश करती है, ताकि शॉर्ट-लाइन प्रवृत्ति को ट्रैक किया जा सके।
विलियम्स फ्रैक्टल सूचकांक का उपयोग करके कीमतों के उच्च और निम्न बिंदुओं की पहचान करें और विभिन्न रूपों के आधार पर निर्णय लें कि यह बैल बाजार का एबीसीडी रूप है या भालू बाजार का एबीसीडी रूप है।
एबीसीडी आकृति निर्णय मानदंडः
AB और CD के बीच की दूरी निकट है, BC और CD के बीच की दूरी कुछ अनुपात आवश्यकताओं को पूरा करती है ((0.382-0.886 और 1.13-2.618 के बीच) ।
D से कम C का अर्थ है बैल बाजार, D से अधिक C का अर्थ है भालू बाजार।
बारसिनस फ़ंक्शन के माध्यम से एक दिशा में पिछले एक फ्रैक्टल को वर्तमान में सबसे हाल की दूरी पर निर्धारित करें, ताकि वर्तमान में समग्र प्रवृत्ति की दिशा निर्धारित की जा सके।
ABCD पैटर्न की पहचान करते समय लॉग इन करें और स्टॉप और स्टॉप लॉस सेट करें, ट्रैक में शॉर्ट-लाइन ट्रेंड।
विलियम्स फ्रैक्टल सूचकांक का उपयोग करके निर्णय की सहायता से, मोड़ बिंदुओं की अधिक सटीक पहचान की जा सकती है।
एबीसीडी आकृति न्याय मानदंड सरल, विश्वसनीय और प्रोग्राम करने में आसान है।
बार्सिनेंस फंक्शन के साथ, यह पता लगाता है कि एक बड़ी प्रवृत्ति किस दिशा में है, जिससे झूठे ब्रेक के नुकसान को कम किया जा सकता है।
स्टॉप लॉस स्टॉपलॉस सेट करने के बाद ट्रैक में शॉर्ट लाइन ट्रेंड को ट्रैक कर सकते हैं।
विलियम्स फ्रैक्टल में देरी है, जिससे टर्नओवर से चूकने से नुकसान हो सकता है।
मध्य लघु रेखा पर कई अतिव्यापी एबीसीडी रूप हैं जो पहचान त्रुटि का कारण बन सकते हैं।
जब एक बड़ी प्रवृत्ति को सही ढंग से नहीं देखा जाता है, तो एक छोटा-मध्यम लेनदेन कैद हो सकता है।
यह बहुत छोटा है और इसे आसानी से मारा जा सकता है, और यह बहुत बड़ा है और इसे ट्रैक नहीं किया जा सकता।
अनुकूलन विधि:
अन्य मापदंडों का उपयोग करके निर्णय लेने के लिए परीक्षण किया जा सकता है, ताकि टर्नओवर को अधिक प्रभावी ढंग से पहचानने के तरीके की तलाश की जा सके।
एबीसीडी आकृति के लिए पैरामीटर का अनुकूलन, निर्णय को अधिक विश्वसनीय बनाता है।
महाप्रवृत्ति के आकलन के तरीकों को अनुकूलित करना, महाप्रवृत्ति के गलत आकलन को रोकना।
विभिन्न स्टॉप-स्टॉप अनुपातों का परीक्षण करें और सबसे अच्छा स्टॉप-स्टॉप पाएं।
अन्य संकेतकों जैसे कि MACD, KDJ आदि का उपयोग करके प्रवृत्ति का आकलन करने की कोशिश की जा सकती है, ताकि प्रवेश के समय को अधिक सटीक रूप से देखा जा सके।
विभिन्न किस्मों के लिए विभिन्न चक्रों के लिए पैरामीटर का अनुकूलन किया जा सकता है ताकि उस किस्म के चक्र के लिए सबसे उपयुक्त स्टॉप-लॉस स्टॉप पॉइंट पाया जा सके।
बाजार में परिवर्तन के आधार पर अनुकूलन के लिए एक पूर्ण चक्र ले सकते हैं, सबसे अच्छा पैरामीटर संयोजन की तलाश में।
इस रणनीति को स्थिरता बढ़ाने के लिए, प्रवेश संकेतों को फ़िल्टर करने के लिए समान रेखा जैसे संकेतकों को जोड़ा जा सकता है।
मशीन लर्निंग एल्गोरिदम को पेश किया जा सकता है ताकि पहचान की सटीकता में सुधार के लिए अधिक डेटा प्रशिक्षण मॉडल का उपयोग किया जा सके।
इस रणनीति के समग्र विचार स्पष्ट और विश्वसनीय है, विलियम्स 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)