Strategi Pengesanan Trend Sinyal Berganda

Penulis:ChaoZhang, Tarikh: 2023-11-02 17:02:06
Tag:

img

Ringkasan

Strategi ini menggabungkan dua indikator EMA dan Awesome Oscillator untuk mengenal pasti dan mengesan trend. EMA dengan cepat menilai arah trend jangka pendek manakala Awesome Oscillator menapis pecah palsu dan menyediakan masa kemasukan.

Logika Strategi

Strategi ini terutamanya menggunakan dua penunjuk teknikal, EMA berganda dan Awesome Oscillator untuk menapis isyarat dengan logik berikut:

  1. Hitung EMA 2 tempoh dan 20 tempoh. Apabila EMA 2 tempoh memecahkan EMA 20 tempoh ke atas, ia menandakan aliran naik. Apabila EMA 2 tempoh memecahkan EMA 20 tempoh ke bawah, ia menandakan aliran turun.

  2. Hitung Awesome Oscillator, yang merupakan histogram MACD yang diluruskan oleh EMA pantas dikurangkan EMA perlahan. Apabila histogram AO berubah dari merah ke biru, ia adalah isyarat beli. Apabila ia berubah dari biru ke merah, ia adalah isyarat jual.

  3. Hanya apabila EMA menunjukkan trend menaik dan AO menunjukkan isyarat beli pada masa yang sama, isyarat beli akhir dihasilkan. Hanya apabila EMA menunjukkan isyarat penurunan dan AO menunjukkan isyarat jual, isyarat jual akhir dihasilkan.

  4. Melalui mekanisme penapisan isyarat berganda ini, pecah palsu dapat dikurangkan dan trend jangka menengah dapat dikesan.

Analisis Kelebihan

Kelebihan strategi ini ialah:

  1. Penapisan garis berganda mengurangkan perdagangan bising yang disebabkan oleh kesilapan. EMA menilai trend keseluruhan manakala AO menapis masa kemasukan. Menggabungkan kedua-duanya meningkatkan kebolehpercayaan isyarat.

  2. Sensitiviti tindak balas yang sangat cepat dengan cepat menangkap pembalikan jangka pendek. EMA 2 tempoh sangat sensitif terhadap pecah dan dapat dengan cepat menentukan sama ada trend baru-baru ini telah berubah.

  3. Awesome Oscillator lebih lanjut menapis MACD untuk mengenal pasti penembusan palsu dalam trend dan mengelakkan perdagangan terbalik yang tidak perlu.

  4. Strategi ini mempunyai arah yang jelas untuk mengesan trend jangka menengah. EMA menentukan trend asas manakala AO menapis isyarat untuk memastikan perdagangan mengikut trend keseluruhan.

  5. Pilihan parameter yang munasabah. EMA 2 tempoh dan 20 tempoh menangkap perubahan harga dalam jangka masa yang berbeza. Parameter AO 5 dan 34 dioptimumkan untuk mengenal pasti corak jangka pendek.

Analisis Risiko

Terdapat juga beberapa risiko:

  1. Dalam pasaran yang berbeza, EMA dan AO boleh menghasilkan lebih banyak isyarat palsu, menyebabkan perdagangan pendek yang tidak perlu.

  2. AO kadang-kadang boleh ketinggalan EMA, menyebabkan kelewatan masa isyarat. Parameter AO boleh dioptimumkan untuk tindak balas yang lebih cepat.

  3. EMA dan AO menyemak ciri jangka pendek dan sederhana memerlukan data berkualiti dan kuasa pengkomputeran.

  4. Perdagangan yang kerap membawa kepada komisen yang lebih tinggi dan kos slippage.

  5. Strategi ini tidak mengambil kira trend jangka panjang dan tahap sokongan / rintangan utama. Lebih banyak faktor perlu digabungkan untuk memastikan arah perdagangan yang betul.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan melalui beberapa aspek:

  1. Memperkenalkan penunjuk trend seperti pita purata bergerak dan ATR untuk membantu EMA dalam menentukan trend keseluruhan.

  2. Tambah pengesanan sokongan / rintangan utama seperti retracement Fibonacci, menghasilkan isyarat hanya di sekitar tahap utama untuk mengelakkan kedudukan kemasukan yang buruk.

  3. Mengoptimumkan kombinasi parameter EMA dan AO untuk meningkatkan kesan gabungan. Sebagai contoh, gunakan algoritma genetik untuk mencari pasangan parameter yang optimum.

  4. Tambah keluar stop loss. Keluar apabila harga memecahkan Swing High / Low baru-baru ini untuk mengawal kerugian perdagangan tunggal.

  5. Uji balik pada data sejarah untuk menilai prestasi strategi, periksa sama ada keuntungan yang stabil memenuhi jangkaan.

  6. Perdagangan kertas untuk menyesuaikan parameter secara beransur-ansur dan meningkatkan prestasi langsung.

Kesimpulan

Idea strategi keseluruhan adalah jelas, menggabungkan EMA untuk trend keseluruhan dan AO untuk penapisan isyarat. Ia dapat mengenal pasti dan mengesan trend dengan berkesan tetapi juga mempunyai beberapa risiko dan batasan untuk pengoptimuman dan ujian lanjut untuk meningkatkan kestabilan. Kuncinya adalah memilih produk dan parameter yang sesuai digabungkan dengan prinsip dan gaya perdagangan yang betul. Secara keseluruhan strategi ini mempunyai logika yang baik dan nilai praktikal.


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

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 27/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
//    This indicator plots the oscillator as a histogram where blue denotes 
//    periods suited for buying and red . for selling. If the current value 
//    of AO (Awesome Oscillator) is above previous, the period is considered 
//    suited for buying and the period is marked blue. If the AO value is not 
//    above previous, the period is considered suited for selling and the 
//    indicator marks it as red.
//
// 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


AC(nLengthSlow,nLengthFast,nLengthMA,nLengthEMA,nLengthWMA,bShowWMA,bShowMA,bShowEMA) =>
    pos = 0.0
    xSMA1_hl2 = ta.sma(hl2, nLengthFast)
    xSMA2_hl2 = ta.sma(hl2, nLengthSlow)
    xSMA1_SMA2 = xSMA1_hl2 - xSMA2_hl2
    xSMA_hl2 = ta.sma(xSMA1_SMA2, nLengthFast)
    nRes =  xSMA1_SMA2 - xSMA_hl2
    xResWMA = ta.wma(nRes, nLengthWMA)
    xResMA = ta.sma(nRes, nLengthMA)
    xResEMA = ta.ema(nRes, nLengthEMA)
    xSignalSeries = bShowWMA ? xResWMA :
                     bShowMA ? xResMA : 
                      bShowEMA ? xResEMA : na
    pos :=  xSignalSeries[2] < 0 and xSignalSeries[1] > 0? 1:
    	     xSignalSeries[2] > 0 and xSignalSeries[1] < 0 ? -1 : nz(pos[1], 0)
    pos

strategy(title='Combo 2/20 EMA & Bill  Awesome Oscillator (AC)', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════  Awesome Oscillator (AC) ═════●'
nLengthSlow = input.int(34, minval=1, title="Length Slow", group=I2)
nLengthFast = input.int(5, minval=1, title="Length Fast", group=I2)
nLengthMA = input.int(15, minval=1, title="MA", group=I2)
nLengthEMA = input.int(15, minval=1, title="EMA", group=I2)
nLengthWMA = input.int(15, minval=1, title="WMA", group=I2)
bShowWMA = input.bool( defval=true, title="trading WMA", group=I2)
bShowMA = input.bool( defval=false, title="trading MA", group=I2)
bShowEMA = input.bool( defval=false, title="trading EMA", 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)
prePosAC = AC(nLengthSlow,nLengthFast,nLengthMA,nLengthEMA,nLengthWMA,bShowWMA,bShowMA,bShowEMA)
iff_1 = posEMA20 == -1 and prePosAC == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosAC == 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