Strategi ini menggunakan moving averages sebagai dasar perhitungan dan menambahkan beberapa belts di atas dan di bawahnya. Ketika harga menyentuh belts, buka posisi lebih banyak atau kosong, tergantung pada arah.
Strategi ini menggunakan Moving Average Index (DEMA) sebagai indikator dasar. Moving Average Index (DEMA) adalah sebuah Moving Average yang memiliki sensitivitas tinggi terhadap perubahan harga. Atas dasar itu, strategi ini menambahkan beberapa pita harga di kedua sisi atas dan bawah, membentuk sebuah zona jaringan yang sama.
Strategi ini akan membuka posisi kosong ketika harga naik mendekati band yang terikat di atas; strategi ini akan membuka posisi lebih banyak ketika harga turun menyentuh band yang terikat di bawah. Strategi ini akan menambah posisi sekali setiap kali menyentuh band harga baru. Strategi ini akan menghapus semua posisi ketika harga kembali di dekat garis rata-rata bergerak.
Strategi ini menangkap fluktuasi harga yang berlebihan melalui zona bundar dan menarik diri dari keuntungan ketika terjadi pergeseran, mencapai tujuan perdagangan yang murah dan mahal. Ini berlaku untuk siklus pasar dengan karakteristik kembalinya rata-rata yang jelas, seperti mata uang digital seperti bitcoin.
Risiko dapat dikurangi dengan memperluas jangkauan jaringan paket, meningkatkan sensitivitas terhadap perubahan harga yang memicu. Pada saat yang sama, parameter panjang garis rata-rata bergerak dapat disesuaikan dengan situasi siklus yang berbeda.
Strategi ini dapat dioptimalkan dalam beberapa hal:
Mengoptimalkan algoritma rata-rata bergerak. Dapat menguji efek dari berbagai jenis indikator rata-rata bergerak.
Menyesuaikan parameter panjang garis rata-rata. Memperpendek siklus dapat meningkatkan penangkapan perubahan harga jangka pendek, tetapi juga dapat meningkatkan perdagangan bising.
Mengoptimalkan parameter jaringan paket. Anda dapat menguji pengaturan persentase yang berbeda untuk menemukan kombinasi parameter yang optimal.
Meningkatkan strategi Stop Loss. Mengatur Stop Loss yang bergerak atau Stop Loss yang mundur, dapat secara efektif mengendalikan kerugian tunggal.
Tambahkan kondisi penyaringan. Dalam kombinasi dengan sinyal indikator lainnya, hindari pembukaan posisi yang tidak valid dalam situasi yang tidak rasional.
Strategi nilai rata-rata rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai rantai
/*backtest
start: 2022-11-27 00:00:00
end: 2023-12-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Mean Reversion - Envelope Strategy", overlay=true )
// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A MEAN REVERSION SYSTEM THAT USES A MOVING AVERAGE AS BASE CALCULATION AND A % OF THIS MOVING AVERAGE TO CALCULATE THE ENVELOPE
// BY DEFAULT, THE SYSTEM WILL PLACE LONG ORDERS ON THE MOVING AVERAGE -5% PER ENVELOPE COUNT (5%, 10% AND SO ON...)
// YOU CAN ENABLE THE SHORT ORDERS THAT WILL FOLLOW THE SAME LOGIC ON THE OPPOSITE SIDE
// THE SYSTEM WILL CLOSE EVERY ONGOING TRADE WHEN THE PRICE RETURNS TO THE MEAN
// ---------------------------------------------
// ---------------- SETTINGS -------------------
src = input(close, "Moving Average Source", group = "Moving Average")
ma_window = input.int(5, "Moving Average Window", step = 1, group = "Moving Average")
ma_type = input.string('4. DEMA', "Moving Average Type", options=['1. SMA', '2. EMA', '3. RMA', '4. DEMA'], group = "Moving Average")
enveloppe_step = input.float(0.05, "Delta Per Enveloppe", step = 0.01, group = "Envelope")
envelope_count = input.int(5, "Envelope count", options = [1, 2, 3, 4, 5], group = "Envelope")
use_longs = input.bool(true, 'Use Long Orders ?', group = "Orders")
use_short = input.bool(false, 'Use Short Orders ?', group = "Orders")
// ---------------------------------------------
// -------------- INDICATORS -------------------
ma_funct() =>
if(ma_type == '1. SMA')
ta.sma(src, ma_window)
if(ma_type == '2. EMA')
ta.ema(src, ma_window)
if(ma_type == '3. RMA')
ta.rma(src, ma_window)
if(ma_type == '4. DEMA')
2 * ta.ema(src, ma_window) - ta.ema(ta.ema(src, ma_window), ma_window)
ma_base = ma_funct()
ma_high_1 = envelope_count > 0 ? ma_base * (1 + enveloppe_step) : na
ma_high_2 = envelope_count > 1 ? ma_base * (1 + enveloppe_step * 2) : na
ma_high_3 = envelope_count > 2 ? ma_base * (1 + enveloppe_step * 3) : na
ma_high_4 = envelope_count > 3 ? ma_base * (1 + enveloppe_step * 4) : na
ma_high_5 = envelope_count > 4 ? ma_base * (1 + enveloppe_step * 5) : na
ma_low_1 = envelope_count > 0 ? ma_base * (1 - enveloppe_step) : na
ma_low_2 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 2) : na
ma_low_3 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 3) : na
ma_low_4 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 4) : na
ma_low_5 = envelope_count > 0 ? ma_base * (1 - enveloppe_step * 5) : na
// ---------------------------------------------
// --------------- STRATEGY --------------------
if use_longs
if envelope_count > 0 and strategy.opentrades < 1
strategy.entry('long 1', strategy.long, limit=ma_low_1, qty=(strategy.equity / ma_low_1) * (1 / envelope_count))
if envelope_count > 1 and strategy.opentrades < 2
strategy.entry('long 2', strategy.long, limit=ma_low_2, qty=(strategy.equity / ma_low_2) * (1 / envelope_count))
if envelope_count > 2 and strategy.opentrades < 3
strategy.entry('long 3', strategy.long, limit=ma_low_3, qty=(strategy.equity / ma_low_3) * (1 / envelope_count))
if envelope_count > 3 and strategy.opentrades < 4
strategy.entry('long 4', strategy.long, limit=ma_low_4, qty=(strategy.equity / ma_low_4) * (1 / envelope_count))
if envelope_count > 4 and strategy.opentrades < 5
strategy.entry('long 5', strategy.long, limit=ma_low_5, qty=(strategy.equity / ma_low_5) * (1 / envelope_count))
if use_short
if envelope_count > 0 and strategy.opentrades < 1
strategy.entry('short 1', strategy.short, limit=ma_high_1, qty=(strategy.equity / ma_high_1) * (1 / envelope_count))
if envelope_count > 1 and strategy.opentrades < 2
strategy.entry('short 2', strategy.short, limit=ma_high_2, qty=(strategy.equity / ma_high_2) * (1 / envelope_count))
if envelope_count > 2 and strategy.opentrades < 3
strategy.entry('short 3', strategy.short, limit=ma_high_3, qty=(strategy.equity / ma_high_3) * (1 / envelope_count))
if envelope_count > 3 and strategy.opentrades < 4
strategy.entry('short 4', strategy.short, limit=ma_high_4, qty=(strategy.equity / ma_high_4) * (1 / envelope_count))
if envelope_count > 4 and strategy.opentrades < 5
strategy.entry('short 5', strategy.short, limit=ma_high_5, qty=(strategy.equity / ma_high_5) * (1 / envelope_count))
strategy.exit('close', limit=ma_base)
// ---------------------------------------------
// ------------------ PLOT ---------------------
ma_base_plot = plot(ma_base, title = "Base MA", color = color.orange, linewidth = 3, offset = 1)
ma_high_1_plot = plot(ma_high_1, title = "MA high 1", color = color.red, offset = 1)
ma_high_2_plot = plot(ma_high_2, title = "MA high 2", color = color.red, offset = 1)
ma_high_3_plot = plot(ma_high_3, title = "MA high 3", color = color.red, offset = 1)
ma_high_4_plot = plot(ma_high_4, title = "MA high 4", color = color.red, offset = 1)
ma_high_5_plot = plot(ma_high_5, title = "MA high 5", color = color.red, offset = 1)
ma_low_1_plot = plot(ma_low_1, title = "MA low 1", color = color.green, offset = 1)
ma_low_2_plot = plot(ma_low_2, title = "MA low 2", color = color.green, offset = 1)
ma_low_3_plot = plot(ma_low_3, title = "MA low 3", color = color.green, offset = 1)
ma_low_4_plot = plot(ma_low_4, title = "MA low 4", color = color.green, offset = 1)
ma_low_5_plot = plot(ma_low_5, title = "MA low 5", color = color.green, offset = 1)