Strategi pembalikan trend kripto berasaskan titik tinggi dan titik rendah swing Pivot

Penulis:ChaoZhang, Tarikh: 2024-01-12 14:13:36
Tag:

img

Ringkasan

Strategi ini mengenal pasti pembalikan trend dalam aset kripto berdasarkan titik tinggi / rendah swing PIVOT dan isyarat pecah. Ia tergolong dalam kategori strategi pembalikan pecah. Strategi ini mula-mula mengira titik harga tertinggi dan terendah baru-baru ini sebagai tahap PIVOT, kemudian mengesan jika harga memecahkan tahap utama ini, menandakan perubahan trend utama.

Bagaimana Strategi Berfungsi

  1. Mengira titik tinggi / rendah PIVOT

    Menggunakan ta.pivothigh (() dan ta.pivotlow (()) untuk mencari harga tertinggi tertinggi dan harga terendah terendah selama tempoh carian bar tersuai untuk merangka titik PIVOT.

  2. Mengenal pasti Isyarat Penembusan

    Jika harga pecah di atas titik rendah PIVOT, atau pecah di bawah titik tinggi PIVOT, strategi menganggapnya sebagai isyarat pembalikan trend.

  3. Tetapkan Keadaan Penapis

    Menghendaki harga untuk memecahkan tahap PIVOT dengan jarak yang bermakna, dan harga penutupan melintasi harga penutupan 150 bar untuk mengelakkan whipsaws.

  4. Masuk dan Keluar

    Trigger tanda beli pada keadaan panjang, tutup kedudukan panjang pada keadaan keluar.

Kelebihan

  1. Titik PIVOT sensitif kepada perubahan trend utama
  2. Mengelakkan whipsaws dalam trend penyatuan dengan penapis
  3. Mengesan pembalikan awal dengan swing tinggi / rendah pecah

Risiko

  1. Kitaran yang lebih besar boleh menyebabkan strategi untuk mendapatkan whipsawed
  2. Titik PIVOT dan penapis perlu disesuaikan untuk setiap aset
  3. Kos pertukaran kesan hasil, memerlukan struktur bayaran hampir sifar

Peluang Peningkatan

  1. Uji tempoh melihat balik PIVOT yang berbeza
  2. Tambah stop loss bergerak kepada kawalan kerugian setiap perdagangan
  3. Gabungkan dengan penunjuk lain untuk penapis

Kesimpulan

Strategi ini secara keseluruhan kuat untuk menangkap pembalikan besar, tetapi memerlukan parameter tersuai untuk setiap aset dan kawalan risiko.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Scriptâ„¢ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © nkrastins95

//@version=5
strategy("Swing Hi Lo", overlay=true, margin_long=100, margin_short=100)

//-----------------------------------------------------------------------------------------------------------------------//

tf = input.timeframe(title="Timeframe", defval="")

gr="LENGTH LEFT / RIGHT"
leftLenH = input.int(title="Pivot High", defval=10, minval=1, inline="Pivot High",group=gr)
rightLenH = input.int(title="/", defval=10, minval=1, inline="Pivot High",group=gr)
colorH = input(title="", defval=color.red, inline="Pivot High",group=gr)

leftLenL = input.int(title="Pivot Low", defval=10, minval=1, inline="Pivot Low", group=gr)
rightLenL = input.int(title="/", defval=10, minval=1, inline="Pivot Low",group=gr)
colorL = input(title="", defval=color.blue, inline="Pivot Low",group=gr)

//-----------------------------------------------------------------------------------------------------------------------//

pivotHigh(ll, rl) =>
    maxLen = 1000
    float ph = ta.pivothigh(ll, rl)
    int offset = 0
    while offset < maxLen
        if not na(ph[offset])
            break 
        offset := offset + 1
    ph[offset]

pivotLow(ll, rl) =>
    maxLen = 1000
    float pl = ta.pivotlow(ll, rl)
    int offset = 0
    while offset < maxLen
        if not na(pl[offset])
            break 
        offset := offset + 1
    pl[offset]


//-----------------------------------------------------------------------------------------------------------------------//

ph = request.security(syminfo.tickerid, tf, pivotHigh(leftLenH, rightLenH), barmerge.gaps_off, barmerge.lookahead_on)
pl = request.security(syminfo.tickerid, tf, pivotLow(leftLenL, rightLenL), barmerge.gaps_off, barmerge.lookahead_on)

drawLabel(_offset, _pivot, _style, _color) =>
    if not na(_pivot)
        label.new(bar_index[_offset], _pivot, str.tostring(_pivot, format.mintick), style=_style, color=_color, textcolor=#131722)

//-----------------------------------------------------------------------------------------------------------------------//

VWAP = ta.vwap(ohlc4)

longcondition = ta.crossunder(close,pl) and close > close[150]
exitcondition = close > ph

shortcondition = ta.crossover(close,ph) and close < close[150]
covercondition = close < pl

strategy.entry("long", strategy.long, when = longcondition)
strategy.close("long", when = exitcondition)

strategy.entry("Short", strategy.short, when = shortcondition)
strategy.close("Short", when = covercondition)

Lebih lanjut