Strategi ini menggunakan prinsip persilangan purata bergerak cepat dan purata bergerak perlahan untuk menentukan arah trend pasaran untuk menghantar isyarat beli dan jual. Strategi ini mudah difahami, mudah dilaksanakan, dan sesuai untuk perdagangan garis pendek tengah.
Strategi ini menggunakan dua rata-rata bergerak, satu garis cepat dan satu garis perlahan. Parameter garis cepat adalah 3 hari EMA, parameter garis perlahan adalah 15 hari EMA. Strategi menilai bahawa garis cepat ketika melintasi garis perlahan dari arah bawah, dianggap sebagai tanda membeli. Sebaliknya, ketika garis cepat jatuh dari arah atas dan melanggar garis perlahan, dianggap sebagai tanda menjual.
Strategi ini juga menetapkan EMA 3 hari dengan parameter yang lebih cepat sebagai garis keluar cepat. Apabila harga jatuh di bawah garis keluar cepat, ia menentukan pembalikan trend dan harus keluar dari kedudukan multi-head asal. Begitu juga, apabila harga kembali menembusi garis keluar, ia kembali menjadi bullish, dan oleh itu sebagai isyarat untuk masuk semula.
Tetapan isyarat operasi khusus adalah seperti berikut:
Garis laju dari bawah ke atas untuk menembusi garisan perlahan dan melakukan lebih banyak.
Garis laju turun dari atas ke bawah dan pecah garisan perlahan, kosong.
Harga jatuh ke bawah garis keluar cepat, lebih banyak saham kosong
Harga kembali menembusi garis keluar pantas dan melakukan lebih banyak lagi
Mudah digunakan, hanya perlu mengkonfigurasi dua parameter purata bergerak, sangat mudah untuk dilaksanakan
Data pengesanan yang mencukupi, indikator yang digunakan adalah lebih biasa untuk menilai keberkesanan strategi
Lebih banyak parameter yang boleh dikonfigurasi, anda boleh mengoptimumkan strategi dengan menyesuaikan parameter
Pengendalian risiko yang lebih baik dengan menggunakan tetapan stop loss yang bergerak cepat
“Saya tidak tahu apa-apa mengenai apa yang berlaku di Malaysia, tetapi saya tahu bahawa ia adalah satu-satunya negara di dunia yang tidak mempunyai pasaran yang stabil.
Operasi frekuensi sederhana, mengelakkan terlalu sering berdagang
Sebagai strategi trend-following, ia menghasilkan lebih banyak isyarat palsu apabila trend tidak jelas
Rata-rata bergerak itu sendiri mempunyai keterbelakangan dan mungkin terlepas titik perubahan.
Tetapan parameter tetap tidak dapat disesuaikan dengan perubahan pasaran, dan harus disesuaikan dengan penggunaan parameter yang dioptimumkan
Tetapan stop loss mungkin terlalu lemah dan tidak dapat dihentikan dalam masa yang tepat
Isyarat strategi kerap berlaku, kos transaksi mungkin lebih tinggi
Isyarat dagangan mungkin berlaku dan perlu disahkan bersama-sama dengan petunjuk lain
Risiko boleh dikawal dengan cara seperti pengoptimuman parameter, pengesahan dengan penunjuk lain, standard pelepasan kerugian yang sesuai, dan pengemaskinian parameter yang tepat pada masanya.
Ujian yang boleh mengoptimumkan parameter purata bergerak agar lebih sesuai dengan ciri-ciri pasaran semasa
Lebih banyak penunjuk boleh diperkenalkan dan digabungkan untuk membentuk sistem strategi yang lebih kuat
Tetapan parameter yang boleh disesuaikan, menyesuaikan parameter mengikut pasaran dalam masa nyata
Dengan menggunakan algoritma pembelajaran mesin, anda boleh mengoptimumkan strategi yang lebih bijak.
Anda boleh menetapkan hentian dinamik, dan mengesan hentian untuk mengawal risiko dengan lebih baik
Kaedah ini boleh digabungkan dengan penunjuk tenaga kuantitatif untuk mengelakkan penyimpangan yang menyebabkan kesalahan setup
Strategi ini secara keseluruhannya adalah strategi silang rata-rata bergerak ganda yang lebih sederhana. Ia menggunakan hubungan silang antara garis rata-rata cepat dan garis rata-rata lambat untuk menilai trend pasaran dan masa membeli dan menjual. Kelebihan strategi ini adalah idea yang jelas, mudah dilaksanakan, dapat disesuaikan dengan pasaran yang berbeza melalui pengoptimuman parameter.
/*backtest
start: 2023-01-01 00:00:00
end: 2023-02-03 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/
// © ehaarjee, ECHKAY, JackBauer007
//@version=4
//study(title="Tale_indicators", overlay=true)
strategy("Tale Indicators Strategy", overlay=true, precision=8, max_bars_back=200, pyramiding=0, initial_capital=20000, commission_type="percent", commission_value=0.1)
len_fast = input(3, minval=1, title="FAST EMA")
src_fast = input(close, title="Source for Fast")
fastMA = ema(src_fast, len_fast)
plot(fastMA, title="Slow EMA", color=color.orange)
len_slow = input(15, minval=1, title="SLOW EMA")
src_slow = input(close, title="Source for Slow")
slowMA = ema(src_slow, len_slow)
plot(slowMA, title="Fast EMA", color=color.blue)
len_fast_exit = input(3, minval=1, title="FAST EMA Exit")
src_fast_exit = input(close, title="Source for Fast Exit")
fastMAE = ema(src_fast_exit, len_fast_exit)
plot(fastMAE, title="Fast EMA Ex", color=color.red)
src_slow_enter_short = input(low, title="Source for Short Entry")
slowMASEn = ema(src_slow_enter_short, len_slow)
src_slow_enter_long = input(high, title="Source for Long Entry")
slowMALEn = ema(src_slow_enter_long, len_slow)
src_slow_exit_short = input(low, title="Source for Short Exit")
slowMASEx = ema(src_slow_enter_short, len_slow)
src_slow_exit_long = input(high, title="Source for Long Exit")
slowMALEx = ema(src_slow_enter_long, len_slow)
enter_long = crossover(fastMA, slowMALEn)
enter_short = crossunder(fastMA, slowMASEn)
exit_long = crossunder(fastMAE, slowMALEx)
exit_short = crossover(fastMAE, slowMALEx)
out_enter = iff(enter_long == true, 1, iff(enter_short == true, -1, 0))
plotarrow(out_enter, "Plot Enter Points", colorup=color.green, colordown=color.red, maxheight = 30)
bull = fastMA > slowMALEn
bear = fastMA < slowMASEn
c = bull ? color.green : bear ? color.red : color.white
bgcolor(c)
exit_tuner = input(0.005, title="Exit Tuner to touch slowEMA")
bull_exit = (bull and (low>(fastMAE*(1+exit_tuner)))) or exit_long or (not(bear) and (fastMAE>high))
bear_exit = (bear and ((fastMAE*(1-exit_tuner))>high)) or exit_short or (not(bull) and (low>fastMAE))
bull_r = (bull and ((bull_exit[1]) or (bull_exit[2] and bull_exit[1])) and (low<=fastMAE))
bear_r = (bear and ((bear_exit[1]) or (bull_exit[2] and bull_exit[1])) and (fastMAE<=high))
bull_re = (bull and (low<slowMALEn)) and not(enter_long)
bear_re = (bear and (high>slowMASEn)) and not(enter_short)
bull_ree = (bull and ((low<slowMALEn) and not(bull_re[1] or enter_long[1])))
bear_ree = (bear and ((high>slowMASEn) and not(bear_re[1] or enter_short[1])))
bull_reenter = (bull_r) and not(enter_long)
bear_reenter = (bear_r) and not(enter_short)
plotshape(bull_exit, "Plot Bull Exit", style = shape.arrowdown, color=color.green, size=size.small, text="ExL", location=location.abovebar)
plotshape(bear_exit, "Plot Bear Exit", style = shape.arrowup, color=color.red, size=size.small, text="ExS", location=location.belowbar)
plotshape(bull_reenter, "Plot Bull ReEnter", style = shape.arrowup, color=color.green, size=size.small, text="ReL", location=location.belowbar)
plotshape(bear_reenter, "Plot Bear ReEnter", style = shape.arrowdown, color=color.red, size=size.small, text="ReS", location=location.abovebar)
run_strategy = input(true, title="Run Strategy")
// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12)
fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31)
fromYear = input(defval = 2020, title = "From Year", type = input.integer, minval = 2000)
thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12)
thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31)
thruYear = input(defval = 2100, title = "Thru Year", type = input.integer, minval = 2000)
// === INPUT SHOW PLOT ===
showDate = input(defval = true, title = "Show Date Range", type = input.bool)
// === FUNCTION EXAMPLE ===
start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window
finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window
window() => true // create function "within window of time"
var long_position_open = false
var short_position_open = false
if (enter_long and not(bull_exit) and not(long_position_open))
// strategy.entry("LO", strategy.long, qty=4)
long_position_open := true
if (short_position_open)
// strategy.close("SO")
short_position_open := false
if (bull_reenter and not(long_position_open))
// strategy.entry("LO", strategy.long, qty=1)
long_position_open := true
if (bull_exit and long_position_open)
// strategy.close("LO")
long_position_open := false
if (enter_short and not(bear_exit) and not(short_position_open))
// strategy.entry("SO", strategy.short, qty=4)
short_position_open := true
if(long_position_open)
// strategy.close("LO")
long_position_open := false
if (bear_reenter and not(short_position_open))
// strategy.entry("SO", strategy.long, qty=1)
long_position_open := true
if (bear_exit and short_position_open)
// strategy.close("SO")
short_position_open := false
if(run_strategy)
strategy.entry("LO", strategy.long, when=(window() and enter_long), qty=4)
strategy.entry("LO", strategy.long, when=(window() and bull_reenter and not(long_position_open)), qty=1)
strategy.close("LO", when=(window() and bull_exit and long_position_open))
strategy.entry("SO", strategy.short, when=(window() and enter_short), qty=4)
strategy.entry("SO", strategy.short, when=(window() and bear_reenter and not(short_position_open)), qty=1)
strategy.close("SO", when=(window() and bear_exit and short_position_open))