मोमेंटम एबीसीडी पैटर्न रणनीति


निर्माण तिथि: 2023-09-24 13:08:28 अंत में संशोधित करें: 2023-09-24 13:08:28
कॉपी: 1 क्लिक्स: 736
1
ध्यान केंद्रित करना
1617
समर्थक

अवलोकन

यह रणनीति विलियम्स फ्रैक्टल सूचकांक का उपयोग करती है जो कीमतों के उच्च और निम्न बिंदुओं की पहचान करती है, और एबीसीडी के साथ मिलकर प्रवृत्ति की दिशा का आकलन करती है, जो प्रवृत्ति की पुष्टि के बाद प्रवेश करती है, ताकि शॉर्ट-लाइन प्रवृत्ति को ट्रैक किया जा सके।

रणनीति सिद्धांत

  1. विलियम्स फ्रैक्टल सूचकांक का उपयोग करके कीमतों के उच्च और निम्न बिंदुओं की पहचान करें और विभिन्न रूपों के आधार पर निर्णय लें कि यह बैल बाजार का एबीसीडी रूप है या भालू बाजार का एबीसीडी रूप है।

  2. एबीसीडी आकृति निर्णय मानदंडः

    • AB और CD के बीच की दूरी निकट है, BC और CD के बीच की दूरी कुछ अनुपात आवश्यकताओं को पूरा करती है ((0.382-0.886 और 1.13-2.618 के बीच) ।

    • D से कम C का अर्थ है बैल बाजार, D से अधिक C का अर्थ है भालू बाजार।

  3. बारसिनस फ़ंक्शन के माध्यम से एक दिशा में पिछले एक फ्रैक्टल को वर्तमान में सबसे हाल की दूरी पर निर्धारित करें, ताकि वर्तमान में समग्र प्रवृत्ति की दिशा निर्धारित की जा सके।

  4. ABCD पैटर्न की पहचान करते समय लॉग इन करें और स्टॉप और स्टॉप लॉस सेट करें, ट्रैक में शॉर्ट-लाइन ट्रेंड।

रणनीति का विश्लेषण

  1. विलियम्स फ्रैक्टल सूचकांक का उपयोग करके निर्णय की सहायता से, मोड़ बिंदुओं की अधिक सटीक पहचान की जा सकती है।

  2. एबीसीडी आकृति न्याय मानदंड सरल, विश्वसनीय और प्रोग्राम करने में आसान है।

  3. बार्सिनेंस फंक्शन के साथ, यह पता लगाता है कि एक बड़ी प्रवृत्ति किस दिशा में है, जिससे झूठे ब्रेक के नुकसान को कम किया जा सकता है।

  4. स्टॉप लॉस स्टॉपलॉस सेट करने के बाद ट्रैक में शॉर्ट लाइन ट्रेंड को ट्रैक कर सकते हैं।

रणनीतिक जोखिम विश्लेषण

  1. विलियम्स फ्रैक्टल में देरी है, जिससे टर्नओवर से चूकने से नुकसान हो सकता है।

  2. मध्य लघु रेखा पर कई अतिव्यापी एबीसीडी रूप हैं जो पहचान त्रुटि का कारण बन सकते हैं।

  3. जब एक बड़ी प्रवृत्ति को सही ढंग से नहीं देखा जाता है, तो एक छोटा-मध्यम लेनदेन कैद हो सकता है।

  4. यह बहुत छोटा है और इसे आसानी से मारा जा सकता है, और यह बहुत बड़ा है और इसे ट्रैक नहीं किया जा सकता।

अनुकूलन विधि:

  1. अन्य मापदंडों का उपयोग करके निर्णय लेने के लिए परीक्षण किया जा सकता है, ताकि टर्नओवर को अधिक प्रभावी ढंग से पहचानने के तरीके की तलाश की जा सके।

  2. एबीसीडी आकृति के लिए पैरामीटर का अनुकूलन, निर्णय को अधिक विश्वसनीय बनाता है।

  3. महाप्रवृत्ति के आकलन के तरीकों को अनुकूलित करना, महाप्रवृत्ति के गलत आकलन को रोकना।

  4. विभिन्न स्टॉप-स्टॉप अनुपातों का परीक्षण करें और सबसे अच्छा स्टॉप-स्टॉप पाएं।

रणनीति अनुकूलन दिशा

  1. अन्य संकेतकों जैसे कि MACD, KDJ आदि का उपयोग करके प्रवृत्ति का आकलन करने की कोशिश की जा सकती है, ताकि प्रवेश के समय को अधिक सटीक रूप से देखा जा सके।

  2. विभिन्न किस्मों के लिए विभिन्न चक्रों के लिए पैरामीटर का अनुकूलन किया जा सकता है ताकि उस किस्म के चक्र के लिए सबसे उपयुक्त स्टॉप-लॉस स्टॉप पॉइंट पाया जा सके।

  3. बाजार में परिवर्तन के आधार पर अनुकूलन के लिए एक पूर्ण चक्र ले सकते हैं, सबसे अच्छा पैरामीटर संयोजन की तलाश में।

  4. इस रणनीति को स्थिरता बढ़ाने के लिए, प्रवेश संकेतों को फ़िल्टर करने के लिए समान रेखा जैसे संकेतकों को जोड़ा जा सकता है।

  5. मशीन लर्निंग एल्गोरिदम को पेश किया जा सकता है ताकि पहचान की सटीकता में सुधार के लिए अधिक डेटा प्रशिक्षण मॉडल का उपयोग किया जा सके।

संक्षेप

इस रणनीति के समग्र विचार स्पष्ट और विश्वसनीय है, विलियम्स 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)