Golden Cross Keltner Channel Xu hướng theo chiến lược

Tác giả:ChaoZhang, Ngày: 2023-11-02 14:31:10
Tags:

img

Tổng quan

Chiến lược theo xu hướng kênh Golden Cross Keltner là một chiến lược chỉ giao dịch theo hướng xu hướng.

Nguyên tắc

Chiến lược này sử dụng hai đường trung bình động, một đường trung bình động ngắn hạn và một đường trung bình động dài hạn, để hình thành các thập tự vàng và thập tự chết để xác định hướng xu hướng. Đồng thời, nó sử dụng các số nhân được xác định bởi người dùng để vẽ các đường ray trên và dưới của Keltner Channel và tạo ra các tín hiệu giao dịch khi giá vượt qua kênh.

Cụ thể, chiến lược đầu tiên kiểm tra xem trung bình di chuyển dài hạn có cao hơn trung bình di chuyển ngắn hạn không, cho thấy một đường chéo vàng và xu hướng tăng.

Dựa trên xác định xu hướng, nếu giá phá vỡ trên đường ray trên, một tín hiệu dài được tạo ra. Nếu giá phá vỡ dưới đường ray dưới, một tín hiệu ngắn được tạo ra. Người dùng có thể điều chỉnh các khoảng thời gian MA và chiều rộng kênh để tùy chỉnh các thông số chiến lược.

Sau khi tham gia, chiến lược sử dụng số nhân ATR được xác định bởi người dùng để lấy lợi nhuận và dừng lỗ. Nó cũng cung cấp các điều kiện phá vỡ và dừng lỗ bổ sung để kiểm soát vị trí linh hoạt hơn.

Phân tích lợi thế

Chiến lược này kết hợp các lợi thế của việc theo dõi xu hướng và phá vỡ kênh, cho phép xác định xu hướng hiệu quả và nắm bắt cơ hội.

  1. Chữ thập vàng lọc ra các tín hiệu sai không phù hợp với xu hướng chính.

  2. Phá vỡ kênh với hướng xu hướng cải thiện độ chính xác nhập cảnh.

  3. Lợi nhuận và dừng lỗ giữ lợi nhuận và kiểm soát rủi ro.

  4. Điều chỉnh tham số linh hoạt phù hợp với các sản phẩm và môi trường khác nhau.

  5. Đi cả hai dài và ngắn, mở rộng khả năng áp dụng.

Phân tích rủi ro

Mặc dù có những lợi thế, một số rủi ro cần được chú ý:

  1. Mất cơ hội đảo ngược.

  2. Sự thay đổi xu hướng có thể dẫn đến tổn thất.

  3. Các thông số không phù hợp có thể gây ra giao dịch quá mức hoặc giao dịch thưa thớt.

  4. Có nguy cơ xảy ra qua đêm.

  5. Rủi ro phù hợp với đường cong.

Các giải pháp bao gồm tối ưu hóa tham số, điều chỉnh thời gian MA kịp thời và kiểm soát kích thước vị trí.

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

Có chỗ cải thiện thêm:

  1. Thêm thêm các chỉ số để xây dựng một mô hình đa yếu tố và cải thiện độ chính xác. ví dụ: MACD, RSI.

  2. Tối ưu hóa tham số thông qua máy học để thích nghi với thị trường.

  3. Quy tắc lợi nhuận và dừng lỗ năng động để cân bằng lợi nhuận và phần thưởng.

  4. Định giá vị trí năng động dựa trên biến động.

  5. Nghiên cứu các thông số tối ưu cho các sản phẩm khác nhau.

  6. Giảm tần suất giao dịch để giảm thiểu phí.

Kết luận

Chiến lược theo dõi xu hướng kênh Golden Cross Keltner nói chung là một hệ thống theo dõi xu hướng ổn định và đáng tin cậy. Bằng cách kết hợp lọc xu hướng và phá vỡ kênh, nó xác định các cơ hội có khả năng cao phù hợp với hướng xu hướng.


/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © OversoldPOS

//@version=5
// strategy("Keltner Channel Strategy by OversoldPOS", overlay=true,initial_capital = 100000,default_qty_type = strategy.percent_of_equity,default_qty_value = 10, commission_type = strategy.commission.cash_per_order, commission_value = 7)

// Parameters
length = input(21, title="MA Length")
Entrymult = input(1, title="Entry ATR")
profit_mult = input(4, title="Profit Taker")
exit_mult = input(-1, title="Exit ATR")

// Moving Average Type Input
ma_type = input.string("SMA", title="Moving Average Type", options=["SMA", "EMA", "WMA"])

// Calculate Keltner Channels for different ATR multiples
atr_value = ta.atr(length)

basis = switch ma_type
    "SMA" => ta.sma(close, length)
    "EMA" => ta.ema(close, length)
    "WMA" => ta.wma(close, length)
 

//
EntryKeltLong = basis + Entrymult * ta.atr(10)
EntryKeltShort = basis - Entrymult * ta.atr(10)
upper_channel1 = basis + 1 * ta.atr(10)
lower_channel1 = basis - 1 * ta.atr(10)
upper_channel2 = basis + 2 * ta.atr(10)
lower_channel2 = basis - 2 * ta.atr(10)
upper_channel3 = basis + 3 * ta.atr(10)
lower_channel3 = basis - 3 * ta.atr(10)
upper_channel4 = basis + 4 * ta.atr(10)
lower_channel4 = basis - 4 * ta.atr(10)

// Entry condition parameters
long_entry_condition = input(true, title="Long Positions")
short_entry_condition = input(true, title="Enable Short Positions")

// Additional conditions for long and short entries
is_long_entry = ta.ema(close, 20) > ta.ema(close, 50)
is_short_entry = ta.ema(close, 20) < ta.ema(close, 50)

// Additional conditions for long and short entries
MAShort =  input(50, title="Short MA for Golden Cross")
MALong =  input(200, title="Long MA for Golden Cross")
is_long_entry2 = ta.ema(close, MAShort) > ta.ema(close, MALong)
is_short_entry2 = ta.ema(close, MAShort) < ta.ema(close, MALong)

// Exit condition parameters
long_exit_condition1_enabled = input(true, title="Enable Long Profit Taker")
long_exit_condition2_enabled = input(true, title="Enable Long Stop")
short_exit_condition1_enabled = input(true, title="Enable Short Profit Taker")
short_exit_condition2_enabled = input(true, title="Enable Short Stop")

// Take Profit condition parameters
take_profit_enabled = input(true, title="Enable Take Profit Condition")

Takeprofit = basis + profit_mult * atr_value
STakeprofit = basis - profit_mult * atr_value

// Long entry condition
long_condition = long_entry_condition and ta.crossover(close, EntryKeltLong) and is_long_entry2

// Short entry condition
short_condition = short_entry_condition and ta.crossunder(close, EntryKeltShort) and is_short_entry2

// Exit conditions
long_exit_condition1 = long_exit_condition1_enabled and close > Takeprofit
long_exit_condition2 = long_exit_condition2_enabled and close < basis + exit_mult * atr_value
short_exit_condition1 = short_exit_condition1_enabled and close < STakeprofit
short_exit_condition2 = short_exit_condition2_enabled and close > basis - exit_mult * atr_value

// Strategy logic
if (long_condition)
    strategy.entry("Long", strategy.long)
if (short_condition)
    strategy.entry("Short", strategy.short)

if (long_exit_condition1 or long_exit_condition2)
    strategy.close("Long")

if (short_exit_condition1 or short_exit_condition2)
    strategy.close("Short")

// Moving Averages
var float MA1 = na
var float MA2 = na

if (ma_type == "SMA")
    MA1 := ta.sma(close, MAShort)
    MA2 := ta.sma(close, MALong)
else if (ma_type == "EMA")
    MA1 := ta.ema(close, MAShort)
    MA2 := ta.ema(close, MALong)
else if (ma_type == "WMA")
    MA1 := ta.wma(close, MAShort)
    MA2 := ta.wma(close, MALong)

// Plotting Keltner Channels with adjusted transparency
transparentColor = color.rgb(255, 255, 255, 56)

plot(upper_channel1, color=transparentColor, title="Upper Channel 1")
plot(lower_channel1, color=transparentColor, title="Lower Channel 1")
plot(upper_channel2, color=transparentColor, title="Upper Channel 2")
plot(lower_channel2, color=transparentColor, title="Lower Channel 2")
plot(upper_channel3, color=transparentColor, title="Upper Channel 3")
plot(lower_channel3, color=transparentColor, title="Lower Channel 3")
plot(upper_channel4, color=transparentColor, title="Upper Channel 4")
plot(lower_channel4, color=transparentColor, title="Lower Channel 4")
plot(basis, color=color.white, title="Basis")
plot(MA1, color=color.rgb(4, 248, 216), linewidth=2, title="Middle MA")
plot(MA2, color=color.rgb(220, 7, 248), linewidth=2, title="Long MA")


Thêm nữa