Chiến lược tăng-giảm giá đường trung bình động kép


Ngày tạo: 2023-11-06 16:25:01 sửa đổi lần cuối: 2023-11-06 16:25:01
sao chép: 1 Số nhấp chuột: 649
1
tập trung vào
1621
Người theo dõi

Chiến lược tăng-giảm giá đường trung bình động kép

Tổng quan

Chiến lược này sử dụng đường trung bình di chuyển đá phiến làm chỉ số kỹ thuật chính, kết hợp với hai đường ray Bollin để thực hiện chiến lược phá vỡ để nhận ra xu hướng thị trường. Xem dưới khi giá phá vỡ đường ray Bollin và xem nhiều khi giá phá vỡ đường ray Bollin.

Nguyên tắc chiến lược

  1. Tính toán trung bình di chuyển của các mảnh vỡ ((CBMA): Sử dụng trung bình di chuyển của các mảnh vỡ mịn của EMA để theo dõi hiệu quả sự thay đổi giá.

  2. Thiết lập tham số Brin: chọn đường trung bình di chuyển của đá phiến làm đường trung tâm, đường trên và đường dưới sử dụng thiết lập nhân số tiêu chuẩn của độ chênh lệch dạ dày, có thể điều chỉnh theo thị trường.

  3. Giao dịch phá vỡ: giá tăng khi phá vỡ đường lên, tăng khi phá vỡ đường xuống, sử dụng chiến lược theo dõi xu hướng.

  4. Các giao dịch được thực hiện theo mô hình Cancel Lightning, chỉ có một giao dịch một chiều tại một lần.

  5. Thiết lập khối lượng giao dịch cố định, có thể điều chỉnh theo số tiền.

Phân tích lợi thế

  1. Các đường trung bình di chuyển của đá phiến rất mịn, có thể theo dõi giá một cách hiệu quả.

  2. Thuật toán EMA tự điều chỉnh tối ưu hóa tính thực tế của trung bình di chuyển.

  3. Brin đã đưa ra tín hiệu rõ ràng về hướng đột phá.

  4. Theo dõi xu hướng, tránh whipsaw.

  5. Lượng giao dịch cố định có thể kiểm soát tổn thất một lần.

Phân tích rủi ro

  1. Thiết lập tham số của vùng Brin cần được tối ưu hóa, và có vấn đề khi nó quá lớn hoặc quá nhỏ.

  2. Các tín hiệu phá vỡ có thể xảy ra phá vỡ giả.

  3. Cần thiết lập lệnh dừng để kiểm soát tổn thất.

  4. Lượng giao dịch cố định không thể điều chỉnh vị trí theo thị trường.

  5. Không có lợi nhuận lớn hơn khi chỉ giao dịch một chiều.

Hướng tối ưu hóa

  1. Hoạt động tối ưu hóa các tham số Brin để làm cho Brin phù hợp hơn với thị trường.

  2. Thêm thêm các chỉ số để lọc sóng, tránh phá vỡ giả.

  3. Tham gia theo dõi dừng lỗ để khóa lợi nhuận.

  4. Các nhà đầu tư có thể sử dụng các giao dịch bảo hiểm để tạo ra lợi nhuận lớn hơn khi làm nhiều giao dịch giảm giá.

  5. Tham gia hệ thống quản lý vị trí

Tóm tắt

Chiến lược này là một chiến lược theo dõi xu hướng phá vỡ, sử dụng các chỉ số kỹ thuật trung bình di chuyển thích ứng, kết hợp với hai đường ray của Brin để thiết lập tín hiệu phá vỡ rõ ràng. Chiến lược này đơn giản, dễ vận hành, khối lượng giao dịch cố định có thể kiểm soát rủi ro, có một số giá trị thực.

Mã nguồn chiến lược
/*backtest
start: 2023-10-29 00:00:00
end: 2023-11-05 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="CBMA Bollinger Bands Strategy directed [ChuckBanger]", shorttitle="CBMA BB CB", 
   overlay=true )


length = input(title="Length", type=input.integer, defval=12, minval=1)
regular = input(title="Regular BB Or CBMA?", type=input.bool, defval=false)
src = input(title="Source", type=input.source, defval=close)
mult = input(title="Multipler", type=input.float, defval=2.3, minval=.001, maxval=50, step=.1)
emaLen = input(title="EMA Length", type=input.integer, defval=11, minval=1)
emaGL = input(title="EMA Gain Limit", type=input.integer, defval=50, minval=1)
highlight = input(title="Highlight On/Off", type=input.bool, defval=true)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)

strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

//strategy.risk.max_drawdown(50, strategy.percent_of_equity)

calc_hma(src, length) =>
    hullma = wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
    hullma

calc_cbma(price, length, emaLength, emaGainLimit) =>
    alpha = 2 / (emaLength + 1)
    ema = ema(price, emaLength)
    int leastError = 1000000
    
    float ec = 0
    float bestGain = 0
    
    for i = emaGainLimit to emaGainLimit
        gain = i / 10
        ec := alpha * ( ema + gain * (price - nz(ec[1])) ) + (1 - alpha) * nz(ec[1])
        error = price - ec
        if (abs(error) < leastError)
            leastError = abs(error)
            bestGain = gain
    
    ec := alpha * ( ema + bestGain * (price - nz(ec[1])) ) + (1 - alpha) * nz(ec[1])
    hull = calc_hma(price, length)
    
    cbma = (ec + hull) / 2
    cbma

cbma = calc_cbma(src, length, emaLen, emaGL)
basis = regular ? sma(src, length) : cbma
dev = mult * stdev(src, length)
upper = basis + dev
lower = basis - dev
cbmaColor = fixnan(highlight and not regular ? cbma > high ? color.purple : cbma < low ? color.aqua : na : color.red)
plot(basis, color=cbmaColor)
p1 = plot(upper, color=color.blue)
p2 = plot(lower, color=color.blue)
fill(p1, p2)

if (crossover(src, lower))
    strategy.entry("CBMA_BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", comment="CBMA_BBandLE")
else
    strategy.cancel(id="CBMA_BBandLE")

if (crossunder(src, upper))
    strategy.entry("CBMA_BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", comment="CBMA_BBandSE")
else
    strategy.cancel(id="CBMA_BBandSE")