Strategi Dagangan Purata Bergerak Gaussian

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

img

Ringkasan

Strategi ini menggunakan idea pengedaran Gaussian dan mengira skor Z berdasarkan purata bergerak eksponensial 10 tempoh harga penutupan lilin Heikin-Ashi. ambang kemudian ditetapkan berdasarkan purata bergerak eksponensial 20 tempoh skor Z untuk isyarat masuk dan keluar apabila kurva melintasi mereka.

Logika Strategi

  1. Mengira purata bergerak eksponensial 10 tempoh harga penutupan candela Heikin-Ashi.

  2. Berdasarkan data purata bergerak di atas, kiralah skor Z dalam tetingkap kemunculan 25 tempoh. Z-score mencerminkan berapa banyak penyimpangan standard titik data dari purata, yang dapat menilai sama ada data adalah normal atau abnormal.

  3. Ambil purata bergerak eksponensial 20 tempoh pada skor Z untuk mendapatkan kurva yang dipanggil emaScore.

  4. Tetapkan ambang atas dan bawah berdasarkan pengedaran data emaScore.

  5. Lama apabila emaScore melintasi garis tengah atau ambang bawah ke atas. Pendek apabila emaScore melintasi ambang atas, ambang bawah atau 100 tempoh tertinggi ke bawah.

Analisis Kelebihan

  1. Terapkan idea pengedaran Gaussian melalui Z-skor untuk menilai normaliti dan menapis pecah palsu.

  2. Purata bergerak eksponensial berganda mempunyai kesan penapisan untuk menentukan trend jangka panjang.

  3. Penentuan ambang yang munasabah mengurangkan kebarangkalian perdagangan yang salah.

  4. Memasukkan titik tertinggi/rendah 100 tempoh membantu menangkap peluang pembalikan.

Analisis Risiko

  1. Gabungan Z-score dan MAs sensitif kepada parameter tuning.

  2. Tahap ambang yang betul berkaitan dengan keabsahan strategi.

  3. Titik tertinggi / terendah 100 tempoh boleh dengan mudah menjana isyarat yang salah.

  4. Heikin-Ashi sendiri ada sedikit ketinggalan.

Arahan pengoptimuman

  1. Uji tempoh purata bergerak yang berbeza, tingkap melihat semula Z-score.

  2. Gunakan analisis berjalan ke hadapan untuk mengoptimumkan parameter automatik.

  3. Cuba kaedah penetapan ambang yang berbeza, contohnya kelipatan STD.

  4. Meningkatkan logik titik tertinggi / terendah untuk mengelakkan isyarat yang salah.

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

Ringkasan

Strategi ini menilai kelainan harga dan menghasilkan isyarat perdagangan berdasarkan idea pengedaran Gaussian, purata bergerak eksponensial berganda dan penetapan ambang dinamik. Kelebihan utama adalah menapis pecah palsu dan menangkap pembalikan. Walau bagaimanapun, terdapat kesan besar mengenai pemilihan parameter dan kombinasi. Ujian dan pengoptimuman lanjut diperlukan untuk mencari 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 lanjut