Sao Mộc và Sao Thổ Động lực MA Crossover Filtered Strategy

Tác giả:ChaoZhang, Ngày: 2023-11-03 16:13:20
Tags:

img

Tổng quan

Chiến lược này sử dụng đường chéo trung bình động như các tín hiệu giao dịch, kết hợp với chỉ số biến động BB và chỉ số động lực tùy chỉnh để lọc, nhằm cải thiện độ tin cậy của các tín hiệu chéo MA và giảm các tín hiệu sai.

Nguyên tắc

  1. Sử dụng EMA 50 giai đoạn và SMA 200 giai đoạn để tạo ra tín hiệu chéo vàng và chéo chết.

  2. Khi giá đang trong xu hướng tăng, yêu cầu giá phải ở trên đường 200 ngày và giá trị chỉ số động lực tùy chỉnh dưới 25 để tạo ra tín hiệu mua.

  3. Khi giá đang trong xu hướng giảm, yêu cầu giá phải dưới đường 200 ngày và giá trị chỉ số động lực tùy chỉnh trên 75 để tạo ra tín hiệu bán.

  4. Chỉ số động lượng tùy chỉnh lập bản đồ đường trung và khoảng cách băng tần BB vào phạm vi 0-100 dựa trên mức tối đa và tối thiểu trong lịch sử.

  5. Chỉ số động lực phản ánh sự biến động giá tương đối, lọc ngưỡng giúp giảm các chéo sai.

Ưu điểm

  1. Sử dụng điểm mạnh của EMA và SMA để nắm bắt xu hướng trung bình dài hạn.

  2. Tăng độ lọc với chỉ số động lực cải thiện độ tin cậy và giảm tín hiệu sai.

  3. Khoảng cách băng tần BB phản ánh cường độ biến động, bình thường hóa lịch sử tránh sự phụ thuộc tham số.

  4. EMA có thể tùy chỉnh, thời gian SMA và ngưỡng động lực thích nghi với môi trường thị trường khác nhau.

  5. Logic đơn giản với tính linh hoạt tối ưu hóa, tính thực tế mạnh mẽ.

Phân tích rủi ro

  1. EMA và SMA có hiệu ứng chậm trễ, có thể bỏ lỡ các cơ hội ngắn hạn.

  2. Xu hướng theo bản chất không phù hợp với các thị trường giới hạn phạm vi.

  3. Mức giới hạn động lực đòi hỏi kiểm tra ngược lặp lại cho tham số tối ưu, rủi ro quá phù hợp.

  4. Các hệ thống dài hạn hơn cung cấp lợi nhuận tuyệt đối ổn định nhưng có khả năng hạn chế.

  5. Có thể rút ngắn thời gian MA hoặc thêm các chỉ số bổ sung để cải thiện khả năng thích nghi.

Cơ hội gia tăng

  1. Kiểm tra các kết hợp MA khác nhau cho các thông số tối ưu.

  2. Thêm các chỉ số bổ sung như MACD, KD để xác nhận thêm.

  3. Tối ưu hóa các thông số chỉ số động lực như thời gian nhìn lại, phạm vi lập bản đồ.

  4. Bao gồm stop loss để kiểm soát rủi ro.

  5. Điều chỉnh các thông số cụ thể của biểu tượng bằng cách trích xuất tính năng học máy.

  6. Thêm các chỉ số âm lượng để tránh các tín hiệu chéo không hợp lý.

Kết luận

Chiến lược này kết hợp các điểm mạnh của việc theo dõi xu hướng dài hạn và lọc ngưỡng nhịp độ kép để có độ tin cậy cao và giá trị thực tế. Những cải tiến hơn nữa có thể được thực hiện thông qua tối ưu hóa tham số và các kỹ thuật bổ sung. Khái niệm sáng tạo này cung cấp những hiểu biết có giá trị cho các hệ thống xu hướng khác. Một bổ sung có giá trị cho thư viện chiến lược giao dịch thuật toán.


/*backtest
start: 2023-10-26 00:00:00
end: 2023-10-27 13:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="EMA Difference Mapping with Trades", shorttitle="EMA Diff Map", overlay=false)

// Inputs
emaLength = input(20, "EMA Length")
stdDevLength = input(2, "Standard Deviation Length")
priceSource = close
takeProfitPoints = input(1000, title="Take Profit (in Points)")
stopLossPoints = input(2500, title="Stop Loss (in Points)")

// Calculate EMA
ema = ema(priceSource, emaLength)

// Calculate Standard Deviation
stdDev = stdev(priceSource, stdDevLength)

// Calculate differences
diff1 = (ema + stdDev) - ema
diff2 = ema - (ema - stdDev)

// Calculate min and max differences from last year
lookbackPeriod = 504 // Number of trading days in a year
minDiff1 = lowest(diff1, lookbackPeriod)
maxDiff1 = highest(diff1, lookbackPeriod)
minDiff2 = lowest(diff2, lookbackPeriod)
maxDiff2 = highest(diff2, lookbackPeriod)

// Map differences based on requirements
mappedDiff1 = 50 + 50 * ((diff1 - minDiff1) / (maxDiff1 - minDiff1))
mappedDiff2 = 50 - 50 * ((diff2 - minDiff2) / (maxDiff2 - minDiff2))

// Combine mapped differences into a single line
mappedLine = if close > ema
    mappedDiff1
else
    mappedDiff2

// Plot 'mappedLine' in the main chart area conditionally
plot(mappedLine, title="EMA Difference Mapping", color=(close > ema ? color.blue : na), style=plot.style_line, linewidth=2)

// Calculate the 50EMA and 200SMA
ema50 = ema(close, 50)
sma200 = sma(close, 200)

// Plot the 50EMA and 200SMA on the main chart
plot(ema50, color=color.blue, title="50 SMA", linewidth=2)
plot(sma200, color=color.red, title="200 SMA", linewidth=2)

// Initialize trade variables
var bool waitingForBuy = na
var bool waitingForSell = na
var bool buyConditionMet = false
var bool sellConditionMet = false

if not sellConditionMet and crossunder(ema50, sma200)
    sellConditionMet := true
    waitingForBuy := false

if sellConditionMet 
    waitingForSell := true
    sellConditionMet := false

if waitingForSell and close < sma200 and mappedLine > 75
    strategy.entry("Sell", strategy.short)
    strategy.exit("Sell Exit", "Sell", profit=takeProfitPoints, loss=stopLossPoints)
    waitingForSell := false

// Define the strategy conditions and execute trades
if not buyConditionMet  and crossover(ema50, sma200)
    buyConditionMet := true
    waitingForSell := false

if buyConditionMet 
    waitingForBuy := true
    buyConditionMet := false

if waitingForBuy and close > sma200 and mappedLine < 25
    strategy.entry("Buy", strategy.long)
    strategy.exit("Buy Exit", "Buy", profit=takeProfitPoints, loss=stopLossPoints)
    waitingForBuy := false


Thêm nữa