
Chiến lược này là một chiến lược giao dịch phá vỡ dựa trên các chỉ số động lực. Nó sử dụng nhiều chỉ số như đường trung bình, ATR, RSI để đánh giá xu hướng và biến động của thị trường, kết hợp với thiết lập dừng lỗ nghiêm ngặt để giao dịch. Chiến lược chủ yếu đánh giá xem giá có phá vỡ đường trung bình lên hoặc xuống cộng với phạm vi ATR để tạo ra tín hiệu giao dịch.
Chiến lược này được xây dựng dựa trên những điểm sau:
Sử dụng đường trung bình EMA để xác định xu hướng giá. Đường trung bình trên giá là tín hiệu đi lên, đường trung bình dưới là tín hiệu đi xuống.
Chỉ số ATR đánh giá tỷ lệ biến động của thị trường. ATR được nhân với một hệ số như là phạm vi dừng lỗ. Điều này có thể kiểm soát hiệu quả tổn thất đơn lẻ.
Chỉ số RSI đánh giá quá mua quá bán. Các giao dịch phá vỡ theo giá dừng ATR và đánh giá đường trung bình phải được kích hoạt trong trường hợp RSI không vượt quá mua và không vượt quá bán. Điều này có thể tránh phá vỡ giả.
Sử dụng các điểm cao hoặc thấp trước đó làm cơ sở để dừng. Theo dõi giá dừng có thể khóa thêm lợi nhuận.
Quy tắc dừng lỗ nghiêm ngặt. ATR dừng lỗ kết hợp với chỉ số biến động có thể kiểm soát rủi ro và cài đặt dừng lỗ có thể khóa lợi nhuận.
Tín hiệu nhập là giá phá vỡ đường trung bình cộng với phạm vi dừng ATR. Nếu là tín hiệu đợt tăng, giá sẽ cần phải vượt qua điểm cao; Nếu là tín hiệu giảm, giá sẽ cần phải phá vỡ điểm thấp.
Chiến lược này có những ưu điểm sau:
Quyết định đa chỉ số giúp tránh đột phá giả và cải thiện độ chính xác tín hiệu
Thiết lập phạm vi ATR Stop Loss để kiểm soát tổn thất ở mức hợp lý
Động thái theo dõi Stop Stop để tối đa hóa lợi nhuận
Quy tắc dừng lỗ nghiêm ngặt giúp kiểm soát rủi ro
Các chỉ số và tham số có thể được tối ưu hóa và điều chỉnh theo thị trường khác nhau
Chiến lược này cũng có những rủi ro sau:
Khả năng lợi nhuận có liên quan đến tỷ lệ biến động của thị trường. Khi xu hướng thị trường không rõ ràng hoặc chu kỳ dài, không gian lợi nhuận bị hạn chế.
Có thể xảy ra sự phá vỡ một lần nữa sau khi biến động giá dừng. Điều này có thể gây ra không thể lập kho theo dõi xu hướng kịp thời.
chasing。
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Điều chỉnh tham số đường trung bình, tham số ATR cho các giống và chu kỳ khác nhau.
Các chỉ số khác có thể được đưa vào để đánh giá như MACD, KDJ và các chỉ số khác.
Có thể điều chỉnh hệ số dừng lỗ theo giá trị ATR theo thời gian thực. Làm cho dừng lỗ thích ứng hơn với biến động thị trường.
Xây dựng một sự kết hợp của nhiều chu kỳ thời gian. Kết hợp các chỉ số khác nhau có thể nâng cao chất lượng tín hiệu.
Sử dụng công nghệ học máy để kiểm tra và tối ưu hóa các chỉ số và tham số để tối ưu hóa tham số chiến lược.
Chiến lược tổng thể là một chiến lược giao dịch đột phá sử dụng các chỉ số để phán đoán, nghiêm ngặt dừng lỗ. Nó sử dụng hiệu quả các lợi thế của các chỉ số như đường trung bình, ATR và RSI, có thể xác định hiệu quả hướng của xu hướng thị trường. Kết hợp với các thiết lập dừng lỗ nghiêm ngặt, có thể nắm bắt xu hướng và lợi nhuận trong khi kiểm soát rủi ro.
/*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)