Strategi Perdagangan Rata-rata Gerak Gaussian

Penulis:ChaoZhang, Tanggal: 2024-01-03 16:06:45
Tag:

img

Gambaran umum

Strategi ini menerapkan gagasan distribusi Gaussian dan menghitung skor Z berdasarkan rata-rata bergerak eksponensial 10 periode harga penutupan lilin Heikin-Ashi. ambang kemudian ditetapkan berdasarkan rata-rata bergerak eksponensial 20 periode skor Z untuk sinyal masuk dan keluar ketika kurva melintasi mereka.

Logika Strategi

  1. Hitung rata-rata bergerak eksponensial 10 periode harga penutupan candlestick Heikin-Ashi.

  2. Berdasarkan data rata-rata bergerak di atas, hitunglah Z-score selama 25 periode lookback window. Z-score mencerminkan berapa banyak standar deviasi titik data dari rata-rata, yang dapat menilai apakah data normal atau abnormal.

  3. Ambil rata-rata bergerak eksponensial 20 periode pada Z-score untuk mendapatkan kurva yang disebut emaScore. kurva ini mencerminkan tren jangka panjang dari Z-score.

  4. Menetapkan ambang batas atas dan bawah berdasarkan distribusi data emaScore.

  5. Panjang ketika emaScore melintasi garis tengah atau ambang bawah ke atas. Pendek ketika emaScore melintasi ambang atas, ambang bawah atau 100 periode tertinggi ke bawah.

Analisis Keuntungan

  1. Terapkan ide distribusi Gaussian melalui Z-score untuk menilai normalitas dan menyaring kebocoran palsu.

  2. Rata-rata bergerak eksponensial ganda memiliki efek penyaringan untuk menentukan tren jangka panjang.

  3. Menetapkan ambang batas yang wajar mengurangi kemungkinan perdagangan yang salah.

  4. Menggabungkan titik tertinggi / terendah 100 periode membantu menangkap peluang pembalikan.

Analisis Risiko

  1. Kombinasi Z-score dan MAs sensitif terhadap pengaturan parameter.

  2. Tingkat ambang yang tepat secara langsung terkait dengan validitas strategi.

  3. 100 periode titik tertinggi / terendah dapat dengan mudah menghasilkan sinyal yang salah.

  4. Heikin-Ashi sendiri memiliki beberapa keterlambatan.

Arahan Optimasi

  1. Uji periode rata-rata bergerak yang berbeda, jendela tampilan Z-score.

  2. Menggunakan analisis berjalan maju untuk mengoptimalkan parameter otomatis.

  3. Cobalah metode penetapan ambang yang berbeda, misalnya kelipatan STD.

  4. Meningkatkan logika titik tertinggi / terendah untuk mencegah sinyal yang salah.

  5. Uji jenis lilin lain atau harga khas untuk menggantikan Heikin-Ashi.

Ringkasan

Strategi ini menilai abnormalitas harga dan menghasilkan sinyal perdagangan berdasarkan gagasan distribusi Gaussian, rata-rata bergerak eksponensial ganda dan pengaturan ambang dinamis. Keuntungan utama adalah menyaring breakout palsu dan menangkap pembalikan. Namun, ada dampak besar mengenai pemilihan dan kombinasi parameter. Pengujian dan optimalisasi lebih lanjut diperlukan untuk menemukan parameter dan kombinasi terbaik.


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


Lebih banyak