Chiến lược này sử dụng chỉ số Williams Fractal để xác định các điểm cao và thấp của giá cả và kết hợp với ABCD hình dạng để đánh giá xu hướng, tham gia vào xu hướng sau khi xác nhận xu hướng để theo dõi xu hướng ngắn và lợi nhuận.
Sử dụng chỉ số Williams Fractal để xác định mức giá cao và thấp, được đánh giá là ABCD của thị trường bò hoặc ABCD của thị trường gấu tùy theo hình dạng khác nhau.
Tiêu chuẩn ABCD:
Khoảng cách giữa AB và CD gần nhau, khoảng cách giữa BC và CD đáp ứng yêu cầu tỷ lệ nhất định (giữa 0.382-0.886 và 1.13-2.618).
D thấp hơn C là thị trường bò, D cao hơn C là thị trường gấu.
Sử dụng hàm barssince để đánh giá khoảng cách Fractal của một hướng trước gần nhất với hướng hiện tại, để đánh giá hướng xu hướng tổng thể hiện tại.
Khi nhận ra hình thức ABCD, hãy nhập thêm / rút ngắn, và đặt lệnh dừng và dừng, theo dõi xu hướng đường ngắn.
Sử dụng các chỉ số Fractal Williams để hỗ trợ phán đoán, điểm ngã có thể được xác định chính xác hơn.
Tiêu chuẩn ABCD đơn giản, đáng tin cậy và dễ lập trình.
Kết hợp với hàm barssince để xác định hướng của xu hướng lớn, có thể giảm hiệu quả thiệt hại do phá vỡ giả.
Sau khi thiết lập Stop Loss Stop, bạn có thể theo dõi xu hướng đường ngắn và kiếm tiền.
Williams Fractal bị chậm trễ, có thể bị mất mát do bỏ lỡ điểm chuyển hướng.
Có nhiều dạng ABCD chồng lên nhau trên đường ngắn giữa, có thể gây ra lỗi nhận dạng.
Các nhà giao dịch có thể bị mắc kẹt khi họ không xác định chính xác xu hướng lớn.
Thiết lập chống hư hỏng quá nhỏ có thể dễ bị bắn, thiết lập quá lớn sẽ không có hiệu quả theo dõi.
Phương pháp tối ưu hóa tương ứng:
Bạn có thể thử nghiệm sử dụng các chỉ số hỗ trợ phán đoán khác để tìm cách xác định các điểm thay đổi hiệu quả hơn.
Tối ưu hóa các tham số của hình dạng ABCD để đưa ra quyết định nghiêm ngặt hơn.
Tối ưu hóa các phương pháp đánh giá xu hướng lớn, tránh đánh giá sai xu hướng lớn.
Kiểm tra các tỷ lệ dừng lỗ khác nhau để tìm điểm dừng lỗ tối ưu.
Bạn có thể thử sử dụng các chỉ số khác như MACD, KDJ để đánh giá xu hướng và tìm thời gian nhập học chính xác hơn.
Các tham số có thể được tối ưu hóa cho các chu kỳ khác nhau của các giống khác nhau để tìm điểm dừng lỗ phù hợp nhất với chu kỳ của giống đó.
Có thể lấy toàn bộ chu kỳ để tối ưu hóa theo sự thay đổi của thị trường, tìm kiếm sự kết hợp tham số tốt nhất.
Có thể kết hợp các chỉ số như đường cân bằng để lọc tín hiệu nhập cảnh, tăng sự ổn định của chiến lược.
Có thể giới thiệu các thuật toán học máy để sử dụng nhiều mô hình đào tạo dữ liệu hơn để cải thiện độ chính xác nhận dạng.
Chiến lược tổng thể của chiến lược này rõ ràng và đáng tin cậy, sử dụng chỉ số Williams Fractal và định hướng xu hướng đường ngắn trong phán đoán hình dạng ABCD, sau đó kết hợp với bộ lọc xu hướng và thiết lập dừng lỗ để theo dõi xu hướng. Có rất nhiều không gian tối ưu hóa chiến lược, có thể được cải thiện từ các khía cạnh của tín hiệu đầu vào, tối ưu hóa tham số, phán đoán xu hướng, để chiến lược phù hợp hơn với các môi trường thị trường khác nhau. Nói chung, chiến lược này có tính thực tiễn mạnh mẽ như một mô hình chiến lược kết hợp với số lượng + quyết định.
/*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)