Strategi ini menggunakan penunjuk EMA untuk mengenal pasti trend harga dan menggabungkan penyimpangan standard untuk mengira isyarat beli dan jual untuk trend selepas perdagangan.
Strategi ini mula-mula mengira perbezaan v antara harga penutupan dan EMA panjang ema_length. Kemudian ia mengira dev deviasi standard v dalam tempoh panjang ema_length. Seterusnya ia menentukan pekali arah k, dengan k=1 untuk panjang dan k=-1 untuk pendek. Sempadan isyarat beli dev_limit dikira oleh k * dev * faktor limit. Apabila v melintasi dev_limit, isyarat beli dicetuskan. Isyarat keluar adalah apabila v melintasi 0.
Strategi ini menyediakan dua mod:
Beli pendek, pergi panjang apabila v melintasi di bawah dev_limit negatif, untuk mengikuti trend menurun.
Beli panjang, pergi panjang apabila v melintasi di atas dev_limit positif, untuk mengikuti trend menaik.
Ringkasnya, strategi secara dinamik mengira penyimpangan standard perbezaan antara harga dan EMA untuk menetapkan ambang dan mengikuti trend. Faktor ini mengawal kepekaan isyarat beli. ema_length menentukan tempoh EMA. mod beli mengawal arah pesanan.
Kelebihan strategi ini termasuk:
EMA mengenal pasti arah trend dengan baik dengan menyelaraskan harga.
Sempadan dinamik berdasarkan penyimpangan piawai menyesuaikan diri dengan lebih baik daripada ambang tetap.
Dua mod beli membolehkan mengikuti trend menaik atau menurun.
Faktor ini memberikan fleksibiliti dalam menyesuaikan kepekaan beli. ema_length membolehkan pengoptimuman tempoh EMA.
Logiknya mudah dan mudah difahami dan diubah.
Ukuran kedudukan boleh dikonfigurasi secara fleksibel untuk trend agresif berikut.
Risiko strategi:
EMA mempunyai kelewatan dan mungkin terlepas titik perubahan trend.
Ia bergantung pada pengoptimuman parameter. tetapan yang tidak betul membawa kepada kepekaan yang tidak mencukupi atau terlalu sensitif.
Trend berikut risiko kerugian yang lebih besar apabila trend berbalik.
Pemindahan panjang/pendek yang kerap meningkatkan kekerapan perdagangan.
Isyarat yang kerap di pasaran pelbagai meningkatkan kos.
Untuk menangani risiko, pertimbangkan menambah stop loss, mengoptimumkan parameter, menambah penapis untuk mengelakkan perdagangan berlebihan, dll.
Strategi ini boleh dioptimumkan dengan:
Uji tempoh EMA yang berbeza untuk mencari panjang yang optimum.
Uji nilai faktor yang berbeza untuk mencari sensitiviti terbaik.
Mengoptimumkan strategi ukuran kedudukan, contohnya piramida.
Menambah penapis untuk mengelakkan perdagangan yang salah di pasaran yang bergelombang.
Memasukkan stop loss untuk mengawal kerugian perdagangan tunggal.
Mengoptimumkan parameter secara berasingan untuk kedua-dua mod pembelian.
Menyiasat isyarat pembalikan trend untuk menghentikan trend berikut.
Strategi ini mengenal pasti trend dengan EMA dan menjana perintah ambang dinamik untuk mengikuti trend. Logiknya mudah dan jelas. Ukuran kedudukan boleh menjadi agresif untuk mengejar trend. Ia mempunyai risiko yang perlu ditangani melalui pengoptimuman parameter dan stop loss. Ia berfungsi sebagai contoh yang baik untuk mempelajari kombinasi penunjuk dan penyesuaian parameter.
/*backtest start: 2023-10-06 00:00:00 end: 2023-11-05 00:00:00 period: 1h basePeriod: 15m 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/ // © Azzrael // Based on EMA and EMA Oscilator https://www.tradingview.com/script/qM9wm0PW-EMA-Oscilator-Azzrael/ // (EMA - close) + Std Dev + Factor = detecting oversell/overbuy // Long only! // Pyramiding - sometimes, depends on ... // There 2 enter strategies in one script // 1 - Classic, buy on entering to OverSell zone (more profitable ~> 70%) // 2 - Crazy, buy on entering to OverBuy zone (catching trend and pyramiding, more net profit) // Exit - crossing zero of (EMA - close) //@version=5 strategy("STR:EMA Oscilator [Azzrael]", overlay=false, margin_long=100, margin_short=100, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=30, pyramiding=3) entry_name="Buy" ema_length = input.int(200, "Period", minval=2, step=10) limit = input.float(1.7, "Factor", minval=1, step=0.1, maxval=10) dno = input.string(defval="Buy on enter to OverSell", title="Model", options=["Buy on enter to OverSell", "Buy on enter to OverBuy"]) == "Buy on enter to OverSell" v = close - ta.ema(close, ema_length) dev = ta.stdev(v, ema_length) k = dno ? -1 : 1 dev_limit = k*dev*limit cond_long = dno ? ta.crossunder(v, dev_limit) : ta.crossover(v, dev_limit) cond_close = ta.cross(v, 0) // dev visualization sig_col = (dno and v <= dev_limit) or (not dno and v >= dev_limit) ? color.green : color.new(color.blue, 80) plot(dev_limit, color=color.green) plot(k*dev, color=color.new(color.blue, 60)) plot(v, color=sig_col ) hline(0) // Make love not war strategy.entry(entry_name, strategy.long, when=cond_long) strategy.close(entry_name, when=cond_close)