Strategi ini didasarkan pada ide perdagangan jangka pendek klasik - pergi pendek setelah candlesticks bullish berturut-turut dan pergi panjang setelah candlesticks bearish berturut-turut. Secara khusus, strategi ini mendeteksi tinggi badan dan warna candlesticks untuk menentukan terjadinya candlesticks berturut-turut dengan warna yang sama, dan kemudian menggunakan indikator RVI untuk menentukan apakah pembalikan harus terjadi. Secara keseluruhan, ini adalah strategi yang menggabungkan pola candlestick dan indikator RVI untuk menerapkan perdagangan pembalikan jangka pendek. Ini bertujuan untuk menangkap peluang pembalikan ketika perilaku harga jangka pendek yang abnormal terjadi.
Logika inti dari strategi ini meliputi:
Periksa apakah tinggi tubuh candlestick melebihi ambang minimum untuk menyaring pergerakan bullish/bearish yang tidak signifikan.
Tentukan apakah dua candlestick sebelumnya memiliki warna yang sama, yang mungkin menunjukkan potensi pembalikan jangka pendek.
Jika lilin saat ini memiliki warna yang berbeda dari dua yang sebelumnya, sinyal perdagangan dihasilkan. yaitu pergi panjang setelah dua lilin bullish dan satu bullish, pergi pendek setelah dua lilin bullish dan satu bearish.
Setelah memasuki perdagangan, persilangan garis RVI dan garis sinyal digunakan untuk menentukan posisi keluar. Indikator RVI dapat mengidentifikasi pembalikan jangka pendek.
Singkatnya, strategi ini menggabungkan pola candlestick dan indikator RVI untuk menciptakan sistem reversi rata-rata jangka pendek, menangkap pembalikan menguntungkan dari perilaku harga jangka pendek yang abnormal.
Keuntungan utama dari strategi ini meliputi:
Menangkap anomali harga jangka pendek. lilin berturut-turut dari warna yang sama sering menunjukkan anomali siap untuk pembalikan.
Indikator RVI membantu penentuan pembalikan, melengkapi pola candlestick untuk sinyal yang lebih stabil.
Frekuensi perdagangan yang relatif tinggi untuk perdagangan jangka pendek. lilin berwarna yang sama berturut-turut sering terjadi, memungkinkan peluang perdagangan yang luas.
Risiko yang dapat dikontrol dari ukuran perdagangan tetap dan stop loss/profit taking.
Logika sederhana dan jelas yang mudah dipahami dan diterapkan untuk perdagangan langsung.
Beberapa risiko yang perlu diperhatikan:
Pembalikan jangka pendek tidak dijamin selama tren yang kuat ketika sinyal mungkin gagal.
RVI dapat menghasilkan sinyal yang salah dalam kondisi pasar khusus.
Pengaturan stop loss yang tidak memadai dapat menyebabkan kerugian besar.
Kriteria candlestick berturut-turut terlalu kaku. Pertimbangkan untuk mengoptimalkan persentase yang diperlukan dari lilin warna yang sama dalam periode N.
Ukuran perdagangan tetap tidak dapat mengendalikan risiko posisi keseluruhan.
Beberapa cara untuk lebih mengoptimalkan strategi:
Optimalkan logika candlestick berturut-turut menggunakan statistik daripada periode tetap.
Optimalkan parameter RVI untuk menemukan kombinasi terbaik.
Tambahkan stop loss berdasarkan volatilitas pasar.
Tambahkan ukuran posisi berdasarkan penggunaan akun.
Tambahkan filter seperti saluran, tren untuk meningkatkan stabilitas sistem.
Pengaturan parameter untuk produk yang berbeda.
Pembelajaran mesin pada data historis untuk secara dinamis mengoptimalkan parameter.
Secara singkat, ini adalah strategi reversi rata-rata jangka pendek yang khas berdasarkan pola lilin dan RVI. Ini memiliki keuntungan tetapi juga risiko. Optimasi lebih lanjut pada parameter dan ketahanan dapat meningkatkan stabilitas dan profitabilitasnya. Namun, tidak ada strategi yang menghilangkan kerugian sepenuhnya. Pedagang harus tetap disiplin dalam manajemen risiko.
/*backtest start: 2022-10-07 00:00:00 end: 2023-10-07 00:00:00 period: 3d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //This is part of a series of strategies developed automatically by a online software. I cannot share the site url, which is not related to me in any way, because it is against the TV reules. // //This strategy was optimized for GBPUSD, timeframe 1D, fixed lots 0.1, initial balance 1000€ //LOGIC: //- LONG ENTRY when previous candle is bear //- LONG EXIT: RVI > signal line //- SHORT ENTRY when previous candle is bull //- SHORT EXIT: RVI < signal line // //NOTE: I considered the open of actual candle instead of close otherwise there will be a back shift of 1 candle in pine script // //Take profit = no //Stop loss = no // strategy("Expert studio strategy 1 - GBPUSD", overlay=false, precision=6, initial_capital=1000,calc_on_every_tick=true, pyramiding=0, default_qty_type=strategy.fixed, default_qty_value=10000, currency=currency.EUR) //INPUTS src = input(close, "source") min_body_height = input(42, "Minimum body height", type=input.float) //bars_back=input(2, "Consecutive bars of same color") rvi_period = input(55, "RVI period") //CALCULATIONS_____________________________ //candle color body_height = abs(open - close) / syminfo.mintick body_color = open > close ? color.red : color.green //da migliorare for i=0 to bars_back-1 //RVI -------- thanks to hecate p = rvi_period CO = close - open HL = high - low value1 = (CO + 2 * CO[1] + 2 * CO[2] + CO[3]) / 6 value2 = (HL + 2 * HL[1] + 2 * HL[2] + HL[3]) / 6 num = sum(value1, p) denom = sum(value2, p) RVI = denom != 0 ? num / denom : 0 RVIsig = (RVI + 2 * RVI[1] + 2 * RVI[2] + RVI[3]) / 6 plot(RVI, color=color.green, style=plot.style_line, linewidth=1) plot(RVIsig, color=color.red, style=plot.style_line, linewidth=1) //---------------------------------- longCondition = body_height[1] >= min_body_height and body_color[1] == color.red and body_height[0] >= min_body_height and body_color[0] == color.red and RVIsig > RVI exitLong = RVI > RVIsig shortCondition = body_height[1] >= min_body_height and body_color[1] == color.green and body_height[0] >= min_body_height and body_color[0] == color.green and RVIsig < RVI exitShort = RVI < RVIsig if longCondition and strategy.opentrades == 0 strategy.entry("Long", strategy.long) strategy.close("Long", when=exitLong) if shortCondition and strategy.opentrades == 0 strategy.entry("Short", strategy.short) strategy.close("Short", when=exitShort) // === Backtesting Dates === thanks to Trost testPeriodSwitch = input(false, "Custom Backtesting Dates") testStartYear = input(2011, "Backtest Start Year") testStartMonth = input(10, "Backtest Start Month") testStartDay = input(7, "Backtest Start Day") testStartHour = input(0, "Backtest Start Hour") testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0) testStopYear = input(2018, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testStopHour = input(23, "Backtest Stop Hour") testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, testStopHour, 0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false testPeriod_1 = testPeriod() isPeriod = testPeriodSwitch == true ? testPeriod_1 : true // === /END if not isPeriod strategy.cancel_all() strategy.close_all()