
이 전략은 동력 지표에 기반한 돌파 거래 전략이다. 그것은 평균선, ATR, RSI 등 여러 지표를 사용하여 시장의 경향과 변동률을 판단하고, 엄격한 중지 중지 설정과 함께 거래를 한다. 전략은 주로 가격이 상승 또는 하향 평균선을 돌파하고 ATR 범위를 더하여 거래 신호를 생성하는지 판단한다.
이 전략은 다음과 같은 몇 가지 요인에 기반합니다.
가격 트렌드 방향을 판단하기 위해 EMA 평균선을 사용한다. 평균선을 상단으로 을 표시하고, 하단으로 하향을 표시한다.
ATR 지표는 시장의 변동률을 판단한다. ATR은 한 계수를 중지 범위로 곱한다. 이것은 단편 손실을 효과적으로 제어할 수 있다.
RSI 지표는 과매매를 판단한다. ATR 정지 가격과 평평선 판단의 브레이크 트레이드는 RSI가 과매매를 하지 않는 경우에 반드시 촉발되어야 한다. 이것은 가짜 브레이크를 피할 수 있다.
초기 최고점이나 낮은 점을 시출장 기준으로 사용한다. 시 가격을 추적하면 더 많은 수익을 얻을 수 있다.
엄격한 중지 중지 규칙. ATR 중지 손실은 변동률 지표와 결합하여 위험을 제어 할 수 있으며, 중지 설정은 수익을 잠금 할 수 있습니다.
진입 신호는 가격의 평균선 + ATR 중지 범위의 돌파이다. 만약 호박 신호라면 가격이 그 고점을 넘어야 한다. 만약 하락 신호라면 가격이 그 낮은 점을 넘어야 한다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
다중 지표 판단은 가짜 돌파를 방지하고 신호 정확도를 향상시킵니다.
ATR 스탠드 레인지 설정은 손실을 합리적인 수준으로 제어합니다.
동적 추적 차단은 수익을 극대화합니다.
엄격한 스톱-스트로스 규칙은 위험을 통제하는 데 도움이 됩니다.
지표와 매개 변수를 최적화 할 수있는 넓은 공간, 다른 시장에 따라 조정할 수 있습니다.
이 전략에는 다음과 같은 위험도 있습니다.
수익성은 시장의 변동률과 관련이 있다. 시장의 추세가 불확실하거나 주기가 길어지면 수익의 여지가 제한된다.
스톱 손실 가격의 흔들림 후 다시 돌파가 발생할 수 있습니다. 이 경우 적시에 상장을 세우지 못하는 추세를 추적 할 수 없습니다. 스톱 손실 가격을 적절히 완화 할 수 있습니다.
chasing。
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
다양한 품종과 주기에 따라 평균선 변수, ATR 변수 등을 조정한다.
MACD, KDJ 등과 같은 더 많은 지표 판단을 도입할 수 있습니다.
ATR 값에 따라 실시간으로 스톱 로드 인자를 조정할 수 있다. 스톱 로드를 시장의 변동에 더 잘 적응하도록 한다.
여러 시간주기의 조합을 구축한다. 서로 다른 주기 지표를 결합하면 신호 품질을 향상시킬 수 있다.
기계 학습 기술을 사용하여 지표와 매개 변수를 테스트하고 최적화하여 전략 매개 변수를 최적화하십시오.
이 전략은 전체적으로 지표를 사용하여 판단하고, 엄격하게 손실을 막는 브레이크 트레이딩 전략이다. 그것은 평균선, ATR 및 RSI와 같은 지표의 장점을 효과적으로 활용하여 시장 추세 방향을 효과적으로 판단할 수 있다. 엄격한 손실을 막는 설정과 결합하여 추세 수익을 파악하는 동시에 위험을 제어 할 수 있다. 매개 변수 및 규칙으로 최적화하면 이 전략은 장기적으로 사용할 가치가있는 정량화 트레이딩 전략이 될 수 있다.
/*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)