
Strategi ini dinamakan sebagai MADEFlex, strategi perdagangan kuantitatif fleksibel berdasarkan moving average envelope dan average true range trailing stop loss. Strategi ini menggabungkan indikator moving average envelope dan average true range trailing stop loss untuk mewujudkan penyelesaian perdagangan kuantitatif yang fleksibel dan terkawal.
Inti strategi ini adalah penunjuk purata bergerak (MADE). Indikator MADE dibentuk dengan naik dan turun melalui penunjuk purata bergerak (EMA) yang dilaksanakan dengan peratusan faktor peratusan. Apabila harga menembusi trek, ia menghasilkan isyarat jual; apabila harga jatuh dari trek, ia menghasilkan isyarat beli.
Khususnya, indikator MADE mengandungi 3 parameter: Period kitaran, peratus naik perAb dan peratus turun perBl. Period kitaran menentukan panjang kitaran EMA. Jarak naik dan turun dari EMA dikawal oleh faktor peratusan.
Akhirnya dengan menggabungkan isyarat penunjuk MADE dan penapis keadaan stop loss ATR, menghasilkan isyarat beli dan jual. Operasi terbalik boleh dicapai dengan menukar suis input reverse.
Strategi MADEFlex mempunyai kelebihan berikut:
Gabungan isyarat penunjuk dan mekanisme hentikan, lebih dipercayai. Isyarat MADE sendiri mudah menghasilkan isyarat salah. Gabungan dengan hentikan ATR dapat menyaring sebahagian bunyi secara berkesan.
Parameter yang boleh disesuaikan, kawalan fleksibel. Parameter indikator MADE dan parameter ATR boleh disesuaikan, mengawal jumlah dan kualiti isyarat.
Sokongan operasi terbalik. Perdagangan terbalik boleh dilakukan melalui suis terbalik, memperkayakan senario penggunaan strategi.
Visual stopper Intuitif. Dengan melukis garis henti, intuitif menilai kesan henti.
Strategi MADEFlex juga mempunyai risiko:
Parameter penunjuk MADE yang salah boleh menghasilkan banyak isyarat salah. Ujian berhati-hati diperlukan untuk menentukan parameter yang sesuai.
ATR berhenti terlalu lemah dan mungkin terlepas peluang berhenti. Ujian disyorkan untuk menentukan kelipatan ATR yang sesuai.
Operasi terbalik berisiko tinggi. Terutama dalam keadaan turun naik yang tinggi, operasi terbalik boleh meningkatkan risiko kerugian. Perlu digunakan dengan berhati-hati.
Tidak ada penangguhan boleh menyebabkan kerugian yang lebih besar. Dalam keadaan yang melampau, tidak ada perlindungan penangguhan boleh menyebabkan kerugian yang lebih besar.
Strategi MADEFlex boleh dioptimumkan dari arah berikut:
Mengoptimumkan parameter MADE, meningkatkan kualiti isyarat. Boleh menguji pelbagai kitaran, parameter peratusan, dan mencari kombinasi parameter yang lebih dipercayai.
Mengoptimumkan parameter ATR berhenti untuk kesan berhenti yang lebih baik. Anda boleh menguji kitaran ATR dan kali ganda ATR untuk menentukan kombinasi yang lebih sesuai.
Menambah syarat penapisan lain untuk mengurangkan lebih banyak isyarat palsu. Sebagai contoh, penapisan isyarat lebih lanjut dengan penunjuk kadar lonjakan.
Tambah strategi stop loss, stop loss keluar apabila keuntungan mencapai tahap tertentu. Boleh mengunci keuntungan, mengawal risiko.
Menggabungkan parameter pengoptimuman dinamik dengan kaedah pembelajaran mesin. Menggunakan parameter pengoptimuman masa nyata dengan kaedah seperti pembelajaran penguatan, menjadikan strategi lebih fleksibel.
Strategi MADEFlex berjaya menggabungkan isyarat dagangan penunjuk envelope purata bergerak dan kaedah penghentian kerugian jangkauan purata sebenar. Dengan parameter yang boleh disesuaikan, penyelesaian dagangan kuantitatif yang fleksibel dan terkawal dapat dicapai. Strategi ini mempunyai kebolehpercayaan yang tinggi, kawalan yang kuat, sesuai untuk digunakan dan dioptimumkan oleh pengguna yang mempunyai asas kuantitatif tertentu. Dengan pengoptimuman lanjut, prestasi strategi yang lebih ketara dijangka dihasilkan.
/*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)