Strategi ini menggunakan Pivot Points untuk mengidentifikasi titik pembalikan pasar dan membuat keputusan perdagangan berdasarkan mereka. Ketika Pivot High terbentuk dalam 4 lilin terakhir di sebelah kiri, strategi memasuki posisi panjang; ketika Pivot Low terbentuk dalam 4 lilin terakhir di sebelah kiri, strategi memasuki posisi pendek. Stop loss ditetapkan pada satu ukuran tik (syminfo.mintick) di atas atau di bawah harga masuk. Ada dua kondisi keluar: 1) keluar ketika titik pivot berlawanan berikutnya muncul; 2) keluar ketika kerugian mengambang mencapai 30%.
Strategi ini membangun sistem perdagangan bidirectional berdasarkan indikator Pivot Point, menangkap peluang pembalikan pasar dengan pergi panjang pada Pivot Highs dan pendek pada Pivot Lows. Strategi ini memiliki dasar teoritis dan nilai praktis tertentu, tetapi karena keterbatasan indikator Pivot Point itu sendiri, strategi dapat menghadapi beberapa risiko dan tantangan dalam operasi yang sebenarnya. Dengan mengoptimalkan jenis indikator Pivot Point, parameter, kondisi penyaringan, stop loss dan pengambilan keuntungan, dll., diharapkan untuk meningkatkan ketahanan dan profitabilitas strategi.
/*backtest start: 2023-04-24 00:00:00 end: 2024-04-29 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Pivot Reversal Strategy with Pivot Exit", overlay=true) leftBars = input(4) rightBars = input(2) var float dailyEquity = na // Reset equity to $10,000 at the beginning of each day isNewDay = ta.change(time("D")) != 0 if (isNewDay) dailyEquity := 10000 // Calculate pivot highs and lows swh = ta.pivothigh(leftBars, rightBars) swl = ta.pivotlow(leftBars, rightBars) // Define long entry condition swh_cond = not na(swh) hprice = 0.0 hprice := swh_cond ? swh : hprice[1] le = false le := swh_cond ? true : (le[1] and high > hprice ? false : le[1]) // Enter long position if long entry condition is met if (le) strategy.entry("PivRevLE", strategy.long, comment="EnterLong", stop=hprice + syminfo.mintick) // Define short entry condition swl_cond = not na(swl) lprice = 0.0 lprice := swl_cond ? swl : lprice[1] se = false se := swl_cond ? true : (se[1] and low < lprice ? false : se[1]) // Enter short position if short entry condition is met if (se) strategy.entry("PivRevSE", strategy.short, comment="EnterShort", stop=lprice - syminfo.mintick) // Exit condition: Exit at the next pivot point exitAtNextPivot() => if strategy.opentrades > 0 if strategy.position_size > 0 // Exiting long position at next pivot low if not na(swl) strategy.exit("ExitLong", "PivRevLE", stop=swl - syminfo.mintick) else // Exiting short position at next pivot high if not na(swh) strategy.exit("ExitShort", "PivRevSE", stop=swh + syminfo.mintick) // Call exitAtNextPivot function exitAtNextPivot() // Exit condition: Exit if profit is less than 30% exitIfProfitLessThanThirtyPercent() => if strategy.opentrades > 0 if strategy.position_size > 0 // Calculate profit percentage for long position profit_percentage_long = (close - strategy.position_avg_price) / strategy.position_avg_price * 100 // Exiting long position if profit is less than 30% if profit_percentage_long < -30 strategy.close("PivRevLE") else // Calculate profit percentage for short position profit_percentage_short = (strategy.position_avg_price - close) / strategy.position_avg_price * 100 // Exiting short position if profit is less than 30% if profit_percentage_short < -30 strategy.close("PivRevSE") // Call exitIfProfitLessThanThirtyPercent function exitIfProfitLessThanThirtyPercent()