Strategi Perdagangan Penapis Getaran Dwi Gelombang


Tarikh penciptaan: 2023-11-13 10:38:20 Akhirnya diubah suai: 2023-11-13 10:38:20
Salin: 1 Bilangan klik: 2569
1
fokus pada
1617
Pengikut

Strategi Perdagangan Penapis Getaran Dwi Gelombang

Gambaran keseluruhan

Strategi penapisan getaran gelombang ganda adalah strategi perdagangan berdasarkan turun naik harga. Ia menggunakan indikator julat turun naik purata dari dua parameter yang berbeza, menggabungkan hubungan harga dan julat turun naik, menghasilkan isyarat perdagangan.

Prinsip Strategi

Strategi ini menggunakan dua indikator rentang turun naik rata dengan panjang kitaran yang berbeza: indikator rentang turun naik cepat ((kelas 27), dan indikator rentang turun naik perlahan ((kelas 55). Formula pengiraan indikator rentang turun naik adalah: purata pergerakan indeks untuk amplitudo turun naik harga kitaran semasa kalikan dengan kelipatan ((seperti 1.6)).

Strategi penapisan getaran gelombang ganda adalah membandingkan hubungan harga dengan dua penunjuk julat turun naik untuk menentukan sama ada harga kini berada di dalam julat getaran yang berskala tertentu. Apabila harga menembusi julat getaran itu, ia menghasilkan isyarat perdagangan.

Secara khusus, strategi ini menggunakan garis tengah sebagai asas, dan garis tengah adalah purata kedua-dua indikator julat turun naik. Ia menghasilkan isyarat lebih banyak apabila harga melebihi julat turun naik cepat di atas garis tengah; ia menghasilkan isyarat kurang apabila harga berada di bawah julat turun naik cepat di bawah garis tengah.

Untuk menyaring khabar angin palsu, strategi ini juga menambah satu syarat: isyarat hanya dihasilkan apabila harga selaras dengan harga satu kitaran sebelumnya. Sebagai contoh, isyarat ganda hanya dihasilkan apabila harga meningkat dan melebihi satu julat pergerakan garis nilai tengah.

Ringkasnya, strategi ini menggunakan indikator julat gelombang ganda untuk mengenal pasti kawasan gegaran, memberi isyarat kepada harga untuk menembusi kawasan gegaran, dan menghasilkan arahan perdagangan. Pada masa yang sama, penapis arah harga ditambahkan untuk mengurangkan isyarat yang salah.

Kelebihan Strategik

Strategi penapisan getaran gelombang dua mempunyai kelebihan:

  1. Menggunakan ciri-ciri turun naik harga, dapat menyesuaikan diri dengan aset berfluktuasi tinggi seperti bitcoin. Penunjuk Julat Fluktuasi Ganda dapat menentukan kawasan pergerakan harga dengan lebih tepat.

  2. Indeks jangka dua gelombang merangkumi panjang masa yang berbeza. Indeks cepat menangkap peluang penembusan jangka pendek, dan indikator perlahan mempertimbangkan trend jangka panjang.

  3. Penambahan syarat penapisan arah harga dapat mengurangkan isyarat salah yang disebabkan oleh pergolakan jangka pendek.

  4. Logik urus niaga adalah ringkas, mudah difahami, sesuai untuk urus niaga kuantitatif.

Risiko Strategik

Strategi penapisan getaran gelombang dua mempunyai beberapa risiko yang perlu diperhatikan:

  1. Bergantung kepada indikator turun naik, ia mungkin tidak berkesan dalam pasaran yang rendah.

  2. Parameter julat turun naik perlu disesuaikan dan dioptimumkan untuk pelbagai jenis, jika tidak, peluang perdagangan akan hilang atau isyarat salah akan dihasilkan.

  3. Tidak mengambil kira keadaan di mana harga berpatah balik dari kadar turun naik. Apabila kadar turun naik meningkat dan harga tidak meningkat, ia mungkin memberi isyarat yang salah.

  4. Dalam persekitaran yang bergelombang tinggi, penyetempatan titik hentian mungkin perlu disesuaikan. Hentian yang terlalu radikal akan sering berhenti.

Pengoptimuman Strategi

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Untuk menguji dan mengoptimumkan parameter julat turun naik untuk mencari kombinasi parameter yang optimum untuk kitaran yang berbeza untuk pelbagai jenis.

  2. Menambah mekanisme untuk menyesuaikan kedudukan hentian mengikut pergerakan kadar terkini untuk mengoptimumkan strategi hentian.

  3. Menambah syarat penapisan berdasarkan harga yang bercanggah dengan kadar turun naik untuk mengelakkan isyarat yang salah.

  4. Gabungan dengan petunjuk lain, seperti perubahan dalam jumlah transaksi, meningkatkan kepastian masuk.

  5. Menguji dan menyertakan mekanisme penarikan diri yang sesuai dengan strategi.

ringkaskan

Strategi penapisan getaran gelombang ganda secara keseluruhan adalah strategi perdagangan yang berkesan untuk aset yang bergelombang tinggi. Ia menggunakan ciri-ciri turun naik harga dengan betul, menghasilkan logik perdagangan yang mudah dan jelas. Dengan pengoptimuman parameter, pengurusan risiko dan sebagainya, strategi ini dapat menjadi komponen yang berharga dalam sistem perdagangan kuantitatif. Ia juga memberi kita idea untuk berdagang dengan algoritma berdasarkan ciri-ciri turun naik pasaran.

Kod sumber strategi
/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © colinmck, greenmask9

//@version=4

strategy(title="Twin Range Filter Algo", overlay=true)

source = input(defval=close, title="Source")

// Smooth Average Range

per1 = input(defval=27, minval=1, title="Fast period")
mult1 = input(defval=1.6, minval=0.1, title="Fast range")

per2 = input(defval=55, minval=1, title="Slow period")
mult2 = input(defval=2, minval=0.1, title="Slow range")

smoothrng(x, t, m) =>
    wper = t * 2 - 1
    avrng = ema(abs(x - x[1]), t)
    smoothrng = ema(avrng, wper) * m
    smoothrng
smrng1 = smoothrng(source, per1, mult1)
smrng2 = smoothrng(source, per2, mult2)
smrng = (smrng1 + smrng2) / 2

// Range Filter

rngfilt(x, r) =>
    rngfilt = x
    rngfilt := x > nz(rngfilt[1]) ? x - r < nz(rngfilt[1]) ? nz(rngfilt[1]) : x - r : 
       x + r > nz(rngfilt[1]) ? nz(rngfilt[1]) : x + r
    rngfilt
filt = rngfilt(source, smrng)

upward = 0.0
upward := filt > filt[1] ? nz(upward[1]) + 1 : filt < filt[1] ? 0 : nz(upward[1])
downward = 0.0
downward := filt < filt[1] ? nz(downward[1]) + 1 : filt > filt[1] ? 0 : nz(downward[1])

hband = filt + smrng
lband = filt - smrng

longCond = bool(na)
shortCond = bool(na)
longCond := source > filt and source > source[1] and upward > 0 or source > filt and source < source[1] and upward > 0
shortCond := source < filt and source < source[1] and downward > 0 or source < filt and source > source[1] and downward > 0

CondIni = 0
CondIni := longCond ? 1 : shortCond ? -1 : CondIni[1]

long = longCond and CondIni[1] == -1
short = shortCond and CondIni[1] == 1

// Plotting

// Strategy
// From this part on, programmer is greenmaks9
//
Separator = input(title="Following conditions and backtest algorithm are added by @greenmask9 🎯, original script is written by @colinmck 👍. Read both of their's release notes for more info on how this script works.", type=input.bool, defval=false)
disabler = input(title="Disable greenmask9's ATR conditions", type=input.bool, defval=false)

//second
l2 = input(title="ATR1", defval=32, minval=1)
s2 = input(title="Smoothing", defval="SMA", options=["RMA", "SMA", "EMA", "WMA"])
atr2(source, l2) => 
    if s2 == "SMA"
        sma(source, l2)
    else
        if s2 == "RMA"
            rma(source, l2)
        else
            if s2 == "EMA"
                ema(source, l2)
            else
                wma(source, l2)

//third
l3 = input(title="ATR2", defval=64, minval=1)
s3 = input(title="Smoothing", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"])
atr3(source, l3) => 
    if s3 == "RMA"
        rma(source, l3)
    else
        if s3 == "SMA"
            sma(source, l3)
        else
            if s3 == "EMA"
                ema(source, l3)
            else
                wma(source, l3)

atr20=atr2(tr(true), l2)
atr30=atr3(tr(true), l3)
strategy.initial_capital = 50000
ordersize=floor(strategy.initial_capital/close)
profit = input(title="Ticks profit", type=input.integer, defval=900)
stop = input(title="Ticks stoploss", type=input.integer, defval=300)
maxcandles_till_close = input(title="Time stoploss", type=input.integer, defval=17)


bull = long and (atr20<atr30 or disabler)
bear = short and (atr20<atr30 or disabler)

bullclock = barssince(bull)
bearclock = barssince(bear)

if (bull)
    strategy.entry("Twin Long", strategy.long, ordersize)
    strategy.exit("Exit", from_entry =  "Twin Long", profit = profit, loss = stop)

if (bear)
    strategy.entry("Twin Short", strategy.short, ordersize)
    strategy.exit("Exit", from_entry = "Twin Short", profit = profit, loss = stop)

//time stoploss
strategy.close("Twin Long", when = bullclock == maxcandles_till_close, comment = "Timed out")
strategy.close("Twin Short", when = bearclock == maxcandles_till_close, comment = "Timed out")