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.
Hitung rata-rata bergerak eksponensial 10 periode harga penutupan candlestick Heikin-Ashi.
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.
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.
Menetapkan ambang batas atas dan bawah berdasarkan distribusi data emaScore.
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.
Terapkan ide distribusi Gaussian melalui Z-score untuk menilai normalitas dan menyaring kebocoran palsu.
Rata-rata bergerak eksponensial ganda memiliki efek penyaringan untuk menentukan tren jangka panjang.
Menetapkan ambang batas yang wajar mengurangi kemungkinan perdagangan yang salah.
Menggabungkan titik tertinggi / terendah 100 periode membantu menangkap peluang pembalikan.
Kombinasi Z-score dan MAs sensitif terhadap pengaturan parameter.
Tingkat ambang yang tepat secara langsung terkait dengan validitas strategi.
100 periode titik tertinggi / terendah dapat dengan mudah menghasilkan sinyal yang salah.
Heikin-Ashi sendiri memiliki beberapa keterlambatan.
Uji periode rata-rata bergerak yang berbeda, jendela tampilan Z-score.
Menggunakan analisis berjalan maju untuk mengoptimalkan parameter otomatis.
Cobalah metode penetapan ambang yang berbeda, misalnya kelipatan STD.
Meningkatkan logika titik tertinggi / terendah untuk mencegah sinyal yang salah.
Uji jenis lilin lain atau harga khas untuk menggantikan Heikin-Ashi.
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")