この戦略の主な考え方は,定量的な取引のためにピボットポイントを使用することです.重要なスウィング・ハイズとローズを探し,価格がこれらのキーレベルを突破すると逆転取引を行います.
この戦略はまず,スイング・ハイ&ローポイントを特定するために,関数pivotHighSig ((() とpivotLowSig ((() を定義する.この2つの関数は,左側と右側で適格なピボットポイントを探します.
スウィング・マイスの基準は逆であり,両側から高いマイズと低いマイズを探している.この基準は,スウィング・マイズとマイズの両側から異なる.この基準は,スウィング・マイズとマイズの両側から異なる.
スウィング・ハイズと・ローズを特定した後,戦略は,これらのピボットポイントからピボットポイント,すなわちピボットから重要なポイントをさらに選択する.これは,スウィング・ハイズと・ローズのための複数の歴史的変数を定義することによって達成される.例えば,ph1,ph2など.
最後に,価格がピボットのピボットポイントを突破すると逆転取引が行われます.
このピホットポイントに基づく定量戦略には以下の利点があります.
この戦略にはいくつかのリスクもあります:
この戦略は以下の分野において改善可能である.
この戦略は全体的にうまく機能しています. 基本的なアイデアは重要なピボットポイントを検出し,そのブレイクアウトを取引することです. さらに強化することで,より高額で一貫した利益のためのより堅牢で信頼できる信号を生成することができます.
/*backtest start: 2023-02-13 00:00:00 end: 2024-02-19 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Pivot of Pivot Reversal Strategy [QuantNomad]", shorttitle = "PoP Reversal Strategy [QN]", overlay=true) // Inputs leftBars = input(4, title = 'PP Left Bars') rightBars = input(2, title = 'PP Right Bars') atr_length = input(14, title = 'ATR Length') atr_mult = input(0.1, title = 'ATR Mult') // Pivot High Significant Function pivotHighSig(left, right) => pp_ok = true atr = atr(atr_length) for i = 1 to left if (high[right] < high[right+i] + atr * atr_mult) pp_ok := false for i = 0 to right-1 if (high[right] < high[i] + atr * atr_mult) pp_ok := false pp_ok ? high[right] : na // Pivot Low Significant Function pivotLowSig(left, right) => pp_ok = true atr = atr(atr_length) for i = 1 to left if (low[right] > low[right+i] - atr * atr_mult) pp_ok := false for i = 0 to right-1 if (low[right] > low[i] - atr * atr_mult) pp_ok := false pp_ok ? low[right] : na swh = pivotHighSig(leftBars, rightBars) swl = pivotLowSig (leftBars, rightBars) 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]) 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]) // Pivots of pivots ph1 = 0.0 ph2 = 0.0 ph3 = 0.0 pl1 = 0.0 pl2 = 0.0 pl3 = 0.0 pphprice = 0.0 pplprice = 0.0 ph3 := swh_cond ? nz(ph2[1]) : nz(ph3[1]) ph2 := swh_cond ? nz(ph1[1]) : nz(ph2[1]) ph1 := swh_cond ? hprice : nz(ph1[1]) pl3 := swl_cond ? nz(pl2[1]) : nz(pl3[1]) pl2 := swl_cond ? nz(pl1[1]) : nz(pl2[1]) pl1 := swl_cond ? lprice : nz(pl1[1]) pphprice := swh_cond and ph2 > ph1 and ph2 > ph3 ? ph2 : nz(pphprice[1]) pplprice := swl_cond and pl2 < pl1 and pl2 < pl3 ? pl2 : nz(pplprice[1]) if (le) strategy.entry("PP_RevLE", strategy.long, comment="PP_RevLE", stop=pphprice + syminfo.mintick) if (se) strategy.entry("PP_RevSE", strategy.short, comment="PP_RevSE", stop=pplprice - syminfo.mintick) // Plotting plot(lprice, color = color.red, transp = 55) plot(hprice, color = color.green, transp = 55) plot(pplprice, color = color.red, transp = 0, linewidth = 2) plot(pphprice, color = color.green, transp = 0, linewidth = 2)