Strategi ini menggunakan 2 penunjuk untuk menjana isyarat perdagangan: 2/20 Exponential Moving Average dan Average True Range Reversal.
Strategi ini terdiri daripada 2 bahagian:
2/20 Exponential Moving Average. Ia mengira EMA 20 hari dan menghasilkan isyarat apabila harga melintasi EMA ke atas atau ke bawah.
Rata-rata Indikator Pembalikan Julat Benar. Ia mengira tahap stop loss berdasarkan ATR, dan menghasilkan isyarat apabila harga memecahkan tahap stop loss. Di sini 3.5 x ATR digunakan sebagai tahap berhenti.
Strategi ini menggabungkan isyarat dari kedua-dua. Ia pergi pendek apabila 2/20 EMA memberikan isyarat panjang manakala pembalikan ATR memberikan isyarat pendek. Ia pergi panjang apabila isyarat bertentangan dihasilkan.
Strategi ini menggabungkan trend berikut dan idea pembalikan, bertujuan untuk menangkap pembalikan.
2/20 EMA mengenal pasti trend jangka menengah, mengelakkan bunyi pasaran.
Pembalikan ATR menangkap pembalikan dan peluang jangka pendek.
Menggabungkan isyarat menangkap pembalikan trend lebih awal dan meningkatkan keuntungan.
Kerugian henti ATR yang munasabah menyediakan kawalan risiko tertentu.
Pengganda ATR yang boleh disesuaikan menyesuaikan diri dengan produk yang berbeza.
Pilihan pembalikan menyesuaikan diri dengan persekitaran pasaran yang berbeza.
Risiko adalah:
2/20 EMA adalah perlahan dan mungkin terlepas peluang jangka pendek.
Hentikan kehilangan ATR boleh ditembusi dengan mudah. Hentikan kehilangan yang lebih luas diperlukan.
Isyarat satu indikator tidak boleh dipercayai.
Berhati-hati dengan perdagangan berlebihan.
Penyesuaian parameter dan ujian belakang diperlukan untuk menyesuaikan produk.
Pengurusan modal yang ketat diperlukan untuk mengawal risiko setiap perdagangan.
Strategi ini boleh ditingkatkan dari:
Penyesuaian parameter EMA untuk kombinasi terbaik.
Mengoptimumkan pengganda ATR untuk kehilangan berhenti yang lebih baik.
Menambah keadaan penapis seperti jumlah dan volatiliti.
Menambah model pengurusan modal untuk saiz kedudukan dinamik.
Menambah strategi stop loss lain seperti Chandelier Exit.
Ujian parameter di pelbagai produk.
Menambah model pembelajaran mesin untuk prestasi yang lebih baik.
Menggabungkan pelbagai sub-strategi untuk lebih banyak Alpha.
Strategi ini menggabungkan dua idea utama dan mempunyai kelebihan tertentu untuk menangkap pembalikan. Tetapi pemilihan parameter yang tidak sesuai juga boleh memperkenalkan risiko. Penambahbaikan strategi stop loss dan penambahan penapis dapat meningkatkan kestabilan dan keuntungan.
/*backtest start: 2022-10-27 00:00:00 end: 2023-11-02 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 05/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 // Average True Range Trailing Stops Strategy, by Sylvain Vervoort // The related article is copyrighted material from Stocks & Commodities Jun 2009 // Please, use it only for learning or paper trading. Do not for real trading. // // // 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 ATRR(nATRPeriod,nATRMultip) => pos = 0.0 xATR = ta.atr(nATRPeriod) nLoss = nATRMultip * xATR 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 pos:= close[1] < nz(xATRTrailingStop[1], 0) and close > nz(xATRTrailingStop[1], 0) ? 1 : close[1] > nz(xATRTrailingStop[1], 0) and close < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0) pos strategy(title='Combo 2/20 EMA & Average True Range Reversed', shorttitle='Combo', overlay=true) var I1 = '●═════ 2/20 EMA ═════●' Length = input.int(14, minval=1, group=I1) var I2 = '●═════ Average True Range Reversed ═════●' nATRPeriod = input.int(5, group=I2) nATRMultip = input.float(3.5, 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) prePosATRR = ATRR(nATRPeriod,nATRMultip) iff_1 = posEMA20 == -1 and prePosATRR == -1 and StartTrade ? -1 : 0 pos = posEMA20 == 1 and prePosATRR == 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)