
Strategi ini menggunakan kombinasi dua indikator EMA dan Awesome Oscillator untuk mengenal pasti dan mengesan trend. Di mana EMA cepat menentukan arah trend baru-baru ini, penyaringan Awesome Oscillator memberikan masa masuk.
Strategi ini terutamanya menggunakan dua indikator teknikal EMA dan Awesome Oscillator untuk penapisan isyarat, logiknya adalah seperti berikut:
Hitung EMA 2 kitaran dan 20 kitaran, apabila EMA 2 kitaran dari bawah ke atas menembusi EMA 20 kitaran, dinilai sebagai tren naik; apabila EMA 2 kitaran dari atas ke bawah menembusi EMA 20 kitaran, dinilai sebagai tren menurun.
Hitung Awesome Oscillator, yang diperoleh dengan pengurangan purata bergerak cepat daripada purata bergerak perlahan, dan kemudian dengan pengurangan purata bergerak cepat daripada carta MACD untuk mendapatkan carta. Apabila carta AO dianggap sebagai tanda beli apabila ia bertukar merah menjadi biru, dan apabila ia bertukar biru menjadi merah, ia dianggap sebagai tanda jual.
Sinyal beli akhir dihasilkan hanya apabila EMA menunjukkan trend naik dan AO pada masa yang sama menunjukkan isyarat beli; isyarat jual akhir dihasilkan hanya apabila EMA menunjukkan trend turun dan AO pada masa yang sama menunjukkan isyarat jual.
Melalui mekanisme penapisan dua isyarat ini, ia dapat mengurangkan operasi penembusan palsu dan mengesan arah pertengahan trend.
Strategi ini mempunyai kelebihan berikut:
Penapisan gabungan dua baris dapat mengurangkan perdagangan yang salah yang disebabkan oleh bunyi. EMA menilai arah trend besar, penapisan AO masuk ke waktu, kedua-duanya dapat meningkatkan kebolehpercayaan isyarat.
Keupayaan untuk bertindak balas Sensitivity Sangat cepat, dapat menangkap perubahan trend dalam jangka masa pendek. 2 EMA kitaran sangat sensitif terhadap penembusan, dapat menilai dengan cepat sama ada trend berubah dalam jangka masa terdekat.
Awesome Oscillator akan menyaring MACD sekali lagi untuk mengenal pasti trend palsu dan mengelakkan operasi terbalik yang tidak perlu.
Arah strategi jelas, untuk menjejaki trend jangka menengah. EMA menentukan arah trend asas, AO menapis lebih lanjut untuk memastikan perdagangan sesuai dengan arah trend besar, untuk terus menangkap trend jangka menengah.
Pilihan parameter strategi adalah munasabah, EMA 2 kitaran dan 20 kitaran menangkap perubahan harga dalam kitaran yang berbeza, parameter AO 5 kitaran dan 34 kitaran dioptimumkan untuk lebih mengenali ciri-ciri bentuk dalam jangka pendek.
Strategi ini mempunyai beberapa risiko:
Dalam keadaan goyah, EMA dan AO mungkin mengeluarkan lebih banyak isyarat yang salah, yang menyebabkan perdagangan kosong yang tidak perlu. Risiko kesalahan penilaian dapat dikurangkan dengan menyesuaikan parameter kitaran EMA.
AO dalam keadaan tertentu mungkin tertinggal EMA, menyebabkan perbezaan masa berlaku isyarat, parameter AO boleh dioptimumkan dengan sewajarnya, supaya ia bertindak balas lebih cepat terhadap penembusan.
Dengan mengambil kira parameter EMA dan AO yang ditetapkan untuk ciri jangka pendek dan sederhana, kualiti data dan kekuatan pengkomputeran yang tinggi diperlukan untuk menyesuaikan diri dengan ciri-ciri pelbagai jenis.
Perdagangan yang lebih kerap akan menghasilkan lebih banyak bayaran dan kos slippage. Ia boleh melambatkan kriteria strategi keluar dengan sewajarnya, memanjangkan tempoh pegangan.
Strategi ini tidak mengambil kira trend kitaran besar dan tahap rintangan sokongan utama, dan perlu menggabungkan lebih banyak faktor untuk memastikan arah perdagangan betul.
Strategi ini boleh dioptimumkan dengan:
Memperkenalkan indikator untuk menilai trend, membantu EMA menentukan arah trend besar, seperti pita purata bergerak yang biasa digunakan, ATR dan lain-lain.
Menambah mekanisme pengenalan titik rintangan sokongan utama, seperti garis penarikan balik Fibonacci, yang memberi isyarat hanya berhampiran titik penting. Mengelakkan kedudukan yang tidak menguntungkan.
Mengoptimumkan kombinasi EMA dan AO untuk meningkatkan keserasian kedua-duanya. Sebagai contoh, cari pasangan parameter terbaik secara automatik menggunakan algoritma genetik kelas.
Menambah mekanisme Exit Stop Loss. Apabila harga menembusi Swing High/Low terkini, hentikan Exit Stop Loss dalam masa yang tepat untuk mengawal kerugian tunggal.
Pengesahan set data awal, menggunakan data sejarah untuk menilai keberkesanan strategi. Periksa sama ada keuntungan dapat stabil dan hasil pengesahan kembali sesuai dengan yang diharapkan.
Parameter simulasi cakera padat, menyesuaikan parameter secara beransur-ansur untuk meningkatkan kesan indikator cakera padat. Memeriksa kekuatan parameter, mendapatkan kombinasi parameter yang lebih stabil.
Strategi ini mempunyai konsep keseluruhan yang jelas untuk menentukan arah trend besar EMA, kombinasi isyarat penapisan AO menggunakan dua indikator untuk double-checking. Ia dapat mengenal pasti trend dengan berkesan dan mengikuti pergerakan jangka menengah. Tetapi terdapat juga risiko dan kekurangan tertentu, perlu terus mengoptimumkan ujian untuk meningkatkan kestabilan.
/*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)