Chiến lược dài kết hợp động lượng và trung bình động

Tác giả:ChaoZhang, Ngày: 2024-02-29 11:57:18
Tags:

img

Tổng quan

Chiến lược này kết hợp chỉ số động lực MACD và chỉ số xu hướng DMI để đi dài khi các điều kiện được đáp ứng.

Nguyên tắc

Các mục của chiến lược này dựa trên các chỉ số MACD và DMI:

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

Khi cả hai điều kiện được đáp ứng cùng một lúc, đi dài.

Có hai tiêu chuẩn cho việc ra khỏi vị trí:

  • Lợi nhuận cố định: giá đóng tăng lên một tỷ lệ phần trăm cố định cho lợi nhuận
  • Sự biến động trailing stop loss: sử dụng ATR và giá cao nhất gần đây để tính toán một vị trí stop loss điều chỉnh động.

Ưu điểm

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

Rủi ro

  • Cả 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
  • Lợi nhuận cố định có thể ngăn chặn lợi nhuận được tối đa hóa
  • Tốc độ dừng biến động có thể được điều chỉnh không đúng cách, quá hung hăng hoặc bảo thủ

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

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

Tóm lại

Chiến lược này tổng hợp nhiều chỉ số để đánh giá xu hướng và điều kiện thị trường, và can thiệp vào các tình huống có xác suất tương đối lớn. Các điều kiện thu lợi nhuận cũng được thiết kế tối ưu để đảm bảo lợi nhuận nhất định trong khi xem xét tính linh hoạt trong việc khóa lợi nhuận. Thông qua đ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 ổn định.


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


Thêm nữa