Strategi perdagangan kuantitatif berdasarkan EMA berganda dan petunjuk turun naik harga


Tarikh penciptaan: 2023-12-18 11:26:49 Akhirnya diubah suai: 2023-12-18 11:26:49
Salin: 0 Bilangan klik: 649
1
fokus pada
1621
Pengikut

Strategi perdagangan kuantitatif berdasarkan EMA berganda dan petunjuk turun naik harga

Gambaran keseluruhan

Strategi ini dinamakan sebagai strategi gabungan indikator garis rata-rata dan kadar turun naik harga. Ia menggabungkan purata bergerak dua indeks (Double Exponential Moving Average, DEMA) dan indikator kadar turun naik harga untuk menghasilkan isyarat perdagangan komprehensif.

Prinsip Strategi

Strategi ini terdiri daripada dua bahagian:

  1. Indeks DEMA. Indeks ini mengira purata bergerak indeks pada hari ke-20 dan ke-2 dan menghasilkan isyarat perdagangan apabila harga menembusi garis 2 hari dari arah atas ke bawah atau garis 20 hari dari arah bawah.

  2. (Highest Price - Lowest Price) / Closing Price Volatility Indicator. Indikator ini mencerminkan kelajuan turun naik harga dalam satu kitaran. Di sini kita mengira purata bergerak mudah 16 hari untuk indikator turun naik K-Line 20 yang lalu, menghasilkan isyarat perdagangan apabila turun naik K-Line semasa lebih tinggi atau lebih rendah daripada nilai purata tersebut.

Menggabungkan dua set isyarat, jika DEMA dan indikator kadar turun naik memberi isyarat pada masa yang sama, menghasilkan arahan perdagangan multihead atau kosong akhir.

Analisis kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggabungkan beberapa petunjuk, anda boleh mengurangkan isyarat palsu dan meningkatkan kebolehpercayaan isyarat.

  2. Garis 20 boleh mengenal pasti trend jangka panjang dan menengah, dan garis 2 boleh menangkap turun naik jangka pendek, dan penggunaan gabungan dapat menangani keadaan pasaran yang berbeza.

  3. Penunjuk kadar turun naik dapat mencerminkan turun naik pasaran dan peluang perdagangan dengan berkesan.

  4. Dengan menyesuaikan parameter, ia dapat disesuaikan dengan pasaran yang berbeza dan kitaran.

Analisis risiko

Strategi ini mempunyai beberapa risiko:

  1. Dalam pasaran trend yang mempunyai kadar turun naik yang rendah, penunjuk kadar turun naik mungkin menghasilkan isyarat yang salah. Penapisan boleh dilakukan dengan penunjuk kecairan lain.

  2. Dalam kes-kes unilateral yang cepat, double EMA mungkin menyebabkan kemunduran. Parameter boleh disingkat dengan sewajarnya, atau digabungkan dengan penunjuk lain.

  3. Kombinasi pelbagai indikator meningkatkan kerumitan strategi dan meningkatkan risiko terlalu optimum. Perlu dilakukan pemeriksaan ulang dan parameter kestabilan secara menyeluruh.

Arah pengoptimuman

Strategi ini juga boleh dioptimumkan dengan:

  1. Menambah mekanisme penangguhan kerugian yang dapat mengawal setiap kerugian secara berkesan.

  2. Optimumkan parameter mengikut varieti dan kitaran yang berbeza, untuk menjadikan parameter lebih bersesuaian.

  3. Meningkatkan ketidakseimbangan antara penunjuk kelembapan dan ketidakseimbangan untuk meningkatkan kualiti isyarat.

  4. Menambah algoritma pembelajaran mesin, parameter dinamik dan penyesuaian berat

ringkaskan

Strategi ini menggabungkan kedua-dua EMA dan indikator turun naik, yang dapat memperoleh prestasi perdagangan yang baik di pasaran yang sedang berkembang dan bergolak. Di samping itu, terdapat risiko tertentu yang memerlukan pengoptimuman dan penambahbaikan lebih lanjut. Tetapi secara keseluruhan, strategi ini jelas dan mempunyai nilai operasi praktikal.

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

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 12/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 histogram displays (high-low)/close
//  Can be applied to any time frame.
//
//
// 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


HLCH(input_barsback,input_percentorprice,input_smalength) =>
    pos = 0.0
    xPrice = (high-low)/close
    xPriceHL = (high-low)
    xPrice1 = input_percentorprice ? xPrice * 100: xPriceHL
    xPrice1SMA = ta.sma(math.abs(xPrice1), input_smalength)
    pos := xPrice1SMA[input_barsback] > math.abs(xPrice1) ? 1 :
    	     xPrice1SMA[input_barsback] < math.abs(xPrice1) ? -1 : nz(pos[1], 0)
    pos

strategy(title='Combo 2/20 EMA & (H-L)/C Histogram', shorttitle='Combo', overlay=true)
var I1 = '●═════ 2/20 EMA ═════●'
Length = input.int(14, minval=1, group=I1)
var I2 = '●═════ (H-L)/C Histogram  ═════●'
input_barsback = input(20, title="Look Back", group=I2)
input_percentorprice = input(false, title="% change", group=I2)
input_smalength = input(16, title="SMA Length", 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)
prePosHLCH = HLCH(input_barsback,input_percentorprice,input_smalength)
iff_1 = posEMA20 == -1 and prePosHLCH == -1 and StartTrade ? -1 : 0
pos = posEMA20 == 1 and prePosHLCH == 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)