গতিশীলতা ABCD প্যাটার্ন কৌশল

লেখক:চাওঝাং, তারিখ: ২০২৩-০৯-২৪ ১৩ঃ০৮ঃ২৮
ট্যাগঃ

সারসংক্ষেপ

এই কৌশলটি মূল্যের শিখর এবং নীচে সনাক্ত করতে উইলিয়ামস ফ্র্যাক্টাল সূচক ব্যবহার করে এবং প্রবণতার দিক নির্ধারণের জন্য এবিসিডি প্যাটার্নগুলিকে একত্রিত করে। এটি লাভের জন্য মাঝারি মেয়াদী প্রবণতা অনুসরণ করার জন্য প্রবণতাটি নিশ্চিত করার পরে একটি অবস্থানে প্রবেশ করে।

কৌশলগত যুক্তি

  1. দামের শিখর এবং নীচে সনাক্ত করতে উইলিয়ামস ফ্র্যাক্টাল সূচক ব্যবহার করুন। উত্থান বা হ্রাস ABCD নিদর্শন নির্ধারণ করতে বিভিন্ন নিদর্শন ব্যবহার করা হয়।

  2. এবিসিডি প্যাটার্ন সনাক্তকরণের মানদণ্ডঃ

    • AB এবং CD এর মধ্যে দূরত্ব অনুরূপ, এবং BC এবং CD এর মধ্যে দূরত্ব নির্দিষ্ট আনুপাতিক প্রয়োজনীয়তা পূরণ করে (0.382-0.886 এবং 1.13-2.618 এর মধ্যে) ।

    • D পয়েন্ট C পয়েন্টের নিচে একটি উত্থান প্যাটার্ন। D পয়েন্ট C পয়েন্টের উপরে একটি bearish প্যাটার্ন।

  3. সামগ্রিক প্রবণতা দিক বিচার করার জন্য কোন দিকটি বর্তমানের কাছাকাছি তা নির্ধারণ করতে বারসিনস ফাংশনটি ব্যবহার করুন।

  4. এবিসিডি প্যাটার্ন চিহ্নিত করার পর লং/শর্ট এন্ট্রি করুন এবং মধ্যমেয়াদী প্রবণতা অনুসরণ করতে স্টপ লস এবং লাভ নিন।

সুবিধা বিশ্লেষণ

  1. উইলিয়ামস ফ্র্যাক্টাল ইন্ডিকেটর সঠিকভাবে বাঁক পয়েন্ট সনাক্ত করতে সাহায্য করে।

  2. এবিসিডি প্যাটার্নের মানদণ্ড সহজ এবং নির্ভরযোগ্য, স্বয়ংক্রিয় করা সহজ।

  3. বড় ট্রেন্ডের দিকনির্দেশনাটি বারসিন্ট দিয়ে বিচার করা মিথ্যা ব্রেকআউট থেকে ক্ষতি এড়ায়।

  4. স্টপ লস এবং এন্ট্রি করার পর লাভের সাথে প্রবণতা অনুসরণ করা।

ঝুঁকি বিশ্লেষণ

  1. উইলিয়ামস ফ্র্যাক্টাল পিছিয়ে যেতে পারে এবং ক্ষতির কারণ হতে পারে।

  2. একাধিক ওভারল্যাপিং ABCD প্যাটার্ন মাঝারি মেয়াদী চার্টগুলিতে ভুল সনাক্তকরণের কারণ হতে পারে।

  3. ভুল প্রধান প্রবণতা দিক মধ্যমেয়াদী ব্যবসায় আটকা পড়ার ঝুঁকি বাড়ায়।

  4. স্টপ লসিং খুব টাইট হতে পারে সহজেই বন্ধ করা. স্টপ লসিং খুব প্রশস্ত হতে পারে খারাপ ট্র্যাকিং কারণ।

সম্ভাব্য সমাধান:

  1. অন্যান্য সূচকগুলি পরীক্ষা করুন যাতে বাঁক পয়েন্টগুলি আরও কার্যকরভাবে সনাক্ত করতে সহায়তা করতে পারে।

  2. সনাক্তকরণকে আরও কঠোর এবং নির্ভরযোগ্য করার জন্য ABCD প্যাটার্ন প্যারামিটারগুলি অপ্টিমাইজ করুন।

  3. ভুল দিকনির্দেশের পক্ষপাত এড়ানোর জন্য প্রধান প্রবণতা সনাক্তকরণ উন্নত করুন।

  4. অপ্টিম পয়েন্ট খুঁজে পেতে বিভিন্ন স্টপ লস/টেক প্রফিট রেসিও পরীক্ষা করুন।

অপ্টিমাইজেশান নির্দেশাবলী

  1. এন্ট্রি সিগন্যালের নির্ভুলতা উন্নত করতে MACD, KDJ এবং অন্যান্য সূচক পরীক্ষা করুন।

  2. স্টপ লস/টেক লাভের সর্বোত্তম স্তর খুঁজে পেতে বিভিন্ন পণ্য এবং সময়সীমার উপর ভিত্তি করে পরামিতিগুলি অনুকূল করুন।

  3. পরিবর্তিত বাজারের অবস্থার অনুযায়ী সর্বোত্তম প্যারামিটার সমন্বয় খুঁজে বের করার জন্য বার লুকব্যাক সময়কাল অপ্টিমাইজ করুন।

  4. সংকেতগুলি ফিল্টার করতে এবং স্থিতিশীলতা উন্নত করতে চলমান গড় ইত্যাদি যুক্ত করুন।

  5. মেশিন লার্নিং অ্যালগরিদম এবং আরও তথ্য প্রবর্তন করে প্যাটার্ন স্বীকৃতির নির্ভুলতা উন্নত করা।

সংক্ষিপ্তসার

কৌশল যুক্তি পরিষ্কার এবং নির্ভরযোগ্য সামগ্রিকভাবে, উইলিয়ামস ফ্র্যাক্টাল এবং এবিসিডি প্যাটার্নগুলি ব্যবহার করে মধ্যমেয়াদী প্রবণতা দিক নির্ধারণ করতে, প্রবণতা ফিল্টারিং, স্টপ লস এবং লাভের জন্য প্রবণতা অনুসরণ করার জন্য লাভের সাথে একত্রিত করে। এটিকে বিভিন্ন বাজারের অবস্থার সাথে খাপ খাইয়ে নেওয়ার জন্য এন্ট্রি সিগন্যাল, প্যারামিটার টিউনিং, প্রবণতা সনাক্তকরণ ইত্যাদির মতো ক্ষেত্রে অপ্টিমাইজেশনের জন্য এখনও অনেক জায়গা রয়েছে। একটি বিবেচ্য + কোয়ান্টাম কম্বো মডেল হিসাবে, এটির শক্তিশালী ব্যবহারিক মূল্য রয়েছে।


/*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)

আরো