
Strategi ini adalah strategi perdagangan pecah berdasarkan indikator momentum. Ia menggunakan beberapa indikator untuk menilai trend dan turun naik pasaran, seperti garis rata-rata, ATR, RSI, dan lain-lain, digabungkan dengan tetapan stop loss yang ketat untuk berdagang.
Strategi ini berdasarkan kepada beberapa perkara:
Menggunakan garis rata-rata EMA untuk menentukan arah trend harga. Harga di atas garis rata-rata sebagai isyarat bullish dan di bawah sebagai isyarat bearish.
Indeks ATR menilai kadar turun naik pasaran. ATR dikalikan dengan satu faktor sebagai had berhenti. Ini dapat mengawal kerugian tunggal dengan berkesan.
Indeks RSI menilai overbought dan oversold. Penembusan perdagangan yang ditentukan oleh harga henti ATR dan penilaian garis rata mesti dicetuskan dengan RSI yang tidak melebihi harga beli dan jual. Ini dapat mengelakkan penembusan palsu.
Menggunakan tahap tinggi atau rendah awal sebagai dasar untuk berhenti. Mengesan harga berhenti dapat mengunci lebih banyak keuntungan.
Peraturan Stop Loss yang ketat. ATR Stop Loss yang digabungkan dengan indikator kadar turun naik dapat mengawal risiko, dan tetapan Stop Loss dapat mengunci keuntungan.
Isyarat masuk ialah harga menembusi garis purata ditambah dengan kawasan stop loss ATR. Jika isyarat bullish, maka harga perlu naik melalui titik tinggi; jika isyarat bearish, maka harga perlu menembusi titik rendah.
Strategi ini mempunyai kelebihan berikut:
Penghakiman berbilang indikator dapat mengelakkan penembusan palsu dan meningkatkan ketepatan isyarat
Tetapan Julat Kerosakan ATR untuk mengawal kerosakan pada tahap yang wajar
Tracking Stop Stop Dinamis Untuk Maksimkan Keuntungan
Peraturan Stop Loss yang ketat membantu mengawal risiko
Indikator dan parameter mempunyai ruang yang luas untuk dioptimumkan dan boleh disesuaikan dengan pasaran yang berbeza
Strategi ini juga mempunyai risiko:
Keupayaan keuntungan berkaitan dengan kadar turun naik pasaran. Apabila trend pasaran tidak jelas atau kitaran yang panjang, ruang keuntungan terhad.
Keadaan yang mungkin berlaku apabila harga stop loss bergolak dan kemudian pecah lagi. Ini akan menyebabkan ketidakupayaan untuk menjejaki trend dalam masa yang tepat.
chasing。
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Parameter garis rata-rata, parameter ATR, dan lain-lain disesuaikan mengikut varieti dan kitaran.
Lebih banyak penunjuk penilaian boleh diperkenalkan, seperti MACD, KDJ dan lain-lain.
Koefisien hentian boleh disesuaikan secara langsung mengikut nilai ATR. Hentian lebih sesuai dengan turun naik pasaran.
Menubuhkan gabungan pelbagai tempoh masa. Gabungan indikator tempoh yang berbeza dapat meningkatkan kualiti isyarat.
Menggunakan teknologi pembelajaran mesin untuk menguji dan mengoptimumkan parameter dan parameter untuk mencapai parameter strategi yang optimum.
Strategi ini secara keseluruhan adalah strategi perdagangan pecah yang menggunakan petunjuk untuk membuat keputusan, menghentikan penangguhan kerugian yang ketat. Ia memanfaatkan kelebihan indikator seperti garis rata, ATR dan RSI dengan berkesan, dapat menentukan arah trend pasaran dengan berkesan.
/*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)