
Strategi ini diberi nama Mean Reversion Reverse Strategy Based on Moving Average, dan ide utamanya adalah membeli setelah melewati garis rata-rata kunci dan berhenti setelah mencapai target keuntungan yang ditetapkan.
Prinsip utama dari strategi ini adalah memanfaatkan pembalikan rata-rata jangka pendek untuk menangkap peluang rebound dalam kondisi perdagangan. Khususnya, ketika harga jatuh dari rata-rata periode yang lebih lama (seperti 20 hari, 50 hari, dll) setelah menunjukkan tanda-tanda overshoot yang kuat, harga sering menghasilkan beberapa tingkat rebound karena sifat reversi rata-rata pergerakan pasar.
Logika pembelian spesifik dari strategi ini adalah: Beli satu tangan setelah harga jatuh di bawah garis 20 hari, pasang satu tangan setelah jatuh di bawah garis 50 hari, terus pasang satu tangan setelah jatuh di bawah garis 100 hari, pasang satu tangan maksimal setelah jatuh di bawah garis 200 hari, lakukan 4 tangan tambahan. Setelah mencapai target stop loss yang telah ditentukan.
Strategi ini secara keseluruhan adalah strategi perdagangan rata-rata yang lebih klasik dan umum. Strategi ini benar-benar menggunakan fitur smooting rata-rata, sekaligus menggabungkan beberapa rata-rata untuk mengidentifikasi waktu pembelian jangka pendek.
/*backtest
start: 2023-12-13 00:00:00
end: 2023-12-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA_zorba1", shorttitle="zorba_ema", overlay=true)
// Input parameters
qt1 = input.int(5, title="Quantity 1", minval=1)
qt2 = input.int(10, title="Quantity 2", minval=1)
qt3 = input.int(15, title="Quantity 3", minval=1)
qt4 = input.int(20, title="Quantity 4", minval=1)
ema10 = ta.ema(close, 10)
ema20 = ta.ema(close, 20)
ema50 = ta.ema(close, 50)
ema100 = ta.ema(close, 100)
ema200 = ta.ema(close, 200)
// Date range filter
start_date = timestamp(year=2021, month=1, day=1)
end_date = timestamp(year=2024, month=10, day=27)
in_date_range = true
// Profit condition
profit_percentage = input(1, title="Profit Percentage") // Adjust this value as needed
// Pyramiding setting
pyramiding = input.int(2, title="Pyramiding", minval=1, maxval=10)
// Buy conditions
buy_condition_1 = in_date_range and close < ema20 and close > ema50 and close < open and close < low[1]
buy_condition_2 = in_date_range and close < ema50 and close > ema100 and close < open and close < low[1]
buy_condition_3 = in_date_range and close < ema100 and close > ema200 and close < open and close < low[1]
buy_condition_4 = in_date_range and close < ema200 and close < open and close < low[1]
// Exit conditions
profit_condition = strategy.position_avg_price * (1 + profit_percentage / 100) <= close
exit_condition_1 = in_date_range and (close > ema10 and ema10 > ema20 and ema10 > ema50 and ema10 > ema100 and ema10 > ema200 and close < open) and profit_condition and close < low[1] and close < low[2]
exit_condition_2 = in_date_range and (close < ema10 and close[1] > ema10 and close < close[1] and ema10 > ema20 and ema10 > ema50 and ema10 > ema100 and ema10 > ema200 and close < open) and profit_condition and close < low[1] and close < low[2]
// Exit condition for when today's close is less than the previous day's low
//exit_condition_3 = close < low[1]
// Strategy logic
strategy.entry("Buy1", strategy.long, qty=qt1 * pyramiding, when=buy_condition_1)
strategy.entry("Buy2", strategy.long, qty=qt2 * pyramiding, when=buy_condition_2)
strategy.entry("Buy3", strategy.long, qty=qt3 * pyramiding, when=buy_condition_3)
strategy.entry("Buy4", strategy.long, qty=qt4 * pyramiding, when=buy_condition_4)
strategy.close("Buy1", when=exit_condition_1 or exit_condition_2)
strategy.close("Buy2", when=exit_condition_1 or exit_condition_2)
strategy.close("Buy3", when=exit_condition_1 or exit_condition_2)
strategy.close("Buy4", when=exit_condition_1 or exit_condition_2)