Chiến lược giao dịch BTC dựa trên Crossover trung bình động

Tác giả:ChaoZhang, Ngày: 2023-12-07 14:56:50
Tags:

img

Tổng quan

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

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

Khi đường trung bình động 50 ngày vượt qua đường trung bình động 200 ngày để tạo thành đường chéo vàng, điều này cho thấy BTC đã bước vào thị trường tăng và tạo ra tín hiệu mua. Trong khi đó, khi đường trung bình động 50 ngày vượt qua đường trung bình động 200 ngày để tạo ra đường chéo chết, nó cho thấy BTC đã bước vào thị trường gấu và tạo ra tín hiệu bán.

Ngoài việc đánh giá tín hiệu trung bình động cơ cross vàngcross chết, chiến lược này cũng kết hợp một số chỉ số kỹ thuật bổ sung để hỗ trợ đánh giá, bao gồm:

  1. Chỉ số EMA: Tính toán chỉ số EMA với chiều dài + trượt, khi nó tăng cho thấy thị trường hiện tại đang tăng, chúng ta có thể mua.

  2. So sánh mối quan hệ giá trị giữa trung bình động và EMA: Nếu giá trị EMA cao hơn trung bình động 50 ngày, một tín hiệu mua được tạo ra.

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

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

Phân tích lợi thế

Chiến lược này có những lợi thế sau:

  1. Sử dụng đường trung bình động như là tín hiệu giao dịch chính có thể lọc tiếng ồn thị trường và xác định hướng xu hướng.

  2. Kết hợp với nhiều chỉ số kỹ thuật phụ trợ có thể tăng độ tin cậy tín hiệu và lọc ra các tín hiệu sai.

  3. Việc áp dụng các chiến lược dừng lỗ thích hợp có thể kiểm soát hiệu quả lỗ đơn.

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

  5. Có rất nhiều tham số có thể cấu hình được điều chỉnh theo sở thích của riêng 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. Đường trung bình động tự nó có một thuộc tính trì hoãn mạnh mẽ, có thể bỏ lỡ cơ hội đảo ngược giá nhanh chóng.

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

  3. Các thiết lập stop-loss không chính xác có thể dẫn đến tổn thất lớn hơn.

  4. Cài đặt tham số không phù hợp (như chiều dài trung bình động, v.v.) cũng sẽ ảnh hưởng đến kết quả chiến lược.

Các giải pháp tương ứng:

  1. Giảm chu kỳ trung bình động một cách thích hợp và tăng phạm vi tối ưu hóa tham số.

  2. Tăng số lượng dữ liệu backtest để kiểm tra chất lượng tín hiệu.

  3. Thả lỏng đúng phạm vi dừng lỗ trong khi thiết lập dừng lợi nhuận.

  4. Tăng tối ưu hóa tham số để tìm kết hợp tham số tốt nhất.

Hướng dẫn 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. Tăng các thuật toán học máy để đạt được tối ưu hóa tham số tự động.

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

  3. Hãy thử các chiến lược đột phá để xác định sự đột phá giá.

  4. Sử dụng deep learning để dự đoán xu hướng giá.

  5. Tối ưu hóa các cơ chế dừng lỗ để đạt được dừng lỗ theo dõi năng động.

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

Tóm lại

Chiến lược này chủ yếu đưa ra quyết định giao dịch dựa trên đường chéo trung bình động của BTC, được hỗ trợ bởi các chỉ số kỹ thuật như EMA để lọc tín hiệu. Chiến lược có khả năng theo dõi xu hướng mạnh mẽ và khả năng cấu hình cao, làm cho nó phù hợp với chiến lược giao dịch định lượng của người mới bắt đầu. Nhưng cũng có một số rủi ro chậm lại cần phải được bảo vệ. Các hướng tối ưu hóa tiếp theo có thể từ nhiều chiều như học máy, chiến lược danh mục đầu tư, chiến lược dừng lỗ, v.v.


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



Thêm nữa