Chiến lược giao dịch dựa trên đường trung bình động golden cross và dead cross


Ngày tạo: 2023-12-07 14:56:50 sửa đổi lần cuối: 2023-12-07 14:56:50
sao chép: 0 Số nhấp chuột: 843
1
tập trung vào
1619
Người theo dõi

Chiến lược giao dịch dựa trên đường trung bình động golden cross và dead cross

Tổng quan

Chiến lược này dựa trên các tín hiệu giao dịch giao dịch 50 ngày và 200 ngày của BTC, kết hợp với các chỉ số kỹ thuật bổ sung để phát ra tín hiệu mua và bán. Chiến lược này chủ yếu áp dụng cho cặp tiền tệ BTC / USDT có đặc điểm xu hướng rõ ràng.

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

Khi đường trung bình di chuyển 50 ngày vượt qua đường trung bình di chuyển 200 ngày và tạo ra các ngã ba kim loại, BTC đi vào thị trường đa đầu và tạo ra tín hiệu mua. Còn khi đường trung bình di chuyển 50 ngày đi xuống vượt qua đường trung bình di chuyển 200 ngày và tạo ra các ngã ba chết, BTC đi vào thị trường trống và tạo ra tín hiệu bán.

Bên cạnh việc đánh giá các tín hiệu chuyển động trung bình và ngã, chiến lược này đã thêm một số chỉ số kỹ thuật bổ sung để hỗ trợ đánh giá, bao gồm:

  1. Chỉ số EMA: tính một chỉ số EMA với độ dài + bù đắp, có thể mua khi nó tăng lên cho thấy hiện tại đang ở thị trường đa đầu.

  2. So sánh quan hệ số của trung bình di chuyển với EMA: Nếu giá trị EMA cao hơn trung bình di chuyển 50 ngày, sẽ tạo ra phán quyết mua.

  3. Kiểm tra giá giảm hơn 1% so với mức thấp của đường K trước đó, và nếu đáp ứng sẽ tạo ra tín hiệu bán.

Bằng cách kết hợp một số chỉ số trên, bạn có thể lọc ra một số tín hiệu sai và đưa ra quyết định giao dịch chiến lược.

Phân tích lợi thế

Chiến lược này có một số lợi thế:

  1. Sử dụng trung bình di chuyển như là tín hiệu giao dịch chính, có thể lọc tiếng ồn thị trường, nhận ra xu hướng.

  2. Kết hợp với nhiều chỉ số kỹ thuật phụ trợ như EMA, có thể tăng cường độ tin cậy của tín hiệu, lọc tín hiệu giả.

  3. Sử dụng chiến lược dừng lỗ thích hợp, bạn có thể kiểm soát hiệu quả tổn thất đơn lẻ.

  4. Logic giao dịch đơn giản, dễ hiểu và phù hợp cho người mới bắt đầu giao dịch số lượng.

  5. Các tham số có thể được cấu hình nhiều hơn, có thể điều chỉnh theo sở thích của bạn.

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro cần lưu ý:

  1. Các trung bình di chuyển tự nó có tính chậm trễ và có thể bỏ lỡ cơ hội biến đổi giá nhanh chóng.

  2. Các chỉ số hỗ trợ làm tăng số lượng quy tắc và tăng khả năng tạo ra tín hiệu sai.

  3. Thiết lập dừng lỗ không đúng cách có thể dẫn đến sự gia tăng lỗ.

  4. Thiết lập tham số không đúng (ví dụ như chiều dài đường trung bình di chuyển) cũng ảnh hưởng đến hiệu quả của chiến lược.

Giải pháp tương ứng:

  1. Giảm thời gian trung bình di chuyển thích hợp, tăng phạm vi tối ưu hóa tham số.

  2. Tăng lượng dữ liệu phản hồi, kiểm tra chất lượng tín hiệu.

  3. Giảm mức dừng lỗ một cách thích hợp, đồng thời thiết lập giới hạn lợi nhuận.

  4. Thêm tối ưu hóa tham số, tìm kiếm sự kết hợp tham số tốt nhất.

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

Chiến lược này cũng có thể được tối ưu hóa theo các hướng sau:

  1. Thêm các thuật toán học máy để tối ưu hóa các tham số tự động.

  2. Thêm nhiều chỉ số phụ, xây dựng nhiều chiến lược con, và đưa ra quyết định thông qua cơ chế bỏ phiếu.

  3. Hãy thử chiến lược Breakout để xác định mức giá phá vỡ.

  4. Sử dụng Deep Learning để dự đoán xu hướng giá cả

  5. Tối ưu hóa cơ chế dừng lỗ, thực hiện theo dõi động của dừng lỗ.

Các tối ưu hóa trên có thể cải thiện độ chính xác của quyết định, tăng lợi nhuận và ổn định của chiến lược.

Tóm tắt

Chiến lược này chủ yếu dựa trên giao dịch trung bình di chuyển của BTC để ra quyết định giao dịch, hỗ trợ các chỉ số kỹ thuật như EMA để lọc tín hiệu. Chiến lược này có khả năng theo dõi xu hướng mạnh mẽ, khả năng cấu hình cao, phù hợp với chiến lược nhập cảnh giao dịch định lượng.

Mã nguồn chiến lược
/*backtest
start: 2023-11-06 00:00:00
end: 2023-12-06 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('JayJay BTC Signal', overlay=true, initial_capital=100, currency='USD', default_qty_value=100, default_qty_type=strategy.percent_of_equity, commission_value=0, calc_on_every_tick=true)

securityNoRepaint(sym, tf, src) => request.security(sym, tf, src[barstate.isrealtime ? 1 : 0])[barstate.isrealtime ? 0 : 1]

//200 50 Moving Average
ma50Len = input.int(50, minval=1, title='MA50-Length')
ma50Src = input(close, title='MA50-Source')
ma50Show = input(true, title='Show SMA50 on chart')
ma50Close = ta.sma(ma50Src, ma50Len)
ma50CloseTimeframe = input.timeframe("240", "Ma50 Timeframe", group = "EMA Options")
ma50Open = ta.sma(open, ma50Len)
ma200Len = input.int(200, minval=1, title='MA200-Length')
ma200Src = input(close, title='MA200-Source')
ma200Show = input(true, title='Show SMA200 on chart')
ma200CloseTimeframe = input.timeframe("D", "Ma200 Timeframe", group = "EMA Options")
ma200Close = ta.sma(ma200Src, ma200Len)
ma200Open = ta.sma(open, ma200Len)
//plot(ma200Close, color=color.new(#0b6ce5, 0), title='MA200')
//plot(ma50Close, color=color.new(#00d8ff, 0), title='MA50')

sma50 = securityNoRepaint(syminfo.tickerid, ma50CloseTimeframe, ma50Close)
plot(sma50 and ma50Show ? sma50 : na, color=color.new(#00d8ff, 0), title='SMA50')
sma200 = securityNoRepaint(syminfo.tickerid, ma200CloseTimeframe, ma200Close)
plot(sma200 and ma200Show ? sma200 : na, color=color.new(#00d8ff, 0), title='SMA200')

// Short/Long EMA
// Define the offset value
EMAOffsetValue = input.int(2, title='EMA Offset', minval=0)
emaplot = input(true, title='Show EMA on chart')
len = input.int(20, minval=1, title='ema Length') + EMAOffsetValue
emaCloseTimeframe = input.timeframe("240", "EMA 1 Timeframe", group = "EMA Options")
emaOpen = ta.ema(open, len)
emaClose = ta.ema(close, len)

ema = securityNoRepaint(syminfo.tickerid, emaCloseTimeframe, emaClose)

up = emaClose > ema[1]
down = emaClose < ema[1]
mycolor = up ? color.green : down ? color.red : color.blue

plot(ema and emaplot ? ema : na, title='Signal EMA', color=mycolor, linewidth=3)
//plot(emaClose and emaplot ? emaClose : na, title='Signal 20 EMA', color=color.yellow, linewidth=3)

ma50GreaterThanMa200 = sma50 > sma200

last3BarUp = ema > ema[1]

startLong = up and ema > sma50 and ma50GreaterThanMa200 and (100 - (sma50 / ema * 100) > 1.0)

startFrom = input(timestamp("20 Jan 2000 00:00"), "StartFrom")

yearFilter = true

alertLongPositionMessage = "{\"direction:\": \"long\", \"action\": \"{{strategy.order.action}}\", \"price\": \"{{strategy.order.price}}\", \"qty\": \"{{strategy.position_size}}\", \"symbol\": \"{{ticker}}\", \"date\": \"{{time}}\"}"

if true and startLong and yearFilter
    strategy.entry('Long', strategy.long, comment = "Long", alert_message = alertLongPositionMessage)

longStopLossLevel = open * 0.05
strategy.exit('StopLoss', from_entry='Long',comment = "StopLoss!", loss=longStopLossLevel, profit=close * 0.3, alert_message = alertLongPositionMessage)
longPercentageChange = low / close[1] * 100 - 100
is1PercentLower = longPercentageChange < -0.1
closeLongPositionWhen = (down and is1PercentLower) or (emaClose < sma50)
if closeLongPositionWhen
    strategy.close('Long', comment = "Fuck It!", alert_message =  alertLongPositionMessage)

bgcolor(startLong ? color.green : na, transp=90)