Strategi perdagangan kuantitatif berdasarkan EMA ganda dan indikator volatilitas harga


Tanggal Pembuatan: 2023-12-18 11:26:49 Akhirnya memodifikasi: 2023-12-18 11:26:49
menyalin: 0 Jumlah klik: 649
1
fokus pada
1621
Pengikut

Strategi perdagangan kuantitatif berdasarkan EMA ganda dan indikator volatilitas harga

Ringkasan

Strategi ini disebut strategi kombinasi indikator garis rata-rata dan volatilitas harga. Ini menggabungkan rata-rata bergerak dua indeks (Double Exponential Moving Average, DEMA) dan indikator volatilitas harga untuk menghasilkan sinyal perdagangan komposit.

Prinsip Strategi

Strategi ini terdiri dari dua bagian:

  1. Indikator DEMA. Indikator ini menghitung rata-rata pergerakan indeks pada hari ke-20 dan ke-2 dan menghasilkan sinyal perdagangan ketika harga menembus garis 2 hari dari arah atas atau garis 20 hari dari arah bawah.

  2. (Highest Price - Lowest Price) / Closing Price Volatility Indicator. Indikator ini mencerminkan volatilitas harga dalam satu siklus. Di sini kita menghitung 16 hari Simple Moving Average dari indikator volatilitas dari 20 K-Line terakhir, yang menghasilkan sinyal perdagangan ketika volatilitas K-Line saat ini lebih tinggi atau lebih rendah dari rata-rata tersebut.

Menggabungkan dua set sinyal, jika DEMA dan indikator fluktuasi sinyal pada saat yang sama, menghasilkan akhir multihead atau blank head perdagangan perintah.

Analisis Keunggulan

Strategi ini memiliki keuntungan sebagai berikut:

  1. Kombinasi beberapa indikator dapat mengurangi sinyal palsu dan meningkatkan keandalan sinyal.

  2. Garis 20 dapat secara efektif mengidentifikasi tren jangka panjang dan menengah, dan garis 2 dapat menangkap fluktuasi jangka pendek. Penggunaan kombinasi dapat menanggapi kondisi pasar yang berbeda.

  3. Indikator volatilitas dapat secara efektif mencerminkan volatilitas pasar dan peluang perdagangan.

  4. Dengan menyesuaikan parameter, dapat disesuaikan dengan varietas dan siklus pasar yang berbeda.

Analisis risiko

Strategi ini juga memiliki beberapa risiko:

  1. Dalam pasar tren dengan volatilitas rendah, indikator volatilitas dapat menghasilkan sinyal yang salah. Filter dapat dikombinasikan dengan indikator likuiditas lainnya.

  2. Dalam situasi unilateral yang cepat, double EMA dapat menimbulkan lag. Parameter dapat disingkat sesuai, atau dikombinasikan dengan indikator lain.

  3. Kombinasi multi-indikator meningkatkan kompleksitas strategi dan meningkatkan risiko over-optimalisasi. Perlu dilakukan pengujian ulang secara menyeluruh dan pengujian stabilitas parameter.

Arah optimasi

Strategi ini juga dapat dioptimalkan dengan:

  1. Menambahkan mekanisme penghentian kerugian, yang dapat secara efektif mengendalikan setiap kerugian.

  2. Optimalkan parameter berdasarkan varietas dan siklus yang berbeda, sehingga parameter lebih adaptif.

  3. Meningkatkan mobilitas dan volatilitas indikator dalam kombinasi, meningkatkan kualitas sinyal.

  4. Menambahkan algoritma pembelajaran mesin, parameter dinamis dan penyesuaian berat.

Meringkaskan

Strategi ini menggabungkan dua EMA dan indikator volatilitas, yang dapat memberikan kinerja perdagangan yang baik di pasar yang sedang tren dan bergolak. Namun, ada juga risiko tertentu yang memerlukan pengoptimalan dan perbaikan lebih lanjut. Namun, secara keseluruhan, strategi ini memiliki ide yang jelas dan memiliki nilai operasional yang nyata.

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