Đường trung bình di chuyển kép đường chéo MACD Xu hướng theo chiến lược

Tác giả:ChaoZhang, Ngày: 2024-01-23 11:22:02
Tags:

img

Tổng quan

Chiến lược này là một chiến lược giao dịch tự động dựa trên sự chéo chéo trung bình động kép của chỉ số kỹ thuật MACD. Nó sử dụng sự chéo chéo đường tín hiệu của MACD để xác định hướng xu hướng để theo xu hướng.

Chiến lược logic

Chiến lược này đầu tiên tính toán ba đường của chỉ số MACD: đường nhanh, đường chậm và biểu đồ. Đường nhanh là một đường trung bình di chuyển nhanh hơn trong một khoảng thời gian ngắn hơn trong khi đường chậm là một đường trung bình di chuyển chậm hơn trong một khoảng thời gian dài hơn. Biểu đồ là sự khác biệt giữa đường nhanh và đường chậm. Khi đường nhanh vượt qua đường chậm, đó là tín hiệu chéo vàng chỉ ra tín hiệu mua. Khi đường nhanh vượt qua dưới đường chậm, đó là tín hiệu chéo chết chỉ ra tín hiệu bán.

Chiến lược này sử dụng logic này để đi dài trên các đường chéo vàng và gần vị trí trên các đường chéo chết; hoặc đi ngắn trên các đường chéo chết và gần vị trí trên các đường chéo vàng để tự động theo xu hướng. Trong khi đó, chiến lược cũng đánh giá xem đường MACD tuyệt đối có dương hay âm để tránh các tín hiệu sai và đảm bảo thực sự nắm bắt các điểm đảo ngược xu hướng.

Ưu điểm của Chiến lược

  • Sử dụng đường chéo trung bình động kép để xác định hướng xu hướng chính xác và nắm bắt sự đảo ngược xu hướng
  • Chỉ số kỹ thuật MACD làm giảm tín hiệu sai và cải thiện chất lượng tín hiệu
  • Tính linh hoạt để đi dài hoặc ngắn hoặc chỉ dài / ngắn
  • Các thông số điều chỉnh phù hợp với môi trường thị trường khác nhau

Rủi ro của chiến lược

  • Crossover trung bình di chuyển kép có tác dụng chậm, có thể bỏ lỡ lợi nhuận một phần khi bắt đầu đảo ngược
  • Chỉ số MACD dễ bị tín hiệu sai trong quá trình củng cố thị trường
  • Các thông số cần phải được điều chỉnh đúng cách để tránh quá nhạy cảm hoặc trơ

Giảm rủi ro:

  • Kết hợp với các chỉ số khác để lọc tín hiệu
  • Điều chỉnh các tham số để giảm tần suất giao dịch
  • Chỉ áp dụng chiến lược khi xu hướng rõ ràng

Các lĩnh vực cải tiến

Chiến lược có thể được tăng cường từ các khía cạnh sau:

  1. Kết hợp các chỉ số khác như KDJ, Bollinger Bands vv để xác nhận tín hiệu và lọc tín hiệu sai

  2. Cải thiện cơ chế nhập, ví dụ: thêm bộ lọc thoát để tránh nhập sớm hoặc muộn

  3. Tối ưu hóa cài đặt tham số, điều chỉnh thời gian dòng nhanh và chậm dựa trên khung thời gian và chế độ thị trường khác nhau

  4. Thêm stop loss để kiểm soát lỗ giao dịch duy nhất

  5. Mở rộng sang các sản phẩm khác như ngoại hối, tiền điện tử vv

Tóm lại


/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 00:00:00
period: 1d
basePeriod: 1h
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/
// © DeMindSET

//@version=4
strategy("MACD Trend Follow Strategy", overlay=false)
// Getting inputs
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"]) 
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)
//
Bull= macd > signal
Bear= macd < signal
ConBull=macd>0
ConBear=macd<0
//
Green= Bull and ConBull
Red= Bear and ConBear
Yellow= Bull and ConBear
Blue= Bear and ConBull
//
bcolor = Green ? color.green : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2019, title = "From Year", minval = 1920)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

if LSB == "Long only" and Green
    strategy.entry("L",true)
if LSB == "Long only" and Red
    strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Green
    strategy.entry("L",true)
if LSB == "Both" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Green
    strategy.close("S",qty_percent=100,comment="TP Short")


Thêm nữa