
Strategi tren silang dua rata-rata adalah strategi perdagangan yang didasarkan pada rata-rata bergerak. Strategi ini menggunakan persilangan EMA garis cepat dan SMA garis lambat sebagai sinyal beli dan jual, dan digabungkan dengan deflection dari indikator MACD untuk memfilter sinyal. Strategi ini mempertimbangkan beberapa faktor seperti harga, tren, dan momentum sekaligus, untuk membentuk sistem perdagangan yang relatif lengkap.
Strategi ini menggunakan dua rata-rata bergerak EMA dan SMA. EMA memiliki panjang 200 hari dan SMA memiliki panjang 100 hari. Ini menghasilkan sinyal beli ketika kenaikan harga menerobos dua garis rata-rata; Ini menghasilkan sinyal jual ketika penurunan harga menerobos dua garis rata-rata.
Untuk lebih meningkatkan keandalan sinyal, strategi ini juga memperkenalkan indikator MACD. Ketika harga menembus EMA dan SMA membentuk sinyal, dibutuhkan garis cepat MACD dari bawah untuk menembus garis lambat, dan pilar MACD berada di atas sumbu 0 untuk memicu sinyal beli yang sebenarnya. Sebaliknya, garis cepat MACD dari atas untuk menembus garis lambat, dan pilar MACD berada di bawah sumbu 0 untuk memicu sinyal jual yang sebenarnya.
Selain itu, strategi juga mengatur stop loss dan stop stop. Setelah strategi membuka posisi, stop loss dan stop stop akan dihitung dan diatur berdasarkan rasio yang ditetapkan pengguna. Dengan demikian, risiko perdagangan tunggal dapat dikontrol secara efektif.
Secara keseluruhan, strategi ini mempertimbangkan beberapa indikator, menetapkan persyaratan penyaringan yang ketat untuk sinyal beli dan jual, dan menggunakan risiko manajemen stop loss untuk membentuk sistem perdagangan yang relatif ketat dan lengkap.
Ada beberapa keuntungan dari strategi crossover bilateral:
Kombinasi dari beberapa indikator, harga, tren, dan momentum yang dipertimbangkan secara komprehensif, membuat kondisi penyaringan yang ketat terhadap sinyal, yang dapat secara efektif menghindari sinyal palsu dan meningkatkan keandalan sinyal.
Dengan menggunakan dua parameter yang berbeda, moving average dapat lebih mengidentifikasi tren pasar dan memfilter pergerakan. Garis EMA cepat digunakan untuk melacak perubahan harga secara tepat waktu; Garis SMA lambat digunakan untuk menilai tren jangka panjang. Kombinasi dua garis rata lebih efektif digunakan.
Indikator MACD yang diperkenalkan dapat mengatur berbagai parameter, dapat disesuaikan sesuai dengan karakteristik pasar yang berbeda, dan memiliki fleksibilitas yang tinggi. Pengaturan MACD memastikan sinyal perdagangan mendapat dukungan harga, tren, dan momentum pada saat yang sama, sehingga memiliki nilai aplikasi yang kuat.
Tetapkan stop loss threshold untuk mengontrol kerugian dalam satu transaksi, menghindari SIZE_MATHFUNC Risiko kerugian tunggal yang terlalu besar. Dengan pengaturan stop loss yang wajar, sebagian keuntungan dapat dikunci, mengurangi risiko pasar setelah keuntungan.
Parameter strategi ini dapat diatur secara fleksibel dan dapat disesuaikan dengan hasil optimasi strategi, sangat praktis. Uji coba berbagai pasar dan parameter optimasi ruang besar.
Ada beberapa risiko yang terkait dengan strategi crossover bilateral, yang terkonsentrasi pada beberapa aspek berikut:
EMA dan SMA dapat mengalami beberapa kali miscrossing ketika harga saham menunjukkan getaran yang kuat, yang menyebabkan sinyal perdagangan sering terbuka dan tertutup. Ini akan meningkatkan frekuensi perdagangan dan biaya biaya.
Indikator MACD mungkin mengalami false breakout, terutama ketika momentum getaran belum jelas. Dalam hal ini, sinyal juga tidak dapat diandalkan dan dapat menyebabkan kerugian yang tidak perlu.
Posisi dan proporsi dari stop loss setting sangat berpengaruh pada hasil dari profit dan loss. Jika stop loss yang disetel terlalu kecil, ada risiko yang tertutup; dan jika stop loss yang disetel terlalu besar, kerugian tunggal mungkin terlalu besar. Ini membutuhkan pengujian yang cukup untuk menemukan parameter terbaik.
Moving average sebagai indikator trend tracking, dalam harga cepat berbalik, yang menunjukkan manfaat akan diskon. Strategi mungkin tidak sampai pada stop loss dan harga terbalik, menyebabkan kerugian yang lebih besar.
Solusi yang sesuai adalah sebagai berikut:
Untuk situasi yang sangat bergolak, parameter moving average dapat disesuaikan dengan baik, menggunakan EMA dan SMA dengan parameter rendah, mengurangi jumlah persilangan.
Menambahkan kondisi penyaringan MACD nol ke atas dan ke bawah dapat mengurangi jumlah false breakout. Anda juga dapat mempertimbangkan untuk menambahkan indikator lain dalam kombinasi, seperti KDJ, BOLL, dll.
Pengaturan posisi dan proporsi stop loss perlu dioptimalkan untuk menemukan parameter optimal. Dengan demikian, perlu mempertimbangkan pemantauan terus menerus dan penyesuaian dinamis.
Mekanisme identifikasi untuk reversal harga cepat dapat diatur. Jika reversal yang tidak biasa ditemukan, mengambil tindakan darurat untuk mengurangi posisi atau menangguhkan strategi perdagangan untuk mengendalikan risiko.
Ada ruang untuk optimasi lebih lanjut dalam strategi tren crossover bilateral, yang berfokus pada beberapa aspek berikut:
Uji lebih banyak indikator dalam kombinasi untuk mencari parameter yang lebih baik. Misalnya, memperkenalkan saluran BOLL, mempertimbangkan dampak dari fluktuasi, dll.
Mengoptimalkan parameter panjang rata-rata bergerak untuk menemukan kombinasi optimal dari parameter dalam kondisi pasar yang berbeda. Optimalisasi parameter bergulir juga merupakan pilihan.
Lebih ilmiah dan masuk akal mengatur strategi stop loss. Seperti memperkenalkan tracking stop loss, atau berdasarkan hasil statistik historis mengatur rasio risiko-pengembalian dinamis, dll. Ini dapat meningkatkan stabilitas strategi lebih lanjut.
Membangun mekanisme identifikasi dan darurat otomatis untuk perubahan harga yang tidak biasa. Dalam situasi ekstrem, secara proaktif mengurangi posisi atau menangguhkan strategi untuk menghindari kerugian besar.
Perluasan varietas perdagangan, seperti varietas lain seperti valuta asing, mata uang digital, dll. Uji kekuatan parameter dari varietas yang berbeda, memperluas ruang lingkup penerapan strategi.
Strategi pengelolaan dana yang mengoptimalkan strategi, seperti perdagangan kuantitatif, rasio posisi tetap, dll. Mengontrol risiko kerugian tunggal, membuat kurva dana keseluruhan lebih rata.
Strategi tren silang linier ganda secara komprehensif mempertimbangkan beberapa faktor, membutuhkan dukungan dari beberapa indikator harga, tren, dan momentum saat mengirim sinyal perdagangan, sehingga memastikan keandalan sinyal. Strategi ini juga menggunakan stop loss stop yang bergerak, yang dapat secara efektif mengontrol risiko perdagangan tunggal. Pengaturan parameter strategi ini fleksibel, praktis, dan cocok untuk perdagangan otomatis.
Namun, tidak ada strategi yang sempurna. Strategi ini juga akan mengalami beberapa kesulitan dalam penerapannya, seperti masalah perdagangan yang sering terjadi, penembusan palsu, dan pengaturan posisi stop loss. Hal ini memerlukan kita untuk mulai dari mengoptimalkan portofolio parameter, memperkenalkan portofolio indikator teknis baru, memperbaiki mekanisme stop loss, dan banyak hal lainnya.
Secara keseluruhan, strategi tren crossover bilateral membentuk sistem perdagangan yang relatif lengkap dan ketat. Dalam penelitian dan aplikasi selanjutnya, strategi ini diharapkan dapat memberikan nilai pertempuran yang lebih besar melalui optimalisasi dan perbaikan berkelanjutan.
/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// Hi,
// This is my first strategy made by myself(except for the MACD indicator). I'm publishing this to get myself out there and for some newer people to see how a basic strategy works. All credits go to Zen&TheArtofTrading, for teaching me almost everything I know about Pinescript
// The strategy is basically an MACD crossover trend strategy. If the MACD line crosses the signal line upward, above the zero point of the histogram, while the price is above 200 EMA and 100 SMA it's a buy signal
// If the MACD line crosses the signal line downward, while below zero point of the histogram, as well as the price being below 200 EMA and 100 SMA it's a sell signal
// I used the 200 EMA and 100 SMA because I wanted to filter weak signals as much as possible when the market is ranging, if you have any suggestions to go around this better, please let me know, still learning everyday
// If you have any suggestions, tips or tricks please let me know. I'm still new to Pinescript, but having a lot of fun trying stuff out. If you see something in my code that you don't understand, feel free to ask, I'll try to answer as best as I can
// I opened the strategy with predetermined backtesting pyramiding, currency etc. This made the progress of backtesting multiple TP and SL easier. Also the commission value is from Binance Futures, I just left it in there for anyone who wants to just copy this strategy
strategy("MACD Crossover Trend Strategy Template", overlay = true )
// Determining inputs and values, I just copied the built-in MACD strategy and removed everything I didn't need, just needed the barebone indicator and added EMA + SMA inputs
fast_length = input(title = "Fast Length", type = input.integer, defval = 12, group = "MACD Values")
slow_length = input(title = "Slow Length", type = input.integer, defval = 26, group = "MACD Values")
src = input(title = "Source", type = input.source, defval = close, group = "MACD Values")
signal_length = input(title = "Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9, group = "MACD Values")
sma_source = input(title = "Simple MA (Oscillator)", type = input.bool, defval = false, group = "MACD Values")
sma_signal = input(title = "Simple MA (Signal Line)", type = input.bool, defval = false, group = "MACD Values")
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
emaLength = input(title = "EMA", type = input.integer, defval = 200, step = 10, group = "Moving Averages")
smaLength = input(title = "SMA", type = input.integer, defval = 100, step = 10, group = "Moving Averages")
// Input backtest range, you can adjust this here or in the input options
fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12, group = "Backtest Date Range")
fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31, group = "Backtest Date Range")
fromYear = input(defval = 2000, title = "From Year", type = input.integer, minval = 1970, group = "Backtest Date Range")
thruMonth = input(defval = 1, title = "Thru Month", type = input.integer, minval = 1, maxval = 12, group = "Backtest Date Range")
thruDay = input(defval = 1, title = "Thru Day", type = input.integer, minval = 1, maxval = 31, group = "Backtest Date Range")
thruYear = input(defval = 2099, title = "Thru Year", type = input.integer, minval = 1970, group = "Backtest Date Range")
// Inputs for EMA, SMA and to adjust your take profit and stop losses in the input options while backtesting, it's result of your input is calculated back to percentages
ema = ema(close, emaLength)
sma = sma(close, smaLength)
profitlong = input(title = "Profit Long %", type = input.float, defval = 2, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01
losslong = input(title = "Loss Long %", type = input.float, defval = 1, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01
profitshort = input(title = "Profit Short %", type = input.float, defval = 2, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01
lossshort = input(title = "Loss Short %", type = input.float, defval = 1, minval = 0.1, maxval = 100, step = 0.1, group = "TP / SL %") * 0.01
// Check EMA and SMA also check the backtest range. inDataRange is a true or false statement, true if the date right now is between the parameters that's filled at the corresponding inputs
// (for example 1-1-2020 till 12-12-2020, if that specific bar is between these dates, statement is true and trade will be executed)
// If the date is not in between the given parameters, statement turns to false and it won't allow new trades and closes all current trades as seen with the strategy.close_all function
inDataRange = (time >= timestamp(syminfo.timezone, fromYear, fromMonth, fromDay, 0, 0)) and (time < timestamp(syminfo.timezone, thruYear, thruMonth, thruDay, 0, 0))
long = close > ema and close > sma and inDataRange
short = close < ema and close < sma and inDataRange
// Entry and exit signals + checking backtest date range, what the signals are supposed to do is noted at the beginning of the code
// I want a way to filter out weak signals that are ranging around the zero point of the histogram.
// So far couldn't think of a decent way to do this over multiple symbols since the range of the histogram changes with every symbol, sometimes ranging between 0 and 1 or sometimes ranging between 0 and 1000
// I could probably use a cofficiency or something, but that's beyond my grasp at the moment
// Also I wanted a way to let my strategy determine a stop loss based on the pullback and having a 1.5 risk/reward TP on top of that. Couldn't really figure out a way to determine the pullback
if (crossover(macd, signal) and macd > 0)
strategy.entry("Long", long = strategy.long,
comment = "Long Buy",
when = long)
strategy.exit("Exit Long", "Long", profit = close * profitlong / syminfo.mintick, loss = close * losslong / syminfo.mintick)
if (crossunder(macd, signal) and macd < 0)
strategy.entry("Short", long = strategy.short,
comment = "Short Buy",
when = short)
strategy.exit("Exit Short", "Short", profit = close * profitshort / syminfo.mintick, loss = close * lossshort / syminfo.mintick)
// To make sure the backtesting doesn't leave a position open beyond, or before, our applied dates
if (not inDataRange)
strategy.close_all()
// plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)