Strategi ini menggunakan dua purata bergerak, TENKAN dan KIJUN, dengan tempoh masa yang berbeza untuk membentuk isyarat salib emas dan salib kematian untuk perdagangan panjang dan pendek.
Strategi ini terutamanya berdasarkan kaedah analisis teknikal saham Jepun yang dipanggil Ichimoku Kinko Hyo, menggunakan pelbagai purata bergerak seperti garis TENKAN dan KIJUN untuk menentukan arah trend pasaran.
Pertama, garis TENKAN adalah garis 9 hari yang mewakili trend jangka pendek; garis KIJUN adalah garis 26 hari yang mewakili trend jangka sederhana. Apabila garis TENKAN melintasi di atas garis KIJUN, isyarat beli dihasilkan. Apabila garis TENKAN jatuh di bawah garis KIJUN, isyarat jual dihasilkan. Ini membentuk strategi salib emas dan salib kematian purata bergerak klasik.
Kedua, strategi ini juga memperkenalkan garis Senkou Span A (SSA) dan garis Senkou Span B (SSB). Garis SSA adalah purata garis TENKAN dan KIJUN manakala garis SSB adalah purata bergerak 52 hari. Bersama-sama mereka membentuk pita
Akhirnya, untuk menapis isyarat palsu, strategi ini juga mengkaji kedudukan harga berbanding Chikou Span (harga penutupan ditangguhkan 26 hari)
Ini adalah strategi purata bergerak yang sangat tipikal.
Menggunakan dua purata bergerak dari tempoh yang berbeza dengan berkesan menilai arah trend jangka pendek dan jangka menengah secara serentak.
Trend jangka panjang ditentukan dengan pita Kumo untuk mengelakkan membeli di pasaran beruang jangka panjang.
Membandingkan harga dengan garis Chikou yang tertunda menapis banyak isyarat palsu dan mengurangkan perdagangan yang tidak perlu.
Dengan menggunakan pelbagai fungsi purata bergerak dengan mahir, strategi ini dapat mengikuti trend dalam jangka masa pendek, sederhana dan panjang.
Risiko utama strategi ini termasuk:
Strategi purata bergerak cenderung menghasilkan banyak isyarat palsu. Perdagangan yang kerap disebabkan oleh parameter yang tidak tepat boleh menyebabkan kerugian.
Strategi ini sangat memberi tumpuan kepada teknikal tanpa mempertimbangkan asas. Perubahan besar dalam prestasi perniagaan atau dasar pasaran boleh membatalkan isyarat teknikal.
Tiada mekanisme stop loss termasuk. Apabila penilaian arah pasaran salah, kerugian boleh terkumpul.
Oleh itu, kita memerlukan sistem purata bergerak yang lebih maju, peraturan stop loss yang betul, atau isyarat asas tambahan, untuk memperbaiki lagi strategi ini dan mengurangkan risiko.
Strategi ini juga boleh ditingkatkan dalam aspek berikut:
Cari set parameter yang lebih stabil dan cekap melalui lebih banyak backtest.
Tambah peraturan stop loss. Stop loss yang munasabah membantu mengawal kerugian maksimum dengan berkesan.
Menambah isyarat asas seperti penilaian anggaran pendapatan yang mengandungi wawasan mengenai prospek syarikat.
Mengoptimumkan strategi perbandingan harga barisan Chikou dengan penyelesaian yang lebih stabil.
Menggabungkan isyarat pemilihan saham. Faktor penarafan seperti nisbah PE dan ROE boleh menapis stok berkualiti rendah.
Ini adalah strategi purata bergerak yang sangat tipikal dan praktikal. Dengan secara serentak memantau trend jangka pendek, sederhana dan jangka panjang, menggunakan pelbagai fungsi purata bergerak, ia menghasilkan isyarat perdagangan dengan prestasi yang kukuh. Kita boleh meningkatkannya dengan penyesuaian parameter, menambah stop loss, pemilihan stok dll. Secara keseluruhan ini adalah strategi kuantitatif yang menjanjikan yang layak untuk penyelidikan dan penjejakan.
/*backtest start: 2022-11-28 00:00:00 end: 2023-12-04 00:00:00 period: 1d basePeriod: 1h 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/ // © mdeous //@version=4 strategy( title="Ichimoku Kinko Hyo Strategy", shorttitle="Ichimoku Strategy", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, currency="USD", commission_type=strategy.commission.percent, commission_value=0.0 ) // // SETTINGS // // Ichimoku int TENKAN_LEN = input(title="Tenkan-Sen Length", defval=9, minval=1, step=1) int KIJUN_LEN = input(title="Kijun-Sen Length", defval=26, minval=1, step=1) int SSB_LEN = input(title="Senkou Span B Length", defval=52, minval=1, step=1) int OFFSET = input(title="Offset For Chikou Span / Kumo", defval=26, minval=1, step=1) // Strategy int COOLDOWN = input(title="Orders Cooldown Period", defval=5, minval=0, step=1) bool USE_CHIKOU = input(title="Use Imperfect Chikou Position Detection", defval=false) // // HELPERS // color _red = color.red color _blue = color.blue color _lime = color.lime color _fuchsia = color.fuchsia color _silver = color.silver color _aqua = color.aqua f_donchian(_len) => avg(lowest(_len), highest(_len)) // // ICHIMOKU INDICATOR // float tenkan = f_donchian(TENKAN_LEN) float kijun = f_donchian(KIJUN_LEN) float ssa = avg(tenkan, kijun) float ssb = f_donchian(SSB_LEN) plot(tenkan, title="Tenkan", color=_silver) plot(close, title="Chikou", offset=-OFFSET+1, color=_aqua) _ssa = plot(ssa, title="SSA", offset=OFFSET-1, color=_lime) _ssb = plot(ssb, title="SSB", offset=OFFSET-1, color=_red) fill(_ssa, _ssb, color=ssa > ssb ? _lime : _fuchsia, transp=90) // // STRATEGY // // Check if price is "above or below" Chikou (i.e. historic price line): // This detection is highly imperfect, as it can only know what Chikou position // was 2*offset candles in the past, therefore if Chikou crossed the price // line in the last 2*offset periods it won't be detected. // Use of this detection is disabled by default, float _chikou_val = close[OFFSET*2+1] float _last_val = close[OFFSET+1] bool above_chikou = USE_CHIKOU ? _last_val > _chikou_val : true bool below_chikou = USE_CHIKOU ? _last_val < _chikou_val : true // Identify short-term trend with Tenkan bool _above_tenkan = min(open, close) > tenkan bool _below_tenkan = max(open, close) < tenkan // Check price position compared to Kumo bool _above_kumo = min(open, close) > ssa bool _below_kumo = max(open, close) < ssb // Check if Kumo is bullish or bearish bool bullish_kumo = ssa > ssb bool bearish_kumo = ssa < ssb // Correlate indicators to confirm the trend bool bullish_trend = _above_tenkan and _above_kumo and bullish_kumo bool bearish_trend = _below_tenkan and _below_kumo and bearish_kumo // Build signals bool buy1 = (close > open) and ((close > ssa) and (open < ssa)) // green candle crossing over SSA bool buy2 = bullish_kumo and bearish_kumo[1] // bullish Kumo twist bool sell1 = (close < open) and ((close < ssb) and (open > ssb)) // red candle crossing under SSB bool sell2 = bearish_kumo and bullish_kumo[1] // bearish Kumo twist bool go_long = below_chikou and (bullish_trend and (buy1 or buy2)) bool exit_long = above_chikou and (bearish_trend and (sell1 or sell2)) // // COOLDOWN // f_cooldown() => _cd_needed = false for i = 1 to COOLDOWN by 1 if go_long[i] _cd_needed := true break _cd_needed go_long := f_cooldown() ? false : go_long // // ORDERS // strategy.entry("buy", strategy.long, when=go_long) strategy.close_all(when=exit_long) // // ALERTS // alertcondition( condition=go_long, title="Buy Signal", message="{{exchange}}:{{ticker}}: A buy signal for {{strategy.market_position_size}} units has been detected (last close: {{close}})." ) alertcondition( condition=exit_long, title="Sell Signal", message="{{exchange}}:{{ticker}}: A sell signal for {{strategy.market_position_size}} units has been detected (last close: {{close}})." )