資源の読み込みに... 荷物...

ピボットポイントに基づくピボット逆転量的な戦略

作者: リン・ハーンチャオチャン開催日:2024年2月20日 14:22:13
タグ:

img

概要

この戦略の主な考え方は,定量的な取引のためにピボットポイントを使用することです.重要なスウィング・ハイズとローズを探し,価格がこれらのキーレベルを突破すると逆転取引を行います.

戦略の論理

この戦略はまず,スイング・ハイ&ローポイントを特定するために,関数pivotHighSig ((() とpivotLowSig ((() を定義する.この2つの関数は,左側と右側で適格なピボットポイントを探します.

スウィング・マイスの基準は逆であり,両側から高いマイズと低いマイズを探している.この基準は,スウィング・マイズとマイズの両側から異なる.この基準は,スウィング・マイズとマイズの両側から異なる.

スウィング・ハイズと・ローズを特定した後,戦略は,これらのピボットポイントからピボットポイント,すなわちピボットから重要なポイントをさらに選択する.これは,スウィング・ハイズと・ローズのための複数の歴史的変数を定義することによって達成される.例えば,ph1,ph2など.

最後に,価格がピボットのピボットポイントを突破すると逆転取引が行われます.

利点

このピホットポイントに基づく定量戦略には以下の利点があります.

  1. 逆転が頻繁に起こる市場におけるサポートとレジスタンスレベルを利用します
  2. 双面取引における重要な高点と低点の両方を特定します
  3. ピボットポイントは,顕著な極点であり,それらを破って強い信号を与える
  4. ピボットのピボットポイントを使用すると,信号はさらに信頼性があります

リスク と 解決策

この戦略にはいくつかのリスクもあります:

  1. ピボットポイントを誤って判断すると,間違った信号が発信されます.解決策は,ピボットポイントをより正確に識別するために左/右範囲パラメータを調整することです.
  2. 解決策は 音量や運動量などの要素を組み合わせた信号をフィルタリングすることです

強化 分野

この戦略は以下の分野において改善可能である.

  1. ストップ・ロスのメカニズムを追加して戦略をより安定させる
  2. 信号フィルタリングのためのより多くの技術指標を組み込む
  3. マシン学習を用いてPRED逆転モデルを開発し,ピボットポイント予測をさらに強化する
  4. アダプティブパラメータをビルド

結論

この戦略は全体的にうまく機能しています. 基本的なアイデアは重要なピボットポイントを検出し,そのブレイクアウトを取引することです. さらに強化することで,より高額で一貫した利益のためのより堅牢で信頼できる信号を生成することができます.


/*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)

もっと