Chiến lược scalping dựa trên CCI và EMA

Tác giả:ChaoZhang, Ngày: 2024-01-31 16:01:21
Tags:

img

Tổng quan

Đây là một chiến lược giao dịch dao động ngắn hạn kết hợp chỉ số EMA và chỉ số CCI để xác định xu hướng ngắn hạn và mức mua quá mức / bán quá mức trên thị trường, để nắm bắt các cơ hội từ biến động giá ngắn hạn.

Chiến lược logic

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

Lý thuyết cụ thể là: Khi trung bình di chuyển ngắn hạn (10 ngày EMA) vượt trên trung bình di chuyển trung hạn (21- ngày EMA) và trung bình di chuyển ngắn hạn cao hơn trung bình di chuyển dài hạn (50 ngày EMA), và đồng thời chỉ số CCI lớn hơn 0, nó được coi là một tín hiệu tăng để đi dài. Khi trung bình di chuyển ngắn hạn vượt dưới trung bình di chuyển trung hạn và trung bình di chuyển ngắn hạn thấp hơn trung bình di chuyển dài hạn, và đồng thời chỉ số CCI thấp hơn 0, nó được coi là một tín hiệu giảm để đi ngắn.

Lý thuyết thoát là đóng vị trí khi đường trung bình động ngắn hạn vượt qua đường trung bình động trung hạn.

Ưu điểm

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

  2. Sử dụng đường chéo trung bình động để xác định các lối vào và lối ra là đơn giản và thực tế.

  3. Các tham số CCI và các thiết lập chu kỳ hợp lý hơn để lọc một số tín hiệu sai.

  4. Việc áp dụng nhiều khung thời gian của đường trung bình động có thể có được cơ hội giao dịch tốt hơn trong các thị trường dao động.

Rủi ro

  1. Sự biến động lớn trong các giao dịch ngắn hạn có thể dẫn đến việc dừng lỗ liên tiếp.

  2. Các thiết lập tham số CCI không chính xác có thể làm tăng tín hiệu sai.

  3. Trong thời gian giới hạn phạm vi và hợp nhất, chiến lược này có thể gặp nhiều lỗ nhỏ.

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

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

Hướng dẫn tối ưu hóa

  1. Các kết hợp khác nhau của chiều dài EMA có thể được thử nghiệm để tối ưu hóa các thông số.

  2. Các chỉ số hoặc điều kiện lọc khác có thể được thêm vào để lọc ra một số tín hiệu sai, chẳng hạn như MACD, KDJ v.v.

  3. Sử dụng stop loss động để kiểm soát lỗ đơn.

  4. Kết hợp các chỉ số xu hướng khung thời gian cao hơn có thể tránh giao dịch chống lại xu hướng.

Kết luận

Nhìn chung, đây là một chiến lược dao động ngắn hạn điển hình sử dụng sự chéo chéo của các đường trung bình động kết hợp với tình trạng mua quá mức / bán quá mức của chỉ số CCI để nắm bắt các cơ hội đảo ngược ngắn hạn. Chiến lược này phù hợp với giao dịch ngắn hạn thường xuyên, nhưng cần phải chịu được áp lực dừng lỗ nhất định. Sự ổn định và lợi nhuận của chiến lược có thể được cải thiện hơn nữa thông qua tối ưu hóa tham số và thêm điều kiệ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")

Thêm nữa