Strategi ini menggunakan Pivot Points untuk mengenal pasti titik pembalikan pasaran dan membuat keputusan perdagangan berdasarkan mereka. Apabila Pivot High terbentuk dalam 4 lilin terakhir di sebelah kiri, strategi memasuki kedudukan panjang; apabila Pivot Low terbentuk dalam 4 lilin terakhir di sebelah kiri, strategi memasuki kedudukan pendek. Stop loss ditetapkan pada satu saiz tik (syminfo.mintick) di atas atau di bawah harga kemasukan. Terdapat dua syarat keluar: 1) keluar apabila titik pusingan bertentangan seterusnya muncul; 2) keluar apabila kerugian terapung mencapai 30%.
Strategi ini membina sistem perdagangan dua arah berdasarkan penunjuk Titik Pivot, menangkap peluang pembalikan pasaran dengan pergi lama di Puncak Titik Pivot dan pendek di Titik Pivot. Strategi ini mempunyai asas teori dan nilai praktikal tertentu, tetapi disebabkan oleh batasan penunjuk Titik Pivot itu sendiri, strategi ini mungkin menghadapi beberapa risiko dan cabaran dalam operasi sebenar. Dengan mengoptimumkan jenis penunjuk Titik Pivot, parameter, syarat penapisan, berhenti kerugian dan mengambil keuntungan, dll., diharapkan untuk meningkatkan lagi ketahanan dan keuntungan 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()