Perdagangan kuantitatif berdasarkan sampul purata bergerak dan ATR Trailing Stop

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

img

Ringkasan

Strategi ini dinamakan MADEFlex, yang bermaksud Strategi Dagangan Kuantitatif Fleksibel Berdasarkan Envelope Purata Bergerak dan ATR Trailing Stop. Ia menggabungkan penunjuk Envelope Purata Bergerak dan mekanisme ATR trailing stop untuk melaksanakan penyelesaian perdagangan kuantitatif yang fleksibel dan boleh dikawal.

Prinsip-prinsip

Inti strategi ini adalah penunjuk Envelope Pergerakan Rata-Rata (MADE). MADE membentuk band atas dan bawah dengan mengalikan faktor peratusan dengan purata bergerak eksponensial (EMA). Isyarat jual dihasilkan apabila harga memecahkan di atas band atas, dan isyarat beli dihasilkan apabila harga memecahkan di bawah band bawah. Strategi ini menggabungkan penunjuk MADE dengan mekanisme hentian hentian Julat Benar (ATR). Hentian hentian hentian ATR menetapkan stop loss berdasarkan beberapa kelipatan nilai ATR, yang membolehkan penjejakan garis hentian kehilangan yang fleksibel. Ini mengelakkan kerugian hentian yang tidak perlu sambil juga mengunci keuntungan yang ada.

Secara khusus, penunjuk MADE mengandungi 3 parameter: Tempoh, peratusan di atas perAb, dan peratusan di bawah perBl. Parameter Tempoh menentukan tempoh EMA. Jarak jalur atas dan bawah dari EMA dikawal oleh faktor peratusan. Bahagian berhenti ATR yang tertinggal terutamanya ditetapkan oleh tempoh ATR nATRPeriod dan kelipatan ATR nATRMultip. Apabila harga melebihi garis stop loss bar sebelumnya, garis stop loss disesuaikan dengan harga dikurangkan kerugian ATR tetap. Apabila harga jatuh di bawah garis stop loss bar sebelumnya, garis stop loss disesuaikan dengan harga ditambah kerugian ATR tetap.

Akhirnya, isyarat beli dan jual dihasilkan dengan menggabungkan isyarat penunjuk MADE dan keadaan berhenti trailing ATR. Dagangan terbalik boleh dicapai melalui suis input terbalik.

Analisis Kelebihan

Strategi MADEFlex mempunyai kelebihan berikut:

  1. Lebih dipercayai gabungan isyarat dan stop loss. MADE sendiri cenderung untuk menjana isyarat palsu.

  2. Parameter MADE dan parameter ATR boleh diselaraskan untuk mengawal kuantiti dan kualiti isyarat.

  3. Sokongan untuk perdagangan terbalik. Perdagangan terbalik memperkaya senario aplikasi.

  4. Stopper yang dapat dilihat secara intuitif.

Analisis Risiko

Strategi MADEFlex juga mempunyai risiko berikut:

  1. Parameter MADE yang tidak betul boleh menghasilkan isyarat palsu yang berlebihan. Parameter yang betul perlu diuji dengan teliti.

  2. Hentian ATR yang terlalu longgar boleh kehilangan peluang hentian.

  3. Risiko yang lebih tinggi dengan perdagangan terbalik. Terutamanya dalam situasi turun naik yang tinggi, perdagangan terbalik boleh meningkatkan risiko kerugian. Perlu digunakan dengan berhati-hati.

  4. Kemungkinan kerugian yang lebih tinggi tanpa kehilangan berhenti. Dalam keadaan pasaran yang melampau, kekurangan perlindungan kehilangan berhenti boleh membawa kepada kerugian yang lebih tinggi.

Arahan pengoptimuman

Strategi MADEFlex boleh dioptimumkan ke arah berikut:

  1. Mengoptimumkan parameter MADE untuk meningkatkan kualiti isyarat. Kombinasi tempoh dan peratusan yang berbeza boleh diuji untuk mencari set parameter yang lebih boleh dipercayai.

  2. Mengoptimumkan parameter hentian ATR untuk kesan hentian yang lebih baik. Tempoh dan kelipatan ATR boleh diuji untuk menentukan kombinasi yang lebih sesuai.

  3. Tambah penapis lain untuk mengurangkan lagi isyarat palsu, contohnya menggabungkan penunjuk turun naik untuk penapis.

  4. Tambah mekanisme mengambil keuntungan untuk keluar pada tahap keuntungan tertentu. Ini mengunci keuntungan dan mengawal risiko.

  5. Menggunakan kaedah pembelajaran mesin untuk mengoptimumkan parameter secara dinamik, contohnya pembelajaran penguat.

Kesimpulan

Strategi MADEFlex berjaya menggabungkan isyarat perdagangan dari penunjuk Envelope Purata Bergerak dan metodologi hentian ATR. Melalui parameter yang boleh disesuaikan, ia melaksanakan penyelesaian perdagangan kuantitatif yang fleksibel dan boleh dikawal. Strategi ini mempunyai kebolehpercayaan yang agak tinggi dan keupayaan kawalan yang kuat. Ia sesuai untuk pengguna dengan beberapa asas kuantitatif untuk digunakan dan dioptimumkan. Dengan pengoptimuman lanjut, prestasi strategi yang lebih ketara 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 lanjut