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


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

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

Tổng quan

Chiến lược giao dịch chéo trung bình chuyển động động (Dynamic Moving Average Crossover Combo Strategy) là một chiến lược giao dịch tổng hợp kết hợp nhiều chỉ số kỹ thuật và phát hiện giai đoạn thị trường. Nó tính toán động sự biến động của thị trường, đánh giá ba giai đoạn của thị trường dựa trên khoảng cách và biến động của giá so với trung bình di chuyển dài hạn: chấn động, xu hướng và sắp xếp. Trong các giai đoạn thị trường khác nhau, chiến lược sử dụng các quy tắc nhập vào và ra thị trường khác nhau, đồng thời kết hợp nhiều chỉ số như chéo EMA / SMA, MACD và Bollinger Bands để phát ra tín hiệu mua và bán.

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

Tính năng biến động của thị trường

Sử dụng chỉ số ATR để tính toán biến động hàng ngày của thị trường trong 14 ngày gần đây. Sau đó lọc biến động trung bình di chuyển đơn giản 100 ngày để có được biến động trung bình.

Xác định giai đoạn thị trường

Tính khoảng cách giữa giá và trung bình di chuyển đơn giản 200 ngày. Nếu khoảng cách vượt quá mức biến động trung bình 1,5 lần và hướng được xác định rõ ràng, nó sẽ được coi là xu hướng. Nếu biến động hiện tại vượt quá mức biến động trung bình 1,5 lần, nó sẽ được coi là biến động.

EMA/SMA chéo

Chu kỳ EMA nhanh là 10 ngày, chu kỳ SMA chậm là 30 ngày. Khi EMA nhanh vượt qua SMA chậm, nó tạo ra tín hiệu mua.

MACD

Tính toán tham số 12, 26, 9 MACD.

Bollinger Bands

Tính độ chênh lệch tiêu chuẩn trong 20 ngày Channel. Nếu chiều rộng của kênh nhỏ hơn SMA 20 ngày của chính nó, thì sẽ được coi là thời gian sắp xếp.

Quy tắc nhập cảnh

Giai đoạn chấn động: Giai đoạn đường giao thoa nhanh hoặc MACD trục trặc, và giá đóng cửa trong Bollinger Bands, thì nhập cảnh được thực hiện nhiều hơn.

Thời kỳ xu hướng: Giao lộ đường nhanh hoặc MACD trục biến chính xác vào nhiều hơn.

Thời gian sắp xếp: Dễ dàng và nhanh chóng, các dòng giao nhau, và giá đóng cửa cao hơn so với Band thấp hơn để tham gia nhiều hơn.

Quy tắc chơi

Nếu đáp ứng các điều kiện sau: MACD có hai đường K liên tiếp là âm, và giá đóng cửa giảm hai ngày liên tiếp.

Trong thời kỳ chấn động, RSI có thể đi vào khu vực mua quá mức.

Thời gian sắp xếp: Ngoài ra, khi giá thấp hơn Upper Band thì ra sân.

Phân tích lợi thế

Đây là một chiến lược giao dịch thông minh kết hợp với sự phán đoán của môi trường thị trường, với những lợi thế sau:

  1. Hành động có hệ thống, giảm sự can thiệp chủ quan.

  2. Thêm khả năng thích ứng với các tham số chiến lược điều chỉnh theo môi trường thị trường.

  3. Kết hợp nhiều chỉ số, tăng độ chắc chắn tín hiệu.

  4. Bollinger Bands tự động dừng lỗ, giảm rủi ro.

  5. Các nhà nghiên cứu đã tìm ra một cách để phân tích các tín hiệu giả.

  6. Động lực dừng lỗ, theo dõi xu hướng và lợi nhuận.

Phân tích rủi ro

Những rủi ro chính là:

  1. Thiết lập tham số không đúng có thể dẫn đến thất bại của chiến lược.

  2. Các sự kiện bất ngờ gây ra sự thất bại của mô hình.

  3. Lưu ý chọn nhà môi giới có phí thấp hơn.

  4. Gói đa chỉ số làm tăng sự phức tạp của chiến lược.

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

Có thể tiếp tục tối ưu hóa từ các khía cạnh sau:

  1. Tối ưu hóa tiêu chuẩn đánh giá môi trường thị trường, tăng độ chính xác.

  2. Thêm mô-đun học máy để thực hiện điều chỉnh tham số.

  3. Kết hợp với xử lý văn bản để đánh giá rủi ro của sự cố lớn.

  4. Đánh giá lại nhiều thị trường để tìm ra sự kết hợp tốt nhất.

  5. Thêm một chiến lược trailing stop.

Tóm tắt

Chiến lược giao dịch chéo trung bình chuyển động là một chiến lược giao dịch thông minh đa chỉ số. Nó có thể kết hợp các tham số điều chỉnh môi trường thị trường để thực hiện giao dịch có hệ thống theo định nghĩa điều kiện. Nó có khả năng thích ứng và xác định mạnh mẽ.

Mã nguồn chiến lược
/*backtest
start: 2024-01-28 00:00:00
end: 2024-02-04 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Improved Custom Strategy", shorttitle="ICS", overlay=true)

// Volatility
volatility = ta.atr(14)
avg_volatility_sma = ta.sma(volatility, 100)
avg_volatility = na(avg_volatility_sma) ? 0 : avg_volatility_sma

// Market Phase detection
long_term_ma = ta.sma(close, 200)
distance_from_long_term_ma = close - long_term_ma
var bool isTrending = math.abs(distance_from_long_term_ma) > 1.5 * avg_volatility and not na(distance_from_long_term_ma)
var bool isVolatile = volatility > 1.5 * avg_volatility

// EMA/MA Crossover
fast_length = 10
slow_length = 30
fast_ma = ta.ema(close, fast_length)
slow_ma = ta.sma(close, slow_length)
crossover_signal = ta.crossover(fast_ma, slow_ma)

// MACD
[macdLine, signalLine, macdHistogram] = ta.macd(close, 12, 26, 9)
macd_signal = crossover_signal or (macdHistogram > 0)

// Bollinger Bands
source = close
basis = ta.sma(source, 20)
upper = basis + 2 * ta.stdev(source, 20)
lower = basis - 2 * ta.stdev(source, 20)
isConsolidating = (upper - lower) < ta.sma(upper - lower, 20)

// StockRSI
length = 14
K = 100 * (close - ta.lowest(close, length)) / (ta.highest(close, length) - ta.lowest(close, length))
D = ta.sma(K, 3)
overbought = 75
oversold = 25

var float potential_SL = na
var float potential_TP = na
var bool buy_condition = na
var bool sell_condition = na

// Buy and Sell Control Variables
var bool hasBought = false
var bool hasSold = true

// Previous values tracking
prev_macdHistogram = macdHistogram[1]
prev_close = close[1]

// Modify sell_condition with the new criteria
if isVolatile
    buy_condition := not hasBought and crossover_signal or macd_signal and (close > lower) and (close < upper)
    sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - 0.5 * volatility
    potential_TP := close + volatility

if isTrending
    buy_condition := not hasBought and crossover_signal or macd_signal
    sell_condition := hasBought and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - volatility
    potential_TP := close + 2 * volatility

if isConsolidating
    buy_condition := not hasBought and crossover_signal and (close > lower)
    sell_condition := hasBought and (close < upper) and (macdHistogram < 0 and prev_macdHistogram < 0) and (close < prev_close and prev_close < close[2])
    potential_SL := close - 0.5 * volatility
    potential_TP := close + volatility

// Update the hasBought and hasSold flags
if buy_condition
    hasBought := true
    hasSold := false

if sell_condition
    hasBought := false
    hasSold := true

// Strategy Entry and Exit
if buy_condition
    strategy.entry("BUY", strategy.long, stop=potential_SL, limit=potential_TP)
    strategy.exit("SELL_TS", from_entry="BUY", trail_price=close, trail_offset=close * 0.05)

if sell_condition
    strategy.close("BUY")
    
// Visualization
plotshape(series=buy_condition, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=sell_condition, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)

plot(long_term_ma, color=color.gray, title="200-Day MA", linewidth=1)
plot(potential_SL, title="SL Level", color=color.red, linewidth=1, style=plot.style_linebr)
plot(potential_TP, title="TP Level", color=color.green, linewidth=1, style=plot.style_linebr)

bgcolor(isVolatile ? color.new(color.purple, 90) : isTrending ? color.new(color.blue, 90) : isConsolidating ? color.new(color.orange, 90) : na)