Chiến lược đột phá giao cắt đường trung bình động


Ngày tạo: 2024-02-06 15:02:33 sửa đổi lần cuối: 2024-02-06 15:02:33
sao chép: 1 Số nhấp chuột: 671
1
tập trung vào
1617
Người theo dõi

Chiến lược đột phá giao cắt đường trung bình động

Tổng quan

Chiến lược này sử dụng moving averages của ba chu kỳ khác nhau để xác định xu hướng của thị trường. Đặt vị trí khi ba moving averages tương đồng. Đồng thời, kết hợp với giá cao nhất hoặc thấp nhất của đường N gốc K gần đây nhất, thiết lập lệnh dừng lỗ.

Nguyên tắc chiến lược

  1. Tính trung bình di chuyển dài hạn, trung hạn và ngắn hạn. Người dùng có thể tự thiết lập chu kỳ.

  2. So sánh hướng của ba đường trung bình di chuyển. Khi trung bình di chuyển ngắn hạn đi trên trung bình, trung bình đi trên dài hạn, đánh giá là thị trường nhiều đầu. Khi trung bình di chuyển ngắn hạn đi dưới trung bình, trung bình đi dưới dài hạn, đánh giá là thị trường đầu không.

  3. Trong thị trường đa đầu, nếu giá phá vỡ giá cao nhất trong dòng N gốc K gần nhất, hãy làm nhiều; trong thị trường trống, nếu giá phá vỡ giá thấp nhất trong dòng N gốc K gần nhất, hãy làm trống. N cũng là tham số tùy chỉnh cho người dùng.

  4. Sau khi vào vị trí, đặt lệnh dừng lỗ. Chấm dứt thị trường đa đầu là giá thấp nhất trong đường N gốc K gần nhất, dừng thị trường trống là giá cao nhất trong đường N gốc K gần nhất.

Phân tích lợi thế

Chiến lược này kết hợp với chỉ số trung bình di chuyển và đồ họa đường K, có thể đánh giá tốt hơn về xu hướng thị trường. Đồng thời, thiết lập điểm dừng lỗ hợp lý, có lợi cho việc tránh thua lỗ lớn.

Chiến lược này sử dụng ba đường trung bình di chuyển để đánh giá khả năng tin cậy của thị trường cao hơn so với các chỉ số như đường trung bình di chuyển đơn lẻ. Đồng thời, phá vỡ mức giá cao nhất hoặc giá thấp nhất gần đây của đường N gốc K vào vị trí vị trí là chiến lược phá vỡ phổ biến hơn. Nhìn chung, chiến lược này rõ ràng và dễ thực hiện.

Phân tích rủi ro

Những rủi ro chính mà chiến lược này có thể gây ra là:

  1. Ba đường trung bình di chuyển định hướng xác định xác suất sai. Nếu trung bình di chuyển ngắn hạn gây ra tín hiệu sai, có thể dẫn đến tổn thất không cần thiết.

  2. Lựa chọn thời gian đột phá vào không phù hợp, dễ bị mắc kẹt. Lựa chọn thời gian đột phá vào nên được tối ưu hóa thích hợp.

  3. Cài đặt khoảng cách dừng là quá nhỏ, mở rộng khoảng cách dừng sẽ giúp cho giá cả nhiều hơn Running Room.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa theo các hướng sau:

  1. Thêm các bộ lọc cho các chỉ số khác để đảm bảo độ tin cậy của tín hiệu trung bình di chuyển. Ví dụ: tăng số lượng giao dịch.

  2. Tối ưu hóa các tham số chu kỳ của trung bình di chuyển để phù hợp hơn với các giống khác nhau.

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

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

Tóm tắt

Chiến lược này nói chung là đơn giản, phổ biến, có ý tưởng rõ ràng và khả thi thực tế. Là một ví dụ về hệ thống chéo trung bình di chuyển, nó là lựa chọn phổ biến cho người mới bắt đầu. Bằng cách tối ưu hóa thích hợp, hệ thống có thể được áp dụng cho nhiều giống và thời gian rộng hơn, để có được lợi nhuận ổn định.

Mã nguồn chiến lược
/*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")