Chỉ báo động lượng kết hợp với đường trung bình động để thực hiện chiến lược dài hạn


Ngày tạo: 2024-02-29 11:57:18 sửa đổi lần cuối: 2024-02-29 11:57:18
sao chép: 7 Số nhấp chuột: 536
1
tập trung vào
1617
Người theo dõi

Chỉ báo động lượng kết hợp với đường trung bình động để thực hiện chiến lược dài hạn

Tổng quan

Chiến lược này kết hợp các chỉ số động lực MACD và chỉ số xu hướng DMI để thực hiện nhiều thao tác khi đủ điều kiện. Các lối ra của nó có các điểm dừng cố định và điểm dừng biến động tùy chỉnh để khóa thu nhập.

Nguyên tắc

Các mục trong chiến lược này phụ thuộc vào chỉ số MACD và DMI:

  • MACD là dương ((MACD đường cao hơn đường tín hiệu), cho thấy thị trường tăng cường động lực
  • Khi DI+ trong DMI cao hơn DI- thì thị trường đang ở giai đoạn xu hướng tăng

Khi cả hai điều kiện trên đều được đáp ứng, hãy mở thêm một vị trí.

Position exits có hai tiêu chuẩn:

  • Đặt dừng: close Tỷ lệ phần trăm tăng giá đạt đến thiết lập dừng
  • Trailing Stop Loss: Sử dụng ATR và giá cao nhất gần đây để tính toán một vị trí dừng động. Điều này có thể dựa trên biến động của thị trường

Ưu điểm

  • Sự kết hợp của MACD và DMI cho phép đánh giá một cách đáng tin cậy hơn về hướng của xu hướng thị trường, giảm thiểu các hoạt động sai lệch
  • Điều kiện dừng là kết hợp giữa dừng cố định và dừng biến động, có thể khóa lợi nhuận một cách linh hoạt

Rủi ro

  • MACD và DMI đều có thể tạo ra tín hiệu sai dẫn đến tổn thất không cần thiết
  • Các nhà đầu tư có thể sẽ không thể tối đa hóa lợi nhuận của họ.
  • Trails có thể không thích nghi với tốc độ, quá quyết liệt hoặc bảo thủ

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

  • Có thể xem xét thêm các chỉ số khác để lọc tín hiệu nhập cảnh, chẳng hạn như sử dụng chỉ số KDJ để xác định xem có quá mua hay quá bán hay không
  • Có thể thử nghiệm các tham số khác nhau để có được hiệu quả dừng dừng tốt hơn
  • Các tham số như trung bình di chuyển có thể được điều chỉnh theo các loại giao dịch cụ thể, hệ thống tối ưu hóa

Tóm tắt

Chiến lược này tổng hợp một số chỉ số để đánh giá xu hướng và điều kiện thị trường, can thiệp trong trường hợp có khả năng lợi nhuận cao. Điều kiện dừng cũng được thiết kế tối ưu hóa, đồng thời đảm bảo lợi nhuận nhất định. Bằng cách điều chỉnh tham số và quản lý rủi ro hơn nữa, chiến lược này có thể trở thành một hệ thống giao dịch định lượng có đầu ra ổn định.

Mã nguồn chiến lược
/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=4
strategy(shorttitle='(MACD + DMI Scalping with Volatility Stop',title='MACD + DMI Scalping with Volatility Stop by (Coinrule)', overlay=true, initial_capital = 100, process_orders_on_close=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type=strategy.commission.percent, commission_value=0.1)

// Works better on 3h, 1h, 2h, 4h

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true

// DMI and MACD inputs and calculations

[pos_dm, neg_dm, avg_dm] = dmi(14, 14)
[macd, macd_signal, macd_histogram] = macd(close, 12, 26, 9)


Take_profit= ((input (3))/100)

longTakeProfit = strategy.position_avg_price * (1 + Take_profit)

length = input(20, "Length", minval = 2)
src = input(close, "Source")
factor = input(2.0, "vStop Multiplier", minval = 0.25, step = 0.25)
volStop(src, atrlen, atrfactor) =>
    var max     = src
    var min     = src
    var uptrend = true
    var stop    = 0.0
    atrM        = nz(atr(atrlen) * atrfactor, tr)
    max         := max(max, src)
    min         := min(min, src)
    stop        := nz(uptrend ? max(stop, max - atrM) : min(stop, min + atrM), src)
    uptrend     := src - stop >= 0.0
    if uptrend != nz(uptrend[1], true)
        max    := src
        min    := src
        stop   := uptrend ? max - atrM : min + atrM
    [stop, uptrend]

[vStop, uptrend] = volStop(src, length, factor)


closeLong = close > longTakeProfit or crossunder(close, vStop)


//Entry 
strategy.entry(id="long", long = true, when = crossover(macd, macd_signal) and pos_dm > neg_dm and window())


//Exit
strategy.close("long", when = closeLong and window())