Sistem Pembalikan Trend adalah strategi trend berikut yang menggunakan purata bergerak, penunjuk CCI dan penunjuk Supertrend untuk mengenal pasti trend dan masuk pada pullbacks.
Strategi ini menggunakan EMA 21 tempoh sebagai purata bergerak jangka pendek dan EMA 55 tempoh sebagai purata bergerak jangka panjang.
Indikator CCI menunjukkan apabila harga telah mencapai tahap yang melampau. Isyarat Tahap 1 adalah apabila CCI mencapai 100/-100 secara lalai, tahap 2 adalah 140/-140 dan tahap 3 adalah 180/-180. Ini menunjukkan keadaan overbought atau oversold.
Indikator Supertrend menentukan arah trend tertentu. Ia menggabungkan ATR untuk mengenal pasti stop loss dan tahap kemasukan untuk trend menaik dan menurun.
Apabila 21 EMA berada di atas 55 EMA dan CCI mencapai tahap rendah (ruang oversold), ia boleh menandakan masuk panjang. Apabila 21 EMA berada di bawah 55 EMA dan CCI mencapai tahap tinggi (ruang overbought), ia boleh menandakan masuk pendek. Stop loss ditetapkan pada tahap berhenti Supertrend
Strategi ini menggabungkan pelbagai penunjuk untuk mengenal pasti trend dan situasi overbought / oversold, yang membantu menapis pecah palsu. Keuntungan mengambil tetap membolehkan nisbah risiko-balasan yang stabil. Perdagangan dengan trend memberikan kadar kemenangan yang lebih tinggi. Isyarat overbought / oversold CCI menawarkan masa kemasukan yang baik semasa retracements trend.
Parameter perlu dioptimumkan untuk simbol yang berbeza kerana tetapan semasa mungkin tidak ideal. Kaedah stop loss mentah dan tidak dapat menyesuaikan diri dengan keadaan pasaran yang berbeza. Keuntungan tetap tidak dapat disesuaikan berdasarkan turun naik pasaran. CCI kadang-kadang boleh menghasilkan isyarat palsu. Perlu penilaian lanjut mengenai momentum trend untuk mengelakkan whipsaws.
Uji tetapan parameter pada simbol yang berbeza, mengoptimumkan tempoh MA, tempoh ATR, pengganda ATR dan lain-lain. Pertimbangkan hentian atau hentian ATR untuk hentian kerugian adaptif. Uji keuntungan berdasarkan ATR untuk sasaran keuntungan dinamik. Tambah penapis untuk memeriksa momentum trend apabila mengambil isyarat CCI untuk mengelakkan pasaran yang bergolak. Tambah penunjuk kekuatan trend yang boleh dikesan untuk pengesahan trend yang lebih baik.
Sistem Pembalikan Trend menggabungkan purata bergerak, CCI dan Supertrend untuk mengenal pasti trend dan overbought / oversold untuk entri retracement. Ia mempunyai kestabilan dan kadar kemenangan yang agak tinggi, tetapi mekanisme stop loss, mengambil keuntungan dan pengesahan trend memerlukan pengoptimuman lanjut untuk ketahanan merentasi simbol dan keadaan pasaran. Secara keseluruhan ia menggunakan pendekatan yang mudah dan langsung untuk menggabungkan penunjuk untuk menangkap peluang trend, dan bernilai penyelidikan lebih lanjut dan penerapan.
/*backtest start: 2022-10-16 00:00:00 end: 2023-01-08 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © greenmask9 //@version=4 strategy("Oath", overlay=true) // 21 EMA emalength = input(21, title="Short EMA") emashort = ema(close, emalength) // 55 EMA emalength2 = input(55, title="Long EMA") ema = ema(close, emalength2) //CCI calculation and inputs lengthcci = input(20, minval=1, title="Overbought/sold detector period") src = input(close, title="Overbought/sold detector source") ma = sma(src, lengthcci) ccivalue = (src - ma) / (0.015 * dev(src, lengthcci)) //CCI plotting ccioverbought = input(defval=100, title="Overbought level 1") ccioverbought2 = input(defval=140, title="Overbought level 2") ccioverbought3 = input(defval=180, title="Overbought level 3") ccioversold = input(defval=-100, title="Oversold level 1") ccioversold2 = input(defval=-140, title="Oversold level 2") ccioversold3 = input(defval=-180, title="Oversold level 3") //cciOB = (ccivalue >= ccioverbought and ccivalue < ccioverbought2) //cciOS = (ccivalue <= ccioversold and ccivalue > ccioversold2) //cciOB2 = (ccivalue >= ccioverbought2 and ccivalue < ccioverbought3) //cciOS2 = (ccivalue <= ccioversold and ccivalue > ccioversold3) //cciOB3 = (ccivalue >= ccioverbought3) //cciOS3 = (ccivalue <= ccioversold3) //Supertrend length = input(title="ATR Period", type=input.integer, defval=55) mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=5.0) wicks = input(title="Take Wicks into Account ?", type=input.bool, defval=true) illuminate = input(title="Illuminate Trend", type=input.bool, defval=false) atr = mult * atr(length) longStop = hl2 - atr longStopPrev = nz(longStop[1], longStop) longStop := (wicks ? low[1] : close[1]) > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = hl2 + atr shortStopPrev = nz(shortStop[1], shortStop) shortStop := (wicks ? high[1] : close[1]) < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and (wicks ? high : close) > shortStopPrev ? 1 : dir == 1 and (wicks ? low : close) < longStopPrev ? -1 : dir //entries uptrend = emashort>ema and dir == 1 upsignal = ccivalue<=ccioversold and ccivalue>ccioversold2 upsignal2 = ccivalue<=ccioversold2 and ccivalue>ccioversold3 upsignal3 = ccivalue<=ccioversold3 downtrend = emashort<ema and dir == -1 downsignal = ccivalue>=ccioverbought and ccivalue<ccioverbought2 downsignal2 = ccivalue>=ccioverbought2 and ccivalue<ccioverbought3 downsignal3 = ccivalue>=ccioverbought3 //adapts to the current bar, I need to save the bars number when the condition for buy was true, static number is spread spread = input (0.00020, title="Spread") upstoploss = longStop - spread downstoploss = shortStop + spread strategy.initial_capital = 50000 ordersize=floor(strategy.initial_capital/close) testlong = input(title="Test longs", type=input.bool, defval=true) testshort = input(title="Test shorts", type=input.bool, defval=true) //new degree = input(title="Test level 1 overbought/sold levels", type=input.bool, defval=true) degree2 = input(title="Test level 2 overbought/sold levels", type=input.bool, defval=false) degree3 = input(title="Test level 3 overbought/sold levels", type=input.bool, defval=false) statictarget = input(title="Use static target", type=input.bool, defval=true) statictargetvalue = input(title="Static target in pips", type=input.integer, defval=400) //timetrade = input(title="Open trades only withing specified time", type=input.bool, defval=true) //timtrade = input() //přidat možnost TP podle ATR a sl podle ATR buy1 = uptrend and upsignal and strategy.opentrades==0 and testlong and degree x1 = barssince (buy1) if (buy1) //bodlo by zakázat atrtarget v tomto případě if (statictarget) strategy.entry("Oath1", strategy.long, ordersize) strategy.exit( "Oath1 Close", from_entry="Oath1" , profit=statictargetvalue,stop=upstoploss[x1]) buy2 = uptrend and upsignal2 and strategy.opentrades==0 and testlong and degree2 x2 = barssince (buy2) if (buy2) //bodlo by zakázat atrtarget v tomto případě if (statictarget) strategy.entry("Oath2", strategy.long, ordersize) strategy.exit( "Oath2 Close", from_entry="Oath2" , profit=statictargetvalue,stop=upstoploss[x2]) buy3 = uptrend and upsignal3 and strategy.opentrades==0 and testlong and degree3 x3 = barssince (buy3) if (buy3) //bodlo by zakázat atrtarget v tomto případě if (statictarget) strategy.entry("Oath3", strategy.long, ordersize) strategy.exit( "Oath3 Close", from_entry="Oath3" , profit=statictargetvalue,stop=upstoploss[x3]) sell1 = downtrend and downsignal and strategy.opentrades==0 and testshort and degree y1 = barssince (sell1) if (sell1) if (statictarget) strategy.entry("Oath1.s", strategy.short, ordersize) strategy.exit( "Oath1 Close", from_entry="Oath1.s" , profit=statictargetvalue,stop=downstoploss[y1]) sell2 = downtrend and downsignal2 and strategy.opentrades==0 and testshort and degree2 y2 = barssince (sell2) if (sell2) if (statictarget) strategy.entry("Oath2.s", strategy.short, ordersize) strategy.exit( "Oath2 Close", from_entry="Oath2.s" , profit=statictargetvalue,stop=downstoploss[y2]) sell3 = downtrend and downsignal3 and strategy.opentrades==0 and testshort and degree3 y3 = barssince (sell3) if (sell3) if (statictarget) strategy.entry("Oath3.s", strategy.short, ordersize) strategy.exit( "Oath3 Close", from_entry="Oath3.s" , profit=statictargetvalue,stop=downstoploss[y3]) plotshape(uptrend and upsignal and degree, location=location.belowbar, color=color.green, transp=0, style=shape.triangleup, size=size.tiny, text="Oath up") plotshape(downtrend and downsignal and degree, location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, size=size.tiny, text="Oath down") plotshape(uptrend and upsignal2 and degree2, location=location.belowbar, color=color.green, transp=0, style=shape.triangleup, size=size.tiny, text="Oath up+") plotshape(downtrend and downsignal2 and degree2, location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, size=size.tiny, text="Oath down+") plotshape(uptrend and upsignal3 and degree3, location=location.belowbar, color=color.green, transp=0, style=shape.triangleup, size=size.tiny, text="Oath up++") plotshape(downtrend and downsignal3 and degree3, location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, size=size.tiny, text="Oath down++")