CCI + MA Crossover Pullback Buy Strategy là một chiến lược giao dịch định lượng kết hợp Chỉ số kênh hàng hóa (CCI) và tín hiệu chéo trung bình động kép. Chiến lược mua khi giá kéo trở lại mức trung bình di chuyển nhanh và CCI chỉ ra điều kiện bán quá mức sau khi chéo tăng. Nó bán khi giá tăng lên mức trung bình di chuyển nhanh và CCI chỉ ra điều kiện mua quá mức sau khi chéo giảm. Bằng cách kết hợp CCI và tín hiệu chéo trung bình di chuyển kép, chiến lược này có thể nắm bắt tốt hơn các cơ hội xu hướng trong khi đạt được các điểm vào và ra tốt hơn thông qua mua lại và bán tăng, do đó cải thiện tỷ lệ rủi ro-lợi nhuận.
CCI + MA Crossover Pullback Buy Strategy là một chiến lược giao dịch định lượng kết hợp các lợi thế của việc theo xu hướng và bước vào xu hướng ngược. Bằng cách nắm bắt hướng xu hướng với các đường trung bình động kép và xác định các khu vực mua quá mức / bán quá mức với chỉ số CCI, trong khi chờ đợi giá giảm và tăng giá để đạt được giá nhập tốt hơn, chiến lược có khả năng cải thiện lợi nhuận và tỷ lệ rủi ro-lợi nhuận đến một mức độ nhất định. Tuy nhiên, chiến lược cũng phải đối mặt với các rủi ro như tối ưu hóa tham số, thị trường hỗn loạn và thay đổi xu hướng đột ngột.
/*backtest start: 2024-04-01 00:00:00 end: 2024-04-30 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © tradedots //@version=5 strategy("CCI + MA Crossover Pullback Buy Strategy [TradeDots]", overlay=true) ma(source, length, type) => type == "SMA" ? ta.sma(source[1], length) : type == "EMA" ? ta.ema(source[1], length) : type == "SMMA (RMA)" ? ta.rma(source[1], length) : type == "WMA" ? ta.wma(source[1], length) : type == "VWMA" ? ta.vwma(source[1], length) : na //CCI settings cci_coloring = input.bool(true, "CCI Background Color", group = "Commodity channel index") cci_length = input.int(20,"CCI Length", group = "Commodity channel index") cci_ma_type = input.string("EMA","CCI MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group = "Commodity channel index") cci_soruce = input(hlc3, "CCI Source", group = "Commodity channel index") cci_threshold = input.int(100, "CCI Threshold", group = "Commodity channel index") cci_ma = ma(cci_soruce, cci_length, cci_ma_type) cci = (cci_soruce - cci_ma) / (0.015 * ta.dev(cci_soruce, cci_length)) bgcolor(cci > cci_threshold and cci_coloring ? color.new(#f9396a, 80) : cci < -cci_threshold and cci_coloring? color.new(#9cff87, 80) : na, title = "CCI Overbought / Oversold") //ma crossover settings input_crossover_labels = input.bool(true, "Show Crossover Labels", group="Moving average") fastma_type = input.string("EMA","", inline="fastma", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Moving average") fastma_source = input(close, "", inline="fastma", group="Moving average") fastma_length = input.int(10, "", inline="fastma", minval=1,group="Moving average") fastma_color = input(#e2fdff, "", inline="fastma",group="Moving average") fastma = ma(fastma_source, fastma_length, fastma_type) fastmaPlot = plot(fastma, color = #b7e4c7, linewidth = 2, title = "Fast MA") slowma_type = input.string("EMA","", inline="slowma", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Moving average") slowma_source = input(close, "", inline="slowma", group="Moving average") slowma_length = input.int(30, "", inline="slowma", minval=1,group="Moving average") slowma_color = input(#e2fdff, "", inline="slowma",group="Moving average") slowma = ma(slowma_source, slowma_length, slowma_type) slowmaPlot = plot(slowma, color = #2d6a4f, linewidth = 2, title = "Slow MA") bullish_crossover = ta.crossover(fastma, slowma) bearish_crossover = ta.crossunder(fastma, slowma) // // strategy // if bullish_crossover and input_crossover_labels // line.new(bar_index, close, bar_index, close * 1.01, extend = extend.both, color = color.new(#9cff87, 30), style = line.style_dotted, width = 3) // label.new(bar_index,low, "Bullish Crossover", style = label.style_label_up, color = #9cff87) // else if bearish_crossover and input_crossover_labels // line.new(bar_index, close, bar_index, close * 1.01, extend = extend.both, color = color.new(#f9396a, 30), style = line.style_dotted, width = 3) // label.new(bar_index, high, "Bearish Crossover", style = label.style_label_down, color = #f9396a, textcolor = color.white) if fastma > slowma and close[1] < fastma and close > open and cci < -cci_threshold strategy.entry("Long", strategy.long) // if strategy.opentrades == 0 or strategy.opentrades.size(strategy.opentrades -1) < 0 // label.new(bar_index,low, "🟢 Long", style = label.style_label_up, color = #9cff87) if fastma < slowma and close[1] > fastma and close < open and cci > cci_threshold strategy.entry("Short", strategy.short) // if strategy.opentrades == 0 or strategy.opentrades.size(strategy.opentrades -1) > 0 // label.new(bar_index, high, "🔴 Short", style = label.style_label_down, color = #f9396a, textcolor = color.white)