跳转到主要内容

Scalping Bot:免费 TradingView 机器人策略

免费 TradingView 机器人策略 —— Scalping Bot(剥头皮交易机器人)。

作者:Jacob

该策略的原始思路来源于 TradingView 用户 mohanee。策略使用 RSI 背离(RSI Divergence) 作为入场信号,并在 RSI 到达相反区域时寻找平仓机会。该剥头皮交易策略可以轻松通过 WunderTrading 实现自动化交易。

重要提示!

  • 该策略不包含 Stop Loss(止损)Trailing Stop(追踪止损) 设置。

  • 该策略属于 逆势交易(Counter-Trend Entry) 策略。

  • 新增了回测周期输入参数,允许您按月评估策略表现。

策略设置

适用市场:LTC-PERP(15分钟周期)

Input

Value

Period

15

RSI Period

7

RSI Source

15

Pivot Lookback Right

3

Pivot Lookback Left

4

Long Take Profit at RSI level

77

Short Take Profit at RSI level

19

Max of Lookback Range

19

Min of Lookback Range

6

Plot Bullish

True (active)

Plot Hidden Bullish

True (active)

Plot Bearish

True (active)

Plot Hidden Bullish

False (not active)

修订版策略脚本代码

您可以复制以下代码并粘贴到 TradingView 中使用。

//Updated by: WunderTrading
//Original Idea by: mohanee

//@version=5

strategy('RSI Divergence', shorttitle='RSI-DIV', overlay=false, pyramiding=2, commission_type=strategy.commission.percent, commission_value=0.07, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.USD)

ribbon_period = input.int(15, 'Period', step=1)

leadLine1 = ta.ema(close, ribbon_period)
leadLine2 = ta.sma(close, ribbon_period)

// p1 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1)
// p2 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1)
// fill(p1, p2, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c)


len = input.int(title='RSI Period', minval=1, defval=7)
src = input(title='RSI Source', defval=close)
lbR = input(title='Pivot Lookback Right', defval=3)
lbL = input(title='Pivot Lookback Left', defval=4)
takeProfitRSILevel_long = input.int(title='Long Take Profit at RSI Level', minval=60, defval=77)
takeProfitRSILevel_short = input.int(title='Short Take Profit at RSI Level', maxval=30, defval=19)

rangeUpper = input(title='Max of Lookback Range', defval=19)
rangeLower = input(title='Min of Lookback Range', defval=6)
plotBull = input(title='Plot Bullish', defval=true)
plotHiddenBull = input(title='Plot Hidden Bullish', defval=true)
plotBear = input(title='Plot Bearish', defval=true)
plotHiddenBear = input(title='Plot Hidden Bearish', defval=false)


bearColor = color.purple
bullColor = color.green
hiddenBullColor = color.new(color.green, 80)
hiddenBearColor = color.new(color.red, 80)
textColor = color.white
noneColor = color.new(color.white, 100)

osc = ta.rsi(src, len)

plot(osc, title='RSI', linewidth=2, color=color.new(#8D1699, 0))
hline(50, title='Middle Line', linestyle=hline.style_dotted)
obLevel = hline(70, title='Overbought', linestyle=hline.style_dotted)
osLevel = hline(30, title='Oversold', linestyle=hline.style_dotted)
fill(obLevel, osLevel, title='Background', color=color.new(#9915FF, 90))

plFound = na(ta.pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(ta.pivothigh(osc, lbL, lbR)) ? false : true

_inRange(cond) =>
bars = ta.barssince(cond == true)
rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------
// Regular Bullish

// Osc: Higher Low
oscHL = osc[lbR] > ta.valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Lower Low
priceLL = low[lbR] < ta.valuewhen(plFound, low[lbR], 1)

bullCond = plotBull and priceLL and oscHL and plFound

plot(plFound ? osc[lbR] : na, offset=-lbR, title='Regular Bullish', linewidth=2, color=bullCond ? bullColor : noneColor, transp=0)


plotshape(bullCond ? osc[lbR] : na, offset=-lbR, title='Regular Bullish Label', text=' Bull ', style=shape.labelup, location=location.absolute, color=color.new(bullColor, 0), textcolor=color.new(textColor, 0))

//------------------------------------------------------------------------------
// Hidden Bullish

// Osc: Lower Low
oscLL = osc[lbR] < ta.valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Higher Low
priceHL = low[lbR] > ta.valuewhen(plFound, low[lbR], 1)

hiddenBullCond = plotHiddenBull and priceHL and oscLL and plFound

plot(plFound ? osc[lbR] : na, offset=-lbR, title='Hidden Bullish', linewidth=2, color=hiddenBullCond ? hiddenBullColor : noneColor, transp=0)

plotshape(hiddenBullCond ? osc[lbR] : na, offset=-lbR, title='Hidden Bullish Label', text=' H Bull ', style=shape.labelup, location=location.absolute, color=color.new(bullColor, 0), textcolor=color.new(textColor, 0))

//------------------------------------------------------------------------
// Regular Bearish

// Osc: Lower High
oscLH = osc[lbR] < ta.valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Higher High
priceHH = high[lbR] > ta.valuewhen(phFound, high[lbR], 1)

bearCond = plotBear and priceHH and oscLH and phFound

plot(phFound ? osc[lbR] : na, offset=-lbR, title='Regular Bearish', linewidth=2, color=bearCond ? bearColor : noneColor, transp=0)

plotshape(bearCond ? osc[lbR] : na, offset=-lbR, title='Regular Bearish Label', text=' Bear ', style=shape.labeldown, location=location.absolute, color=color.new(bearColor, 0), textcolor=color.new(textColor, 0))

//------------------------------------------------------------------------------
// Hidden Bearish

// Osc: Higher High
oscHH = osc[lbR] > ta.valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Lower High
priceLH = high[lbR] < ta.valuewhen(phFound, high[lbR], 1)

hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound

plot(phFound ? osc[lbR] : na, offset=-lbR, title='Hidden Bearish', linewidth=2, color=hiddenBearCond ? hiddenBearColor : noneColor, transp=0)

plotshape(hiddenBearCond ? osc[lbR] : na, offset=-lbR, title='Hidden Bearish Label', text=' H Bear ', style=shape.labeldown, location=location.absolute, color=color.new(bearColor, 0), textcolor=color.new(textColor, 0))


/// Strategy Conditions


entry_long = if leadLine2 < leadLine1
hiddenBullCond
else
bullCond

entry_price_long = ta.valuewhen(entry_long, close, 0)
exit_long = ta.crossover(osc, takeProfitRSILevel_long) // or bearCond


///// SHORT ////

entry_short = if leadLine2 > leadLine1
hiddenBearCond
else
bearCond

entry_price_short = ta.valuewhen(entry_short, close, 0)
exit_short = ta.crossunder(osc, takeProfitRSILevel_short) // or bullCond


///// BACKTEST PERIOD ///////
testStartYear = input(2019, 'Backtest Start Year')
testStartMonth = input(1, 'Backtest Start Month')
testStartDay = input(1, 'Backtest Start Day')
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

testStopYear = input(9999, 'Backtest Stop Year')
testStopMonth = input(12, 'Backtest Stop Month')
testStopDay = input(31, 'Backtest Stop Day')
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0)

testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false

if testPeriod()
if strategy.position_size == 0 or strategy.position_size > 0
strategy.entry(id='long', direction=strategy.long, when=entry_long, comment='Enter Long Comment')
strategy.close(id='long', when=exit_long, comment='Exit Long Comment')

if strategy.position_size == 0 or strategy.position_size < 0
strategy.entry(id='short', direction=strategy.short, when=entry_short, comment='Enter Short Comment')
strategy.close(id='short', when=exit_short, comment='Exit Short Comment')

这是否解答了您的问题?