Ba Chiến lược giao dịch đường trung bình động Golden Cross


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

Ba Chiến lược giao dịch đường trung bình động Golden Cross

Tổng quan

Chiến lược giao dịch chéo vàng ba đường trung bình là một chiến lược phân tích kỹ thuật điển hình. Chiến lược này sử dụng ba đường trung bình di chuyển với các độ dài khác nhau để nắm bắt xu hướng và giao dịch rủi ro thấp. Sản xuất tín hiệu mua khi đường trung bình di chuyển ngắn hạn vượt qua đường trung bình di chuyển trung bình và đường trung bình di chuyển trung bình cao hơn đường trung bình di chuyển dài hạn; Sản xuất tín hiệu bán khi đường trung bình di chuyển ngắn hạn vượt qua đường trung bình di chuyển trung bình và đường trung bình di chuyển trung bình thấp hơn đường trung bình di chuyển dài hạn.

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

Chiến lược Gold Cross Triple Line phụ thuộc chủ yếu vào ba đường trung bình di chuyển để xác định hướng của xu hướng. Đường trung bình di chuyển ngắn hạn có thể đáp ứng nhạy cảm với sự thay đổi giá; Đường trung bình di chuyển trung hạn cung cấp sự phán đoán xu hướng rõ ràng hơn; Đường trung bình di chuyển dài hạn lọc tiếng ồn thị trường, xác định hướng xu hướng dài hạn.

Khi trung bình di chuyển ngắn hạn vượt qua trung bình di chuyển trung bình, giá bắt đầu phá vỡ lên; tại thời điểm này, nếu trung bình di chuyển trung bình cao hơn trung bình di chuyển dài hạn, điều này cho thấy hiện tại đang tăng, vì vậy tại thời điểm này tạo ra tín hiệu mua.

Ngược lại, khi trung bình di chuyển ngắn hạn vượt qua trung bình di chuyển trung bình, thì giá bắt đầu phá vỡ xuống; tại thời điểm này, nếu trung bình di chuyển trung bình thấp hơn trung bình di chuyển dài hạn, thì hiện tại đang ở trong xu hướng giảm, vì vậy tại thời điểm này có tín hiệu bán.

Chiến lược này đồng thời thiết lập rào cản dừng lỗ. Sau khi giao dịch, giá dừng lỗ và giá dừng sẽ được tính dựa trên tỷ lệ dừng lỗ được thiết lập. Nếu giá chạm vào rào cản hoặc rào cản, vị trí sẽ được giải quyết.

Lợi thế chiến lược

  • Sử dụng ba đường trung bình di chuyển để đánh giá xu hướng, cải thiện tính chính xác
  • Thiết lập Stop Loss Stop để kiểm soát hiệu quả rủi ro của giao dịch đơn lẻ
  • Các tham số trung bình di chuyển có thể tùy chỉnh, áp dụng cho các giống khác nhau
  • Có 7 loại trung bình di chuyển khác nhau để lựa chọn và nhiều loại chiến lược

Rủi ro chiến lược và giải pháp

  • Các đường nét ba có thể tạo ra tín hiệu sai

Giải pháp: Điều chỉnh các tham số trung bình di chuyển để tránh các tín hiệu sai

  • Thiết lập tỷ lệ dừng lỗ quá mức

Giải pháp: Điều chỉnh đúng tỷ lệ Stop Loss Stop, không quá lớn và không quá nhỏ

  • Thiết lập tham số không đúng, dẫn đến tần suất giao dịch quá cao hoặc quá thấp

Giải pháp: Kiểm tra các tham số khác nhau để tìm ra sự kết hợp tốt nhất

Hướng tối ưu hóa chiến lược

Chiến lược giao chéo vàng ba đường trung bình có thể được tối ưu hóa theo các khía cạnh sau:

  • Kiểm tra các loại tham số khác nhau với độ dài khác nhau để tìm ra tham số tối ưu

Có thể thử nghiệm các kết hợp trung bình di chuyển với độ dài khác nhau hoặc các loại khác nhau để có được hiệu quả giao dịch tốt nhất

  • Thêm các chỉ số kỹ thuật khác để lọc tín hiệu

Các chỉ số khác như KDJ, MACD và các chỉ số khác có thể được thêm vào chiến lược, để xác thực đa yếu tố, lọc các tín hiệu sai

  • Các tham số lựa chọn dựa trên các đặc điểm của các giống khác nhau

Có thể rút ngắn chu kỳ trung bình di chuyển đối với các giống có biến động cao; kéo dài chu kỳ trung bình di chuyển đối với các giống có biến động thấp

  • Sử dụng phương pháp học máy để tìm các tham số tối ưu

Tự động đi qua các tham số thông qua thuật toán để nhanh chóng xác định các tham số tối ưu

Tóm tắt

Chiến lược giao chéo vàng ba đường trung bình là một chiến lược theo dõi xu hướng đơn giản và thực tế hơn. Nó sử dụng ba đường trung bình di chuyển để nắm bắt hướng xu hướng cùng lúc, đặt rủi ro kiểm soát dừng lỗ và có thể thu được lợi nhuận ổn định.

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

//@version=3
strategy("Kozlod - 3 MA strategy with SL/PT", shorttitle="kozlod_3ma", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 5)

// 
// author: Kozlod
// date: 2018-03-25
// 

////////////
// INPUTS //
////////////

ma_type        = input(title = "MA Type",            defval = "SMA", options = ['SMA', 'EMA', 'WMA', 'VWMA', 'HMA', 'SMMA', 'DEMA'])
short_ma_len   = input(title = "Short MA Length",    defval = 5,     minval = 1)
short_ma_src   = input(title = "Short MA Source",    defval = close)
medium_ma_len  = input(title = "Medium MA Length",   defval = 20,    minval = 2)
medium_ma_src  = input(title = "Medium MA Source",   defval = close)
long_ma_len    = input(title = "Long MA Length",     defval = 100,   minval = 3)
long_ma_src    = input(title = "Long MA Source",     defval = close)

sl_lev_perc    = input(title = "SL Level % (0 - Off)", type = float,   defval = 0,  minval = 0, step = 0.01)
pt_lev_perc    = input(title = "PT Level % (0 - Off)", type = float,   defval = 0,  minval = 0, step = 0.01)

// Set initial values to 0
short_ma  = 0.0
long_ma   = 0.0
medium_ma = 0.0

// Simple Moving Average (SMA)
if ma_type == 'SMA' 
    short_ma  := sma(short_ma_src,  short_ma_len)
    medium_ma := sma(medium_ma_src, medium_ma_len)
    long_ma   := sma(long_ma_src,   long_ma_len)

// Exponential Moving Average (EMA)
if ma_type == 'EMA'
    short_ma  := ema(short_ma_src,  short_ma_len)
    medium_ma := ema(medium_ma_src, medium_ma_len)
    long_ma   := ema(long_ma_src,   long_ma_len)

// Weighted Moving Average (WMA)
if ma_type == 'WMA'
    short_ma  := wma(short_ma_src,  short_ma_len)
    medium_ma := wma(medium_ma_src, medium_ma_len)
    long_ma   := wma(long_ma_src,   long_ma_len)

// Hull Moving Average (HMA)
if ma_type == 'HMA'
    short_ma  := wma(2*wma(short_ma_src,  short_ma_len  / 2) - wma(short_ma_src,  short_ma_len),  round(sqrt(short_ma_len)))
    medium_ma := wma(2*wma(medium_ma_src, medium_ma_len / 2) - wma(medium_ma_src, medium_ma_len), round(sqrt(medium_ma_len)))
    long_ma   := wma(2*wma(long_ma_src,   long_ma_len   / 2) - wma(long_ma_src,   long_ma_len),   round(sqrt(long_ma_len)))

// Volume-weighted Moving Average (VWMA)
if ma_type == 'VWMA'
    short_ma  := vwma(short_ma_src,  short_ma_len)
    medium_ma := vwma(medium_ma_src, medium_ma_len)
    long_ma   := vwma(long_ma_src,   long_ma_len)

// Smoothed Moving Average (SMMA)    
if ma_type == 'SMMA'
    short_ma  := na(short_ma[1])  ? sma(short_ma_src, short_ma_len)   : (short_ma[1]  * (short_ma_len  - 1) + short_ma_src)  / short_ma_len
    medium_ma := na(medium_ma[1]) ? sma(medium_ma_src, medium_ma_len) : (medium_ma[1] * (medium_ma_len - 1) + medium_ma_src) / medium_ma_len
    long_ma   := na(long_ma[1])   ? sma(long_ma_src,  long_ma_len)    : (long_ma[1]   * (long_ma_len   - 1) + long_ma_src)   / long_ma_len

// Double Exponential Moving Average (DEMA)
if ma_type == 'DEMA'
    e1_short  = ema(short_ma_src , short_ma_len)
    e1_medium = ema(medium_ma_src, medium_ma_len)
    e1_long   = ema(long_ma_src,   long_ma_len)
    
    short_ma  := 2 * e1_short  - ema(e1_short,  short_ma_len)
    medium_ma := 2 * e1_medium - ema(e1_medium, medium_ma_len)
    long_ma   := 2 * e1_long   - ema(e1_long,   long_ma_len)

/////////////
// SIGNALS //
/////////////

long_signal  = crossover( short_ma, medium_ma) and medium_ma > long_ma
short_signal = crossunder(short_ma, medium_ma) and medium_ma < long_ma

// Calculate PT/SL levels 
// Initial values 
last_signal    = 0
prev_tr_price  = 0.0
pt_level       = 0.0
sl_level       = 0.0

// Calculate previous trade price
prev_tr_price := (long_signal[1] and nz(last_signal[2]) != 1) or (short_signal[1] and nz(last_signal[2]) != -1) ? open : nz(last_signal[1]) != 0 ? prev_tr_price[1] : na

// Calculate SL/PT levels 
pt_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 + pt_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 - pt_lev_perc / 100)  : na
sl_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 - sl_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 + sl_lev_perc / 100)  : na

// Calculate if price hit sl/pt 
long_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) ==  1 and close >= pt_level
long_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) ==  1 and close <= sl_level

short_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) ==  -1 and close <= pt_level
short_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) ==  -1 and close >= sl_level

// What is last active trade? 
last_signal := long_signal ? 1 : short_signal ? -1 : long_hit_pt or long_hit_sl or short_hit_pt or short_hit_sl ? 0 : nz(last_signal[1])

//////////////
// PLOTTING //
//////////////

// Plot MAs
plot(short_ma,  color = red,    linewidth = 2)
plot(medium_ma, color = green,  linewidth = 2)
plot(long_ma,   color = yellow, linewidth = 2)


// Plot Levels 
plotshape(prev_tr_price, style = shape.cross, color = gray, location  = location.absolute, size = size.small)


plotshape(sl_lev_perc > 0 ? sl_level : na, style = shape.cross, color = red,   location  = location.absolute, size = size.small)
plotshape(pt_lev_perc > 0 ? pt_level : na, style = shape.cross, color = green, location  = location.absolute, size = size.small)

//////////////
// STRATEGY //
//////////////

strategy.entry("long",  true,  when = long_signal)
strategy.entry("short", false, when = short_signal)

strategy.close("long",  when = long_hit_pt  or long_hit_sl)
strategy.close("short", when = short_hit_pt or short_hit_sl)