Ini adalah strategi perdagangan yang berbasis momentum. Ini menggunakan moving average, ATR, RSI dan indikator lain untuk menilai tren pasar dan volatilitas, dikombinasikan dengan pengaturan stop loss / take profit yang ketat untuk perdagangan. Strategi ini terutama menilai apakah harga menerobos atau jatuh di bawah moving average ditambah kisaran ATR untuk menghasilkan sinyal perdagangan.
Poin utama dari strategi ini adalah:
Gunakan EMA untuk menilai arah tren harga. Harga melintasi di atas EMA adalah sinyal bullish dan melintasi di bawah adalah sinyal bearish.
ATR menunjukkan volatilitas pasar. ATR dikalikan dengan koefisien berfungsi sebagai rentang stop loss. Ini dapat secara efektif mengendalikan kerugian tunggal.
RSI menunjukkan status overbought/oversold. Perdagangan breakout yang disinyalisasikan oleh harga stop loss dan crossover EMA harus terjadi ketika RSI tidak berada di zona overbought/oversold. Hal ini menghindari breakout palsu.
Menggunakan periode sebelumnya titik tinggi / rendah sebagai mengambil keuntungan dasar.
Aturan stop loss / take profit yang ketat. ATR berbasis stop loss mengendalikan risiko dan mengambil keuntungan kunci dalam keuntungan.
Sinyal masuk diaktifkan ketika harga keluar dari EMA ditambah ATR stop loss range. Untuk sinyal bullish, harga perlu melintasi di atas titik tinggi. Untuk sinyal bearish, harga perlu keluar di bawah titik rendah.
Keuntungan dari strategi ini:
Multiple indicator menghindari pemutusan palsu dan meningkatkan akurasi
ATR stop loss menjaga kerugian pada tingkat yang wajar
Pelacakan mengambil keuntungan dinamis memaksimalkan keuntungan
Aturan yang ketat memudahkan pengendalian risiko
Ruang optimalisasi yang luas untuk indikator dan parameter untuk beradaptasi dengan pasar yang berbeda
Risiko dari strategi ini:
Keuntungan berkorelasi dengan volatilitas pasar. Pendapatan dapat dibatasi jika tren tidak jelas atau siklusnya panjang.
Harga stop loss mungkin bisa terputus sebelum pecah lagi. hal ini mengarah pada hilangnya tren. bisa meredakan harga stop loss sedikit.
3.Ada potensi untuk mengejar di pasar tren.
Ide optimasi:
Sesuaikan parameter MA, ATR untuk produk dan kerangka waktu yang berbeda.
Tambahkan lebih banyak indikator seperti MACD, KDJ untuk overbought/oversold.
Mengatur koefisien ATR secara dinamis berdasarkan nilai ATR real-time untuk perhentian adaptif.
Menetapkan sistem kombinasi dengan beberapa kerangka waktu. indikator kerangka waktu yang berbeda dapat meningkatkan kualitas sinyal.
Menggunakan pembelajaran mesin untuk optimasi parameter / indikator untuk mencapai kinerja terbaik.
Strategi ini menggunakan indikator untuk penilaian dan stop loss / take profit yang ketat. Ini memanfaatkan moving average, ATR dan RSI untuk menentukan tren pasar. Dengan kontrol risiko yang ketat, ini dapat mengendarai tren sambil mengelola risiko. Optimasi parameter dan aturan lebih lanjut dapat menjadikannya sistem perdagangan yang menguntungkan jangka panjang.
/*backtest start: 2024-01-27 00:00:00 end: 2024-02-03 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="UT Bot Strategy", overlay = true) //CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. // Inputs emaLengh = input(2, title = "emaLengh") a = input(3.0, title = "Key Vaule. 'This changes the sensitivity'") c = input(10, title = "ATR Period") h = input(false, title = "Signals from Heikin Ashi Candles") emaLengh2 = input(9, title = "emaLengh show") rate = input(0.00025, title = "波动率min") rateMax = input(0.00045, title = "波动率max") adx_length = input(20, title = "adx_length") adx_min = input(14, title = "adx_min") sma_length = input(11, title = "sma_length") rsi_len = input(9, title = "rsi_len") src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close // boll 通道---------------------------------------------------- length = input(20, minval=1) mult = input(2.0, minval=0.001, maxval=50, title="StdDev") basis = sma(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev bbr = (src - lower)/(upper - lower) // plot(upper, color = color.rgb(46, 59, 240), title="upper") // plot(lower, color = color.rgb(46, 59, 240), title="lower") // plot(bbr, "Bollinger Bands %B", color=#26A69A) // band1 = hline(1, "Overbought", color=#787B86, linestyle=hline.style_dashed) // hline(0.5, "Middle Band", color=color.new(#787B86, 50)) // band0 = hline(0, "Oversold", color=#787B86, linestyle=hline.style_dashed) // fill(band1, band0, color=color.rgb(38, 166, 154, 90), title="Background") // boll 通道---------------------------------------------------- // 线性回归 -------------------------------------------------------------- zlsma_length = input(title="zlsma-Length", type=input.integer, defval=50) zlsma_offset = input(title="zlsma-Offset", type=input.integer, defval=0) lsma = linreg(src, zlsma_length, zlsma_offset) lsma2 = linreg(lsma, zlsma_length, zlsma_offset) eq= lsma-lsma2 zlsma = lsma+eq // plot(zlsma , color = color.rgb(243, 243, 14), title="zlsma",linewidth=3) // 线性回归 -------------------------------------------------------------- // -------------------------------- rsi = rsi(src, 6) // xHH = sma(high, sma_length) // xLL = sma(low, sma_length) // movevalue = (xHH - xLL) / 2 // xHHM = xHH + movevalue // xLLM = xLL - movevalue // plot(xHHM, color = color.rgb(208, 120, 219), title="xHHM") // plot(xLLM, color = color.rgb(208, 120, 219), title="xLLM") xATR = atr(c) nLoss = a * xATR xATRTrailingStop = 0.0 xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss), iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss))) pos = 0 pos := iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1, iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue ema = ema(src,emaLengh) // sma = sma(src,emaLengh) emaFast = ema(src,100) emaSlow = ema(src,576) emaShow = ema(src, emaLengh2) // sma = sma(src, 8) // [superTrend, dir] = supertrend(3, 200) // 判断连续涨 [diplus, diminus, adx] = dmi(adx_length, adx_length) above = crossover(ema, xATRTrailingStop) below = crossover(xATRTrailingStop, ema) // above = ema == xATRTrailingStop // below = xATRTrailingStop== ema // smaabove = crossover(src, sma) // smabelow = crossover(sma, src) // smaabove = src > sma // smabelow = sma > src close_rate (n)=> abs(close[n]-open[n])/min(close[n],open[n]) rate_val = close_rate(0) rate_val1 = close_rate(1) buy = src > xATRTrailingStop and above and src > zlsma and adx >adx_min // and src>emaShow // and rate_val < rate_val1*2 and rate_val >=rate_val1 // and rate_val1<rateMax // and close[1]>open[1] sell = src < xATRTrailingStop and below and src < zlsma and adx >adx_min // and src<emaShow // and rate_val < rate_val1*2 and rate_val >=rate_val1 // and rate_val1<rateMax // and open[1]>close[1] and rate_val1 > rate // buy = src > xATRTrailingStop // sell = src < xATRTrailingStop // plot(rate_val1 , color = color.red, title="rate_val1") barbuy = src > xATRTrailingStop barsell = src < xATRTrailingStop atrRsi = rsi(xATRTrailingStop,rsi_len) // plot(emaFast , color = color.rgb(243, 206, 127), title="emaFast") // plot(ema , color = color.rgb(47, 227, 27), title="ut-ema") // plot(emaShow , color = color.rgb(47, 227, 27), title="ema9") plot(xATRTrailingStop, color = color.rgb(233, 233, 232), title="xATRTrailingStop") plotshape(buy, title = "Buy", text = 'Buy', style = shape.labelup, location = location.belowbar, color= color.green, textcolor = color.white, size = size.tiny) plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red, textcolor = color.white, size = size.tiny) // plotshape(buy, title = "Sell", text = 'Sell', style = shape.labelup, location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny) // plotshape(sell, title = "buy", text = 'buy', style = shape.labeldown, location = location.abovebar, color= color.red, textcolor = color.white, transp = 0, size = size.tiny) // barcolor(barbuy ? color.green : na) // barcolor(barsell ? color.red : na) // strategy.entry("short", false, when = buy) // strategy.entry("long ", true, when = sell) strategy.entry("long", true, when = buy and strategy.position_size == 0) strategy.entry("short", false, when = sell and strategy.position_size == 0) //动态止盈start------------------------------------------------------------------------------------------ profit = input( 0.015, title = "最小收益率") close_profit_rate = input( 10, title = "平仓收益回撤比") loss = input(0.004, title = "回撤率") // 收益回撤比例 profit_price_scale =profit/close_profit_rate var float profit_price = 0 // 计算小收益价格 get_profit_price(long) => float res = 0 if long == true res := strategy.position_avg_price * (1+profit) if long == false res := strategy.position_avg_price * (1-profit) res // 止盈平仓条件 close_profit_position(long)=> bool result=false if long == true and profit_price>0 and profit_price*(1-profit_price_scale) >=close and get_profit_price(true) <= close result:=true if long == false and profit_price>0 and profit_price*(1+profit_price_scale) <=close and get_profit_price(false) >= close result:=true result // 更新动态止盈价格 update_profit_price(price)=> float res = price // 无仓位时 动态止盈价格为0 if strategy.position_size == 0 res := 0 // long - 价格大于最小收益时保存 if strategy.position_size > 0 and get_profit_price(true) <= close and (res==0 or res < close) res := close // short - 价格小于最小收益时保存 if strategy.position_size < 0 and get_profit_price(true) >= close and (res==0 or res > close) res := close res /////// profit_price := update_profit_price(profit_price) long_close_profit_position = close_profit_position(true) short_close_profit_position = close_profit_position(false) // plot(profit_price, color = color.green, title="profit_price") //动态止盈end------------------------------------------------------------------------------------------ strategy.close("long",comment="long-止盈",when = strategy.position_size > 0 and long_close_profit_position) strategy.close("long",comment="long-止损",when = strategy.position_size >0 and strategy.position_avg_price * (1-loss) >= close) strategy.close("short",comment="short-止盈",when = strategy.position_size <0 and short_close_profit_position) strategy.close("short",comment="short-止损",when = strategy.position_size <0 and strategy.position_avg_price * (1+loss) <= close)