এই কৌশলটি উইলিয়ামস ফ্র্যাক্টাল সূচক ব্যবহার করে দামের উচ্চতা এবং নিম্নতা চিহ্নিত করে এবং ABCD মডেলের সাথে মিলিত হয়ে ট্রেন্ডের দিক নির্ধারণ করে, ট্রেন্ডটি নিশ্চিত হওয়ার পরে প্রবেশ করে, যাতে সংক্ষিপ্ত লাইনের প্রবণতা অনুসরণ করে এবং মুনাফা অর্জন করে।
উইলিয়ামস ফ্র্যাক্টাল সূচক ব্যবহার করে দামের উচ্চ ও নিম্ন পয়েন্টগুলি চিহ্নিত করা হয় এবং বিভিন্ন ধরণের ফর্ম্যাট অনুসারে এটি একটি ষাঁড় বাজার বা একটি ভাল বাজার ABCD ফর্ম্যাট হিসাবে বিচার করা হয়।
ABCD ফর্ম্যাট বিচারক মানদণ্ডঃ
AB এবং CD এর মধ্যে দূরত্ব প্রায় সমান, BC এবং CD এর মধ্যে দূরত্ব একটি নির্দিষ্ট অনুপাতের প্রয়োজনীয়তা পূরণ করে ((0.382-0.886 এবং 1.13-2.618 এর মধ্যে)) ।
D বিন্দু থেকে কম C বিন্দু একটি ষাঁড়ের বাজার, D বিন্দু থেকে বেশি C বিন্দু একটি ভালুকের বাজার।
barssince ফাংশন ব্যবহার করে, একটি দিকের Fractal বর্তমানের নিকটতম দূরত্ব থেকে বিচার করে, বর্তমান সামগ্রিক প্রবণতা দিক বিচার করতে পারে।
ABCD ফর্ম্যাট সনাক্ত করার সময় প্রবেশ করুন এবং স্টপ লস এবং স্টপ স্টপ সেট করুন, শর্ট লাইন ট্রেন্ড অনুসরণ করুন।
উইলিয়ামস ফ্র্যাক্টালের সাহায্যে, আপনি টার্নিং পয়েন্টটি আরও সঠিকভাবে সনাক্ত করতে পারেন।
ABCD ফর্ম্যাট বিচারক সহজ, নির্ভরযোগ্য এবং সহজেই প্রোগ্রাম করা যায়।
একটি বড় প্রবণতার দিক নির্ধারণের জন্য barssince ফাংশন ব্যবহার করা হয়, যা মিথ্যা ব্রেকআউটের ক্ষতিকে কার্যকরভাবে হ্রাস করতে পারে।
স্টপ লস স্টপ সেট করার পরে, আপনি ট্রেডিংয়ের সংক্ষিপ্ত লাইন ট্রেন্ডগুলি অনুসরণ করতে পারেন।
উইলিয়ামস ফ্র্যাক্টালের বিলম্বিত প্রবাহের কারণে, এটি একটি বিপর্যয় ঘটানোর সম্ভাবনা রয়েছে।
মাঝের সংক্ষিপ্ত রেখায় একাধিক ওভারল্যাপিং এবিসিডি ফর্ম্যাট রয়েছে যা সনাক্তকরণ ত্রুটির কারণ হতে পারে।
ট্রেডিংয়ের ক্ষেত্রে, যখন বড় ট্রেন্ডের মূল্যায়ন সঠিক হয় না, তখন মাঝারি এবং সংক্ষিপ্ত লাইন ট্রেডিং সহজেই ফাঁদে পড়ে যায়।
ক্ষতি প্রতিরোধের সেটিংটি খুব ছোট হলে এটি খুব সহজেই আঘাত করা যায়, এবং এটি খুব বড় হলে ট্র্যাকিংয়ের কার্যকারিতা খারাপ হয়।
অনুকূলিতকরণ পদ্ধতিঃ
অন্যান্য সূচক ব্যবহার করে বিচার করার চেষ্টা করা যেতে পারে, যাতে পাল্টা পয়েন্টগুলিকে আরও কার্যকরভাবে চিহ্নিত করা যায়।
ABCD ফর্ম্যাটের প্যারামিটারগুলিকে অপ্টিমাইজ করুন, যাতে বিচার আরও কঠোরভাবে নির্ভরযোগ্য হয়।
এই প্রবণতাগুলির মূল্যায়ন করার পদ্ধতিগুলিকে অপ্টিমাইজ করুন এবং প্রবণতাগুলির ভুল মূল্যায়ন এড়ান।
বিভিন্ন স্টপ-ডাউন রেট পরীক্ষা করে সেরা স্টপ-ডাউন পয়েন্ট খুঁজে বের করুন।
আপনি MACD, KDJ এবং অন্যান্য সূচকগুলি ব্যবহার করে ট্রেন্ডগুলি বিচার করার চেষ্টা করতে পারেন, আরও সঠিক প্রবেশের সময় খুঁজতে পারেন।
বিভিন্ন জাতের জন্য বিভিন্ন চক্রের উপর ভিত্তি করে প্যারামিটার অপ্টিমাইজ করা যেতে পারে, যা সেই জাতের চক্রের জন্য সবচেয়ে উপযুক্ত স্টপ লস স্টপপয়েন্ট খুঁজে বের করতে পারে।
আপনি বাজারের পরিবর্তনের উপর ভিত্তি করে অপ্টিমাইজেশান পুরো চক্র নিতে পারেন, সর্বোত্তম প্যারামিটার সমন্বয় খুঁজুন।
কৌশলটির স্থায়িত্ব বাড়ানোর জন্য সমান্তরাল ইত্যাদি সূচক ফিল্টারিং প্রবেশের সংকেত সংযুক্ত করা যেতে পারে।
মেশিন লার্নিং অ্যালগরিদমের মাধ্যমে আরও বেশি ডেটা প্রশিক্ষণ মডেলের মাধ্যমে সনাক্তকরণের নির্ভুলতা বাড়ানো যায়।
এই কৌশলটির সামগ্রিক ধারণাটি পরিষ্কার এবং নির্ভরযোগ্য, উইলিয়ামস ফ্র্যাক্টাল সূচক এবং এবিসিডি মডেলের বিচারে সংক্ষিপ্ত লাইনের প্রবণতা দিকটি ব্যবহার করে, তারপরে প্রবণতা ফিল্টারিং এবং স্টপ লস স্টপ সেটআপের সাথে ট্রেন্ড ট্র্যাকিংয়ের লাভ অর্জন করে। কৌশলটি অপ্টিমাইজ করার জন্য আরও অনেক জায়গা রয়েছে, যা ইনপুট সিগন্যাল, প্যারামিটার অপ্টিমাইজেশন, প্রবণতা বিচার ইত্যাদির দিক থেকে উন্নত করা যেতে পারে, যাতে কৌশলটি বিভিন্ন বাজারের পরিবেশের জন্য আরও উপযুক্ত হয়। সামগ্রিকভাবে বলতে গেলে, এই কৌশলটি discretionary + quantum সমন্বিত কৌশল মডেল হিসাবে খুব শক্তিশালী ব্যবহারিকতা রয়েছে।
/*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)