Perdagangan kuantitatif berdasarkan amplop rata-rata bergerak dan ATR Trailing Stop

Penulis:ChaoZhang, Tanggal: 2023-12-08 15:53:22
Tag:

img

Gambaran umum

Strategi ini disebut MADEFlex, yang merupakan singkatan dari Flexible Quantitative Trading Strategy Based on Moving Average Envelope and ATR Trailing Stop. Strategi ini menggabungkan indikator Moving Average Envelope dan mekanisme trailing stop ATR untuk menerapkan solusi perdagangan kuantitatif yang fleksibel dan dapat dikontrol.

Prinsip-prinsip

Inti dari strategi ini adalah indikator Moving Average Displaced Envelope (MADE). MADE membentuk band atas dan bawah dengan mengalikan faktor persentase dengan displaced exponential moving average (EMA). Sinyal jual dihasilkan ketika harga menembus band atas, dan sinyal beli dihasilkan ketika harga menembus band bawah. Strategi ini menggabungkan indikator MADE dengan mekanisme stop trailing Average True Range (ATR).

Secara khusus, indikator MADE berisi 3 parameter: Periode, persentase di atas perAb, dan persentase di bawah perBl. Parameter Periode menentukan periode EMA. Jarak band atas dan bawah dari EMA dikendalikan oleh faktor persentase. Bagian stop trailing ATR terutama ditetapkan oleh periode ATR nATRPeriod dan kelipatan ATR nATRMultip. Ketika harga melebihi garis stop loss dari bar sebelumnya, garis stop loss disesuaikan dengan harga dikurangi kerugian ATR tetap. Ketika harga jatuh di bawah garis stop loss bar sebelumnya, garis stop loss disesuaikan dengan harga ditambah kerugian ATR tetap.

Akhirnya, sinyal beli dan jual dihasilkan dengan menggabungkan sinyal indikator MADE dan kondisi trailing stop ATR. Perdagangan terbalik dapat dicapai melalui switch input terbalik.

Analisis Keuntungan

Strategi MADEFlex memiliki keuntungan berikut:

  1. MADE sendiri cenderung menghasilkan sinyal palsu. Menggabungkan ATR trailing stop dapat secara efektif menyaring beberapa kebisingan.

  2. Parameter MADE dan parameter ATR dapat disesuaikan untuk mengontrol kuantitas dan kualitas sinyal.

  3. Dukungan untuk perdagangan terbalik.

  4. Stopper yang tervisualisasikan secara intuitif.

Analisis Risiko

Strategi MADEFlex juga memiliki risiko berikut:

  1. Parameter MADE yang tidak benar dapat menghasilkan sinyal palsu yang berlebihan. Parameter yang tepat perlu diuji dengan hati-hati.

  2. Stop ATR yang terlalu longgar dapat kehilangan kesempatan untuk berhenti.

  3. Risiko yang lebih tinggi dengan reverse trading. Terutama dalam situasi volatilitas tinggi, reverse trading dapat meningkatkan risiko kerugian.

  4. Dalam kondisi pasar yang ekstrem, kurangnya perlindungan stop loss dapat menyebabkan kerugian yang lebih tinggi.

Arahan Optimasi

Strategi MADEFlex dapat dioptimalkan ke arah berikut:

  1. Mengoptimalkan parameter MADE untuk meningkatkan kualitas sinyal. Kombinasi periode dan persentase yang berbeda dapat diuji untuk menemukan set parameter yang lebih andal.

  2. Mengoptimalkan parameter berhenti ATR untuk efek berhenti yang lebih baik. Periode dan kelipatan ATR dapat diuji untuk menentukan kombinasi yang lebih tepat.

  3. Tambahkan filter lain untuk mengurangi sinyal palsu lebih lanjut, misalnya menggabungkan indikator volatilitas untuk penyaringan.

  4. Tambahkan mekanisme mengambil keuntungan untuk keluar pada tingkat keuntungan tertentu. Ini mengunci keuntungan dan mengendalikan risiko.

  5. Menggunakan metode pembelajaran mesin untuk mengoptimalkan parameter secara dinamis, misalnya pembelajaran penguatan.

Kesimpulan

Strategi MADEFlex berhasil menggabungkan sinyal perdagangan dari indikator Moving Average Envelope dan metodologi trailing stop ATR. Melalui parameter yang dapat disesuaikan, ia menerapkan solusi perdagangan kuantitatif yang fleksibel dan dapat dikontrol. Strategi ini memiliki keandalan yang relatif tinggi dan kemampuan kontrol yang kuat. Ini cocok untuk pengguna dengan beberapa dasar kuantitatif untuk digunakan dan dioptimalkan. Dengan optimasi lebih lanjut, kinerja strategi yang lebih signifikan dapat diharapkan.


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

//@version=5
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 27/09/2022
// Moving Average Displaced Envelope. These envelopes are calculated 
// by multiplying percentage factors with their displaced expotential 
// moving average (EMA) core.
// How To Trade Using:
// Adjust the envelopes percentage factors to control the quantity and 
// quality of the signals. If a previous high goes above the envelope 
// a sell signal is generated. Conversely, if the previous low goes below 
// the envelope a buy signal is given.
//
// Average True Range Trailing Stops Strategy, by Sylvain Vervoort 
// The related article is copyrighted material from Stocks & Commodities Jun 2009 
//
// ATR TS used by filter for MADE signals.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title='Moving Average Displaced Envelope & ATRTS', shorttitle='MADE+ATR', overlay=true)
tradeDirection = input.string('Both', title='Trade Direction', options=['Both', 'Long', 'Short'])
Price = input(title='Source', defval=close)
Period = input.int(defval=9, minval=1)
perAb = input.float(title='Percent above', defval=.5, minval=0.01, step=0.1)
perBl = input.float(title='Percent below', defval=.5, minval=0.01, step=0.1)
disp = input.int(title='Displacement', defval=13, minval=1)

nATRPeriod = input(15)
nATRMultip = input(2)
useATR = input(false, title='ATR Filter')
reverse = input(false, title='Trade reverse')

longAllowed = tradeDirection == 'Long' or tradeDirection == 'Both'
shortAllowed = tradeDirection == 'Short' or tradeDirection == 'Both'
pos = 0
sEMA = ta.ema(Price, Period)
top = sEMA[disp] * ((100 + perAb) / 100)
bott = sEMA[disp] * ((100 - perBl) / 100)

xATR = ta.atr(nATRPeriod)
xHHs =ta.sma(ta.highest(nATRPeriod), nATRPeriod)
xLLs =ta.sma(ta.lowest(nATRPeriod),nATRPeriod)
nSpread = (xHHs - xLLs) / 2
nLoss = nATRMultip * xATR
var xATRTrailingStop = 0.0
xATRTrailingStop := close > nz(xATRTrailingStop[1], 0) and close[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), close - nLoss) :
     close < nz(xATRTrailingStop[1], 0) and close[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), close + nLoss) : 
     close > nz(xATRTrailingStop[1], 0) ? close - nLoss : close + nLoss

ATRLong = close > xATRTrailingStop ? true : false
ATRShort = close < xATRTrailingStop ? true : false

iff_1 = close > top ? 1 : pos[1]
pos := close < bott ? -1 : iff_1
iff_2 = reverse and pos == -1 ? 1 : pos
possig = reverse and pos == 1 ? -1 : iff_2
clr = strategy.position_size
if possig == 1 
    if longAllowed and ATRLong
        strategy.entry('Long', strategy.long)
    else
        if ATRLong or strategy.position_size > 0
            strategy.close_all()
if possig == -1 
    if shortAllowed and ATRShort
        strategy.entry('Short', strategy.short)
    else    
        if ATRShort or strategy.position_size < 0
            strategy.close_all()
if possig == 0
    strategy.close_all()
    
plot(xATRTrailingStop[1], color=color.blue, title='ATR Trailing Stop')
barcolor(clr < 0 ? #b50404 : clr > 0 ? #079605 : #0536b3)



Lebih banyak