Chiến lược giao dịch trung bình di chuyển Gaussian

Tác giả:ChaoZhang, Ngày: 2024-01-03 16:06:45
Tags:

img

Tổng quan

Chiến lược này áp dụng ý tưởng phân bố Gauss và tính toán điểm số Z dựa trên trung bình động theo cấp số nhân 10 giai đoạn của giá đóng nến Heikin-Ashi. Các ngưỡng sau đó được đặt dựa trên trung bình động theo cấp số nhân 20 giai đoạn của điểm số Z cho các tín hiệu vào và ra khi đường cong vượt qua chúng.

Chiến lược logic

  1. Tính toán đường trung bình động theo hàm số 10 giai đoạn của giá đóng nến Heikin-Ashi.

  2. Dựa trên dữ liệu trung bình động trên, tính điểm Z trong một cửa sổ xem lại 25 giai đoạn. Điểm Z phản ánh số độ lệch chuẩn của một điểm dữ liệu so với trung bình, có thể đánh giá liệu dữ liệu có bình thường hay bất thường.

  3. Lấy trung bình động theo cấp số nhân 20 giai đoạn trên điểm số Z để có được một đường cong gọi là emaScore.

  4. Thiết lập ngưỡng trên và dưới dựa trên sự phân bố của dữ liệu emaScore.

  5. Đường dài khi emaScore vượt qua đường trung hoặc ngưỡng dưới lên. ngắn khi emaScore vượt qua ngưỡng trên, ngưỡng dưới hoặc mức cao nhất 100 giai đoạn xuống.

Phân tích lợi thế

  1. Áp dụng ý tưởng phân bố Gaussian thông qua điểm số Z để đánh giá tính bình thường và lọc các đột phá sai.

  2. Đường trung bình di chuyển nhân tố hai có hiệu ứng lọc để xác định xu hướng dài hạn.

  3. Việc thiết lập ngưỡng hợp lý làm giảm khả năng giao dịch không chính xác.

  4. Bao gồm các điểm cao nhất / thấp nhất trong 100 giai đoạn giúp nắm bắt các cơ hội đảo ngược.

Phân tích rủi ro

  1. Sự kết hợp của điểm số Z và MAs nhạy cảm với các tham số điều chỉnh.

  2. Mức ngưỡng phù hợp liên quan trực tiếp đến tính hợp lệ của chiến lược.

  3. Điểm cao nhất / thấp nhất 100 giai đoạn có thể dễ dàng tạo ra tín hiệu sai.

  4. Heikin-Ashi cũng có một chút chậm trễ.

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

  1. Kiểm tra các khoảng thời gian trung bình động khác nhau, cửa sổ xem lại điểm số Z.

  2. Sử dụng phân tích đi trước để tự động tối ưu hóa các thông số.

  3. Thử các phương pháp thiết lập ngưỡng khác nhau, ví dụ như số lần STD.

  4. Cải thiện logic điểm cao nhất / thấp nhất để ngăn chặn tín hiệu sai.

  5. Kiểm tra các loại nến khác hoặc giá điển hình để thay thế Heikin-Ashi.

Tóm lại

Chiến lược này đánh giá sự bất thường của giá và tạo ra các tín hiệu giao dịch dựa trên ý tưởng phân bố Gaussian, trung bình động theo hàm số nhân đôi và thiết lập ngưỡng động. Những lợi thế chính là lọc các đột phá sai và bắt sự đảo ngược. Tuy nhiên, có tác động rất lớn liên quan đến việc lựa chọn và kết hợp các thông số. Cần phải thử nghiệm và tối ưu hóa thêm để tìm các thông số và kết hợp tốt nhất.


/*backtest
start: 2023-12-26 00:00:00
end: 2024-01-02 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/



// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jensenvilhelm

// Here is an attempt to create a robust strategy for BTCUSD on a 5 minute chart
// I can't seem to get this code to work the way i want.... if you want to give it a try, please let me know -
// how it goes in comment section. 

//@version=5
// Define the strategy settings
strategy("The Z-score", shorttitle="TZS", overlay=true)

// User can set the start date for the strategy
startDate = timestamp("2023 06 01")

// Heikin-Ashi Open, Close, High and Low calculation
haClose = ohlc4
var float haOpen = na
haOpen := na(haOpen[1]) ? (open + close) / 2 : (haOpen[1] + haClose[1]) / 2
haHigh = math.max(nz(haOpen, high), nz(haClose, high), high)
haLow = math.min(nz(haOpen, low), nz(haClose, low), low)

// Function to calculate the Z-Score
z_score(_series, _length) =>
    _mean = ta.sma(_series, _length)
    _stddev = ta.stdev(_series, _length)
    (_series - _mean) / _stddev

// Compute the score and its EMA
score = z_score(ta.ema(haClose, 10), 25)
emaScore = ta.ema(score, 20)

// Calculate lower and upper thresholds using percentiles of EMA
lowerBlue = ta.percentile_linear_interpolation(emaScore, 50, 10)
upperBlue = ta.percentile_linear_interpolation(emaScore, 50, 90)

// Calculate the middle line as 50th percentile
middleLine = ta.percentile_linear_interpolation(emaScore, 50, 50) 

// Plot the EMA of the score and the thresholds
plot(emaScore,"The White Line", color=color.white, linewidth=2)
plot(lowerBlue,"Lower Blue Line", linewidth=2)
plot(upperBlue, "Upper Blue Line", linewidth=2)
plot(middleLine, "Middle Yellow Line", linewidth=2, color=color.yellow)
plot(score,"The Z-Score Mixed With EMA 10", color=color.green)

// Calculate highest and lowest EMA score over 100 bars period
highest = ta.highest(emaScore, 100)
lowest = ta.lowest(emaScore, 100)

// Plot highest and lowest EMA score lines 
plot(highest, "Highest of emaScore", color=color.red, linewidth=2)
plot(lowest, "Lowest of emaScore", color=color.red, linewidth=2)

// Define entry and exit conditions for long and short positions
longCon = ta.crossover(score, lowerBlue) or ta.crossover(emaScore, middleLine)
addOn = ta.crossover(score, highest)
shortCon = ta.crossunder(emaScore, upperBlue) or ta.crossunder(emaScore, lowerBlue) or ta.crossunder(emaScore, highest)

// Execute trading logic based on conditions and after the start date
if (time >= startDate)
    if longCon
        strategy.entry("Long", strategy.long)
        if shortCon
            strategy.close("Long")
    if addOn
        strategy.entry("LongNR2", strategy.long)
        if shortCon
            strategy.close("LongNR2")
    
    if shortCon
        strategy.entry("Short", strategy.short)
        if longCon
            strategy.close("Short")


Thêm nữa