Chiến lược dao động ngắn hạn dựa trên CCI và EMA


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

Chiến lược dao động ngắn hạn dựa trên CCI và EMA

Tổng quan

Chiến lược này là một chiến lược giao dịch short-line oscillating, kết hợp chỉ số EMA và chỉ số CCI để xác định xu hướng short-line của thị trường và tình trạng mua quá mức để nắm bắt cơ hội biến động giá short-line.

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

Chiến lược này chủ yếu sử dụng ba đường trung bình của 10 ngày EMA, 21 ngày EMA và 50 ngày EMA và chỉ số CCI để đánh giá thời gian vào và ra sân.

Lý luận cụ thể là: Khi đường trung bình ngắn hạn (EMA 10 ngày) vượt qua đường trung bình ngắn hạn (EMA 21 ngày) và đường trung bình ngắn hạn cao hơn đường trung bình dài hạn (EMA 50 ngày), và chỉ số CCI lớn hơn 0 thì xem là tín hiệu đa đầu, làm nhiều; khi đường trung bình ngắn hạn vượt qua đường trung bình ngắn hạn và đường trung bình ngắn hạn thấp hơn đường trung bình dài hạn, và chỉ số CCI nhỏ hơn 0 thì xem là tín hiệu đầu trống, làm trống.

Logic cân bằng là cân bằng khi đường trung bình ngắn hạn đi qua đường trung bình trung hạn.

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

  1. Kết hợp với hệ thống đường trung bình và chỉ số CCI, nó có thể xác định hiệu quả hướng xu hướng của biến động giá đường ngắn và tình trạng quá mua quá bán.

  2. Sử dụng đồng bộ và dead fork để đánh giá entries và exists, đơn giản và thực tế.

  3. Các tham số và chu kỳ của chỉ số CCI là hợp lý hơn, có thể loại bỏ một số tín hiệu giả.

  4. Sử dụng đường trung bình nhiều chu kỳ thời gian, bạn có thể có cơ hội điều hành tốt hơn trong thị trường chấn động.

Rủi ro chiến lược

  1. Các hoạt động ngắn có thể biến động lớn và có thể có nhiều lỗ hổng liên tục.

  2. Thiết lập tham số chỉ số CCI không đúng có thể làm tăng tín hiệu giả.

  3. Chiến lược này có thể gây ra nhiều lỗ nhỏ trong thời gian hồi phục.

  4. Chỉ phù hợp với các nhà giao dịch thường xuyên hoạt động trên đường ngắn, không phù hợp với việc nắm giữ đường dài.

Các biện pháp đối phó rủi ro tương ứng bao gồm: tối ưu hóa tham số CCI, điều chỉnh vị trí dừng lỗ, tăng điều kiện FILTER, v.v.

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

  1. Có thể thử nghiệm các kết hợp đường trung bình EMA với các độ dài khác nhau, tham số tối ưu hóa.

  2. Các chỉ số khác hoặc điều kiện Filter có thể được thêm vào để lọc một số tín hiệu giả. Ví dụ MACD, KDJ, v.v.

  3. Các khoản lỗ đơn lẻ có thể được kiểm soát bằng cách theo dõi động.

  4. Có thể kết hợp các chỉ số xu hướng với chu kỳ thời gian cao hơn, tránh hoạt động ngược.

Tóm tắt

Chiến lược này nói chung là một chiến lược biến động đường ngắn điển hình, sử dụng các chỉ số đồng bằng của chỉ số đồng bằng kết hợp với tình trạng mua bán quá mức của chỉ số CCI để nắm bắt cơ hội đảo ngược giá trong thời gian ngắn. Chiến lược này phù hợp với giao dịch thường xuyên trên đường ngắn, nhưng cần phải chịu một số áp lực dừng lỗ.

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

//@version=3
//study(title="Strat CCI EMA scalping", shorttitle="EMA-CCI-strat", overlay=true)
strategy("Strat CCI EMA scalping", shorttitle="EMA-CCI-strat", overlay=true)

exponential = input(true, title="Exponential MA")

// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

src = close

ma10 = exponential ? ema(src, 10) : sma(src, 10)
ma21 = exponential ? ema(src, 21) : sma(src, 21)
ma50 = exponential ? ema(src, 50) : sma(src, 50)

xCCI = cci(close, 200)

//buy_cond = cross(ma21, ma50) and ma10 > ma21 and (xCCI > 0)
//sell_cond = cross(ma21, ma50) and ma10 < ma21  and (xCCI < 0)

buy_cond = ma10 > ma21 and ma10 > ma50 and xCCI > 0
sell_cond = ma10 < ma21 and ma10 < ma50 and xCCI < 0



// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => buy_cond
exitLong() => ma10 < ma21
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => sell_cond
exitShort() => ma10 > ma21
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
//strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
//strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)




//longCondition = buy_cond
//if(longCondition)
//    strategy.entry("Long", strategy.long)
//    strategy.exit("Close Long", "Long", when = exitLong())
    
//shortCondition = sell_cond
//if(shortCondition)
//    strategy.entry("Short", strategy.short)
//    strategy.exit("Close Short", "Short",  when = exitShort())

//plotshape(buy_cond, style=shape.flag, color=green, size=size.normal)
//plotshape(sell_cond, style=shape.flag, color=red, size=size.normal)

c1 = buy_cond==1 ? lime : sell_cond==1 ? red : #a3a3a3 // color

plot( ma10, color=red, style=line, title="10", linewidth=1)
plot( ma21, color=orange, style=line, title="21", linewidth=1)
plot( ma50, color=c1, style=line, title="50", linewidth=3)

//alertcondition(buy_cond, title = "Buy Condition", message = "Buy Condition Alert")
//alertcondition(sell_cond, title = "Sell Condition", message = "Sell Condition Alert")