Strategi Dagangan Gabungan Berdasarkan EMA Berganda dan Penapis Bandpass

Penulis:ChaoZhang, Tarikh: 2024-01-17 11:22:30
Tag:

img

Ringkasan

Strategi ini menggabungkan penunjuk DEMA (Dual Exponential Moving Average) dan BPF (Bandpass Filter) untuk melaksanakan pemindaian dua pembelian pecah dan overbought-oversold, membentuk isyarat perdagangan yang stabil dan mengejar keuntungan maksimum.

Prinsip Strategi

Strategi ini terdiri daripada dua sub-strategi:

  1. Strategi DEMA

    Ia menggunakan purata bergerak eksponen dua hari dan 20 hari untuk menjana isyarat pembelian silang emas dan penjualan silang mati.

  2. Strategi BPF

    Penunjuk BPF menggabungkan transformasi matematik untuk mengesan komponen kitaran dalam harga dan membentuk zon overbought-oversold dalam tempoh tertentu untuk menjana isyarat perdagangan.

Menggabungkan kedua-duanya memberikan pengesahan yang lebih kuat terhadap trend dan faktor kitaran apabila isyarat beli / jual serentak muncul. Oleh itu kebolehpercayaan lebih tinggi, menghasilkan titik masuk dan keluar yang lebih stabil.

Analisis Kelebihan

Kelebihan terbesar strategi ini adalah penapisan penunjuk berganda yang menjadikan isyarat lebih stabil dan boleh dipercayai. DEMA menyelaraskan harga dan mengenal pasti arah trend; BPF mengenali ciri-ciri kitaran dan menentukan zon overbought-oversold. Validasi silang antara kedua-duanya dapat mengurangkan isyarat palsu yang disebabkan oleh bunyi harga dan penyesuaian kitaran.

Di samping itu, strategi itu sendiri mempunyai kekerapan dagangan yang jarang berlaku, mengelakkan kos modal dan komisen yang berlebihan dari overtrading.

Analisis Risiko

Risiko terbesar strategi ini adalah salah menilai keadaan pasaran. Ia terdedah kepada isyarat yang salah dalam pasaran yang berbeza dan boleh mengalami kerugian berhenti yang besar apabila trend berbalik. Selain itu, tetapan parameter juga boleh memberi kesan yang besar kepada prestasi strategi.

Untuk menangani risiko ini, kaedah seperti mengoptimumkan parameter penunjuk, menetapkan stop loss / mengambil keuntungan, menggabungkan penunjuk lain dan sebagainya boleh digunakan untuk kawalan dan penambahbaikan.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Mengoptimumkan kitaran masa. Uji tetapan parameter DEMA dan BPF yang berbeza untuk menentukan kombinasi tempoh yang optimum.

  2. Tambah tetapan stop loss/take profit. Tetapkan amplitudo stop loss dengan munasabah untuk mengelakkan pembesaran kerugian; ambil keuntungan dengan betul untuk mengunci keuntungan separa.

  3. Tambah penapis penunjuk lain. seperti Volume, MACD dan lain-lain untuk mengelakkan isyarat yang mengelirukan dari pembukaan jumlah yang tinggi dan membalikkan kedudukan.

  4. Optimumkan parameter adaptif. Jadikan parameter DEMA dan BPF disesuaikan berdasarkan keadaan pasaran terkini untuk mengekalkan ketepatan masa penunjuk.

Kesimpulan

Strategi ini mengintegrasikan kekuatan penunjuk EMA dan BPF berganda dengan penapisan berganda untuk meningkatkan kualiti isyarat dan mengejar keuntungan jangka menengah hingga panjang yang stabil. Risiko terutamanya berasal dari penilaian yang salah mengenai keadaan pasaran dan penyesuaian parameter yang tidak mencukupi. Kaedah seperti pengesahan pelbagai penunjuk dan pengoptimuman parameter dinamik dapat menjadikan strategi lebih elastik dan beradaptasi untuk keberkesanan kos yang lebih tinggi.


/*backtest
start: 2023-01-10 00:00:00
end: 2024-01-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 05/04/2022
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This indicator plots 2/20 exponential moving average. For the Mov 
// Avg X 2/20 Indicator, the EMA bar will be painted when the Alert criteria is met.
//
// Second strategy
// The related article is copyrighted material from
// Stocks & Commodities Mar 2010
//
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
EMA20(Length) =>
    pos = 0.0
    xPrice = close
    xXA = ta.ema(xPrice, Length)
    nHH = math.max(high, high[1])
    nLL = math.min(low, low[1])
    nXS = nLL > xXA or nHH < xXA ? nLL : nHH
    iff_1 = nXS < close[1] ? 1 : nz(pos[1], 0)
    pos := nXS > close[1] ? -1 : iff_1
    pos


BPF(Length,Delta,SellZone,BuyZone) =>
    pos = 0.0
    xPrice = hl2
    beta = math.cos(3.14 * (360 / Length) / 180)
    gamma = 1 / math.cos(3.14 * (720 * Delta / Length) / 180)
    alpha = gamma - math.sqrt(gamma * gamma - 1)
    BP = 0.0
    BP := 0.5 * (1 - alpha) * (xPrice - xPrice[2]) + beta * (1 + alpha) * nz(BP[1]) - alpha * nz(BP[2])
    pos:= BP > SellZone ? 1 :
    	   BP <= BuyZone? -1 : nz(pos[1], 0) 
    pos

strategy(title='Combo 2/20 EMA & Bandpass Filter', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ Bandpass Filter  ═════●'
LengthBPF = input.int(20, minval=1, group=I2)
Delta = input(0.5, group=I2)
SellZone = input.float(5, step = 0.01, group=I2)
BuyZone = input.float(-5, step = 0.01, group=I2)
var misc = '●═════ MISC ═════●'
reverse = input.bool(false, title='Trade reverse', group=misc)
var timePeriodHeader = '●═════ Time Start ═════●'
d = input.int(1, title='From Day', minval=1, maxval=31, group=timePeriodHeader)
m = input.int(1, title='From Month', minval=1, maxval=12, group=timePeriodHeader)
y = input.int(2005, title='From Year', minval=0, group=timePeriodHeader)
StartTrade = time > timestamp(y, m, d, 00, 00) ? true : false
posEMA20 = EMA20(Length)
prePosBPF = BPF(LengthBPF,Delta,SellZone,BuyZone)
iff_1 = posEMA20 == -1 and prePosBPF == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosBPF == 1 and StartTrade ? 1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
if possig == 1
    strategy.entry('Long', strategy.long)
if possig == -1
    strategy.entry('Short', strategy.short)
if possig == 0
    strategy.close_all()
barcolor(possig == -1 ? #b50404 : possig == 1 ? #079605 : #0536b3)

Lebih lanjut