이 전략은 시장 반전 지점을 식별하고 이를 기반으로 거래 결정을 내리기 위해 피보트 포인트를 사용합니다. 왼쪽의 마지막 4 촛불 내에서 피보트 하이가 형성되면 전략은 긴 포지션으로 진입합니다. 왼쪽의 마지막 4 촛불 내에서 피보트 로우가 형성되면 전략은 짧은 포지션으로 진입합니다. 스톱 손실은 입상 가격보다 높거나 낮게 한 틱 크기 (syminfo.mintick) 로 설정됩니다. 두 가지 출구 조건이 있습니다: 1) 다음 반대 피보트 포인트가 나타날 때 출구; 2) 부동 손실이 30%에 도달하면 출구.
이 전략은 피보트 포인트 지표에 기반한 양방향 거래 시스템을 구축하고, 피보트 최고에서 길고 피보트 최저에서 짧게 시장 반전 기회를 포착합니다. 전략은 특정 이론적 근거와 실용적 가치를 가지고 있지만, 피보트 포인트 지표 자체의 한계로 인해 전략은 실제 운영에서 일부 위험과 도전에 직면 할 수 있습니다. 피보트 포인트 지표 유형, 매개 변수, 필터링 조건, 스톱 손실 및 수익 취득 등을 최적화함으로써 전략의 견고성과 수익성을 더욱 향상시킬 것으로 예상됩니다.
/*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()