Tài nguyên đang được tải lên... tải...

Chiến lược mô hình động lực ABCD

Tác giả:ChaoZhang, Ngày: 2023-09-24 13:08:28
Tags:

Tổng quan

Chiến lược này sử dụng chỉ số Fractal Williams để xác định đỉnh và đáy giá và kết hợp các mô hình ABCD để xác định hướng xu hướng. Nó đi vào một vị trí sau khi xác nhận xu hướng để theo dõi xu hướng trung hạn cho lợi nhuận.

Chiến lược logic

  1. Sử dụng chỉ số Fractal Williams để xác định đỉnh và đáy giá. Các mô hình khác nhau được sử dụng để xác định mô hình ABCD tăng hoặc giảm.

  2. Các tiêu chí xác định mẫu ABCD:

    • Khoảng cách giữa AB và CD là tương tự, và khoảng cách giữa BC và CD đáp ứng một số yêu cầu tỷ lệ nhất định (giữa 0,382-0,886 và 1,13-2,618).

    • Điểm D thấp hơn điểm C là một mô hình tăng. Điểm D cao hơn điểm C là một mô hình giảm.

  3. Sử dụng hàm barssince để xác định hướng nào của Fractal gần với dòng để đánh giá hướng xu hướng tổng thể.

  4. Nhập dài / ngắn sau khi xác định mô hình ABCD, và đặt dừng lỗ và lấy lợi nhuận để theo xu hướng trung hạn.

Phân tích lợi thế

  1. Chỉ số Fractal Williams giúp xác định các bước ngoặt chính xác hơn.

  2. Các tiêu chí mô hình ABCD đơn giản và đáng tin cậy, dễ tự động hóa.

  3. Đánh giá hướng xu hướng chính với barsinth tránh tổn thất từ các sự phá vỡ sai.

  4. Tiếp theo xu hướng với dừng lỗ và lấy lợi nhuận sau khi nhập.

Phân tích rủi ro

  1. Williams Fractal có thể bị chậm lại và bỏ lỡ các điểm chuyển đổi gây ra tổn thất.

  2. Nhiều mô hình ABCD chồng chéo có thể gây ra sự xác định sai trên biểu đồ trung hạn.

  3. Hướng dẫn xu hướng chính sai làm tăng nguy cơ bị mắc kẹt trong các giao dịch trung hạn.

  4. Dừng mất quá chặt có thể bị dừng ra dễ dàng. Dừng mất quá rộng có thể gây ra việc theo dõi kém.

Các giải pháp có thể:

  1. Kiểm tra các chỉ số khác để giúp xác định các điểm chuyển hướng hiệu quả hơn.

  2. Tối ưu hóa các tham số mẫu ABCD để làm cho nhận dạng nghiêm ngặt và đáng tin cậy hơn.

  3. Cải thiện xác định xu hướng chính để tránh thiên vị hướng sai.

  4. Kiểm tra các tỷ lệ dừng lỗ / lấy lợi nhuận khác nhau để tìm điểm tối ưu.

Hướng dẫn tối ưu hóa

  1. Kiểm tra MACD, KDJ và các chỉ số khác để cải thiện độ chính xác của tín hiệu đầu vào.

  2. Tối ưu hóa các tham số dựa trên các sản phẩm và khung thời gian khác nhau để tìm mức dừng lỗ / lấy lợi nhuận tối ưu.

  3. Tối ưu hóa thời gian xem lại thanh để tìm kết hợp tham số tốt nhất theo điều kiện thị trường thay đổi.

  4. Thêm trung bình động v.v. để lọc tín hiệu và cải thiện sự ổn định.

  5. Giới thiệu các thuật toán học máy và nhiều dữ liệu hơn để cải thiện độ chính xác nhận dạng mẫu.

Tóm lại

Lý thuyết chiến lược là rõ ràng và đáng tin cậy nói chung, sử dụng mô hình Williams Fractal và ABCD để xác định hướng xu hướng trung hạn, kết hợp với lọc xu hướng, dừng lỗ và lấy lợi nhuận để theo xu hướng để kiếm lợi nhuận.


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

Thêm nữa