Chiến lược này sử dụng ba đường trung bình động của các giai đoạn khác nhau để xác định hướng xu hướng thị trường. Nó đi vào một vị trí khi ba đường trung bình động đang di chuyển theo cùng một hướng. Đồng thời, kết hợp với giá cao nhất hoặc thấp nhất của các nến N gần đây nhất, nó đặt dừng lỗ và lấy lợi nhuận.
Tính toán dài hạn, trung hạn và ngắn hạn ba trung bình động. Người dùng có thể tự đặt các khoảng thời gian. Các giá trị mặc định là 20, 10 và 5.
So sánh các hướng của ba đường trung bình động. Khi đường trung bình động ngắn hạn vượt qua đường trung hạn, và đường trung hạn vượt qua đường dài, nó được đánh giá là thị trường tăng. Khi đường ngắn hạn vượt qua đường trung hạn, và đường trung hạn vượt qua đường dài, nó được đánh giá là thị trường gấu.
Trong một thị trường tăng giá, nếu giá vượt qua mức giá cao nhất của các nến N gần đây nhất, đi dài; trong một thị trường gấu, nếu giá vượt qua mức giá thấp nhất của các nến N gần đây nhất, đi ngắn. N cũng là một tham số có thể tùy chỉnh bởi người dùng.
Sau khi nhập vào một vị trí, đặt dừng lỗ và lấy lợi nhuận.
Chiến lược này kết hợp các chỉ số trung bình động và biểu đồ nến, có thể xác định tốt hơn xu hướng thị trường.
Trong khi đó, vào một vị trí khi phá vỡ giá cao nhất hoặc thấp nhất của n n n n n n n n n n n gần đây nhất là một chiến lược phá vỡ phổ biến. Nhìn chung, ý tưởng chiến lược là rõ ràng và dễ thực hiện.
Các rủi ro tiềm ẩn chính của chiến lược này là:
Khả năng đánh giá sai về hướng của ba đường trung bình động Nếu đường trung bình động trung bình ngắn hạn gây ra tín hiệu sai, có thể gây ra tổn thất không cần thiết.
Chọn không đúng thời gian để vào vị trí, dễ bị mắc kẹt.
Khoảng cách dừng lỗ được đặt quá nhỏ.
Các hướng để tối ưu hóa chiến lược này bao gồm:
Thêm các chỉ số khác để lọc để đảm bảo độ tin cậy của tín hiệu trung bình động. Ví dụ, thêm đánh giá dài / ngắn về khối lượng giao dịch.
Tối ưu hóa thời gian trung bình động để thích nghi tốt hơn với các sản phẩm khác nhau.
Thêm các thuật toán học máy để đạt được tối ưu hóa tham số tự động.
Kiểm tra hiệu quả của chiến lược này trên dữ liệu tần số cao.
Chiến lược này tương đối đơn giản và phổ quát. Ý tưởng rõ ràng với khả năng thực hiện mạnh mẽ. Là một ví dụ về hệ thống chéo trung bình động, nó là một lựa chọn phổ biến cho người mới bắt đầu. Thông qua tối ưu hóa thích hợp, hệ thống có thể được áp dụng cho nhiều sản phẩm và khung thời gian hơn để có được lợi nhuận ổn định.
/*backtest start: 2023-01-30 00:00:00 end: 2024-02-05 00:00:00 period: 1d basePeriod: 1h 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/ // © hobbiecode //@version=5 strategy("Cross Breakout - Hobbiecode", shorttitle="Cross - HOBBIE", overlay=true) // User-defined input for moving averages long_period = input(20, title="Long Period") medium_period = input(10, title = "Medium Period") short_period = input(5, title="Short Period") type_ma = input.string("SMA", title = "MA type", options = ["SMA", "EMA"]) candles_back = input(10, title = "Candles Back") bars_valid = input(3, title = "Bars to Exit") // Calculating moving averages long_ma = 0.0 medium_ma = 0.0 short_ma = 0.0 if type_ma == "SMA" long_ma := ta.sma(close, long_period) medium_ma := ta.sma(close, medium_period) short_ma := ta.sma(close, short_period) else long_ma := ta.ema(close, long_period) medium_ma := ta.ema(close, medium_period) short_ma := ta.ema(close, short_period) // Plot moving averages plot(long_ma, title="Long Moving Average", color=color.red) plot(medium_ma, title = "Medium Moving Average", color = color.yellow) plot(short_ma, title="Short Moving Average", color=color.green) // Check last min/max last_min = ta.lowest(candles_back) last_max = ta.highest(candles_back) // Strategy logic for crossing of moving averages longCondition = short_ma > medium_ma and medium_ma > long_ma and high == last_max shortCondition = short_ma < medium_ma and medium_ma < long_ma and low == last_min longCondition_entry = longCondition and strategy.position_size == 0 shortCondition_entry = shortCondition and strategy.position_size == 0 // Check last min/max for operation last_min_op = ta.lowest(candles_back)[1] last_max_op = ta.highest(candles_back)[1] // Plot lines var line r1Line = na // Entry orders // if (longCondition) // from_line = chart.point.now(high) // to_line = chart.point.from_index(bar_index + candles_back, high) // r1Line := line.new(from_line, to_line, color = color.green, width = 2) if longCondition_entry and ta.crossover(close,last_max_op) strategy.entry("Long", strategy.long) strategy.exit("Exit Long", from_entry="Long", stop=low) // if (shortCondition) // from_line = chart.point.now(low) // to_line = chart.point.from_index(bar_index + candles_back, low) // r1Line := line.new(from_line, to_line, color = color.red, width = 2) if shortCondition_entry and ta.crossunder(close,last_min_op) strategy.entry("Short", strategy.short) strategy.exit("Exit Short", from_entry="Short", stop=high) if ta.barssince(longCondition_entry) >= bars_valid strategy.close("Long") if ta.barssince(shortCondition_entry) >= bars_valid strategy.close("Short")