Strategi Perdagangan Filter Getaran Gelombang Ganda


Tanggal Pembuatan: 2023-11-13 10:38:20 Akhirnya memodifikasi: 2023-11-13 10:38:20
menyalin: 1 Jumlah klik: 2569
1
fokus pada
1617
Pengikut

Strategi Perdagangan Filter Getaran Gelombang Ganda

Ringkasan

Strategi penyaringan getaran gelombang ganda adalah strategi perdagangan yang didasarkan pada volatilitas harga. Strategi ini menggunakan indikator rentang rata-rata fluktuasi dari dua pengaturan parameter yang berbeda, menggabungkan hubungan antara harga dan rentang fluktuasi, untuk menghasilkan sinyal perdagangan. Strategi ini berlaku untuk aset digital yang sangat fluktuatif seperti bitcoin.

Prinsip Strategi

Strategi ini menggunakan dua indikator rentang fluktuasi rata dengan panjang siklus yang berbeda: indikator rentang fluktuasi cepat (default cycle 27) dan indikator rentang fluktuasi lambat (default cycle 55). Rumus indikator rentang fluktuasi adalah: Rata-rata pergerakan indeks dari amplitudo fluktuasi harga periode saat ini dikalikan dengan satu kali lipat (seperti 1.6).

Strategi penyaringan getaran gelombang ganda adalah membandingkan hubungan antara harga dan dua indikator rentang getaran untuk menentukan apakah saat ini berada di dalam zona getaran dengan amplitudo tertentu. Ketika harga menembus zona getaran, sinyal perdagangan dihasilkan.

Secara khusus, strategi ini menggunakan garis tengah sebagai basis, dan garis tengah adalah rata-rata dari dua indikator rentang fluktuasi. Sebuah sinyal plus dihasilkan ketika harga di atas garis tengah melampaui rentang fluktuasi cepat; Sebuah sinyal minus dihasilkan ketika harga di bawah garis tengah melampaui rentang fluktuasi cepat.

Untuk menyaring misinformasi, strategi ini juga menambahkan sebuah kondisi: sinyal hanya akan dihasilkan jika harga berlawanan dengan harga pada satu siklus sebelumnya. Misalnya, sinyal multi-multi hanya akan dihasilkan jika harga naik dan melampaui satu kisaran fluktuasi garis tengah.

Secara keseluruhan, strategi ini menggunakan indikator rentang gelombang ganda untuk mengidentifikasi zona getaran, menghasilkan instruksi perdagangan dengan sinyal harga untuk menembus zona getaran. Selain itu, penyaringan arah harga ditambahkan untuk mengurangi sinyal yang salah.

Keunggulan Strategis

Keuntungan dari strategi penyaringan getaran gelombang ganda adalah:

  1. Menggunakan karakteristik volatilitas harga, dapat beradaptasi dengan aset dengan tingkat fluktuasi tinggi seperti bitcoin. Indikator rentang fluktuasi ganda dapat lebih akurat menentukan area fluktuasi harga.

  2. Indikator dual-bandwidth mencakup panjang waktu yang berbeda. Indikator cepat menangkap peluang terobosan jangka pendek, dan indikator lambat mempertimbangkan tren jangka panjang.

  3. Menambahkan kondisi penyaringan arah harga dapat mengurangi kesalahan sinyal yang disebabkan oleh volatilitas jangka pendek.

  4. Logika transaksi sederhana dan jelas, mudah dipahami, dan cocok untuk transaksi kuantitatif.

Risiko Strategis

Strategi penyaringan getaran gelombang ganda juga memiliki beberapa risiko yang perlu diperhatikan:

  1. Bergantung pada indikator volatilitas, ini mungkin tidak bekerja dengan baik di pasar yang rendah fluktuasi.

  2. Parameter range of fluctuation perlu disesuaikan dan dioptimalkan untuk varietas yang berbeda, jika tidak, peluang perdagangan yang terlewatkan atau sinyal yang salah akan dihasilkan.

  3. Tidak mempertimbangkan harga yang menyimpang dari volatilitas. Ketika volatilitas meningkat dan harga tidak meningkat, sinyal yang salah dapat dikirim.

  4. Dalam lingkungan yang berfluktuasi tinggi, pengaturan stop loss mungkin perlu disesuaikan. Stop loss yang terlalu radikal akan sering terjadi.

Optimasi Strategi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Untuk menguji dan mengoptimalkan parameter kisaran fluktuasi, menemukan kombinasi optimal dari berbagai jenis parameter untuk berbagai siklus.

  2. Menambahkan mekanisme penyesuaian posisi stop loss berdasarkan dinamika volatilitas terbaru, untuk mengoptimalkan strategi stop loss.

  3. Menambahkan kondisi penyaringan berdasarkan deviasi harga dan fluktuasi untuk menghindari sinyal yang salah.

  4. Ini dikombinasikan dengan indikator lain, seperti perubahan volume transaksi, untuk meningkatkan kepastian masuk.

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

Meringkaskan

Strategi penyaringan getaran gelombang ganda secara keseluruhan adalah strategi perdagangan yang efektif untuk aset yang sangat berfluktuasi. Ini memanfaatkan karakteristik fluktuasi harga dengan benar, menghasilkan logika perdagangan yang sederhana dan jelas. Dengan pengoptimalan parameter, manajemen risiko, dan lain-lain, strategi ini dapat menjadi komponen yang berharga dalam sistem perdagangan kuantitatif.

Kode 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")