Chiến lược vượt qua trung bình di chuyển

Tác giả:ChaoZhang, Ngày: 2024-02-06 15:02:33
Tags:

img

Tổng quan

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.

Chiến lược logic

  1. 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.

  2. 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.

  3. 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.

  4. Sau khi nhập vào một vị trí, đặt dừng lỗ và lấy lợi nhuận.

Phân tích lợi thế

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.

Phân tích rủi ro

Các rủi ro tiềm ẩn chính của chiến lược này là:

  1. 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.

  2. Chọn không đúng thời gian để vào vị trí, dễ bị mắc kẹt.

  3. Khoảng cách dừng lỗ được đặt quá nhỏ.

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

Các hướng để tối ưu hóa chiến lược này bao gồm:

  1. 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.

  2. 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.

  3. Thêm các thuật toán học máy để đạt được tối ưu hóa tham số tự động.

  4. Kiểm tra hiệu quả của chiến lược này trên dữ liệu tần số cao.

Tóm lại

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")

Thêm nữa