[go: up one dir, main page]

0% found this document useful (0 votes)
488 views7 pages

Sniper Algo 1

The document is a Pine Script code for a trading indicator called 'Sniper Algo' that utilizes exponential moving averages (EMAs) to generate buy and sell signals based on market trends. It includes features for entry conditions, stop-loss calculations, take profit signals, and a dashboard displaying market trends across various timeframes. Alerts are set up for buy/sell signals and take profit conditions, enhancing the usability of the trading strategy.

Uploaded by

mmra4ever
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
488 views7 pages

Sniper Algo 1

The document is a Pine Script code for a trading indicator called 'Sniper Algo' that utilizes exponential moving averages (EMAs) to generate buy and sell signals based on market trends. It includes features for entry conditions, stop-loss calculations, take profit signals, and a dashboard displaying market trends across various timeframes. Alerts are set up for buy/sell signals and take profit conditions, enhancing the usability of the trading strategy.

Uploaded by

mmra4ever
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 7

//@version=5

indicator('Sniper Algo', overlay=true)

// Trend band
showBand = input.bool(true, title='', inline='band')
bandColorPos = input.color(color.green, title='Band colors', inline='band')
bandColorNeg = input.color(color.red, title='', inline='band')

labelColorBuy = input(color.green, title='Buy label color')


labelColorSell = input(color.red, title='Sell label color')

emaLength1 = 8
emaLength2 = 13
emaLength3 = 21
emaLength4 = 55

// Defining the EMAs


ema1 = ta.ema(close, emaLength1)
ema2 = ta.ema(close, emaLength2)
ema3 = ta.ema(close, emaLength3)
ema4 = ta.ema(close, emaLength4)

// plot(tema1, color=color.orange)
maPlot1 = plot(ema3, color=color.new(color.green, 0), display=display.none,
editable=false)
maPlot2 = plot(ema4, color=color.new(color.red, 0), linewidth=3,
display=display.none, editable=false)

fill(maPlot1, maPlot2, color=color.new(ema3 > ema4 ? bandColorPos : bandColorNeg,


80), title='Trend band')

//plot(ema, color=color.blue)

// Array with MA values


arrMa = array.new_float()
array.push(arrMa, ema1)
array.push(arrMa, ema2)
array.push(arrMa, ema3)
array.push(arrMa, ema4)

// Pivot points
pivotHigh = fixnan(ta.pivothigh(10, 3))
pivotLow = fixnan(ta.pivotlow(10, 3))

// Entry logic
pos = 0
tpTracker1 = 0
tpTracker2 = 0
tpTracker3 = 0
tpTracker4 = 0
tpTracker5 = 0
// Entry conditions
longCond = array.min(arrMa) == ema4
shortCond = array.max(arrMa) == ema4

// Entry signals
entryLong = longCond and not longCond[1] and pos[1] != 1
entryShort = shortCond and not shortCond[1] and pos[1] != -1

// Entry values
entryValueLong = ta.valuewhen(entryLong, close, 0)
entryValueShort = ta.valuewhen(entryShort, close, 0)

// Stop-loss calculations
slValueOriginalLong = ta.valuewhen(entryLong, ta.valuewhen(close <
array.min(arrMa), close, 0), 0)
slValueLong = slValueOriginalLong
slDistLong = ta.valuewhen(entryLong, entryValueLong - slValueLong, 0)

if tpTracker1[1] == 1
slValueLong := entryValueLong
slValueLong

slLong = low <= slValueLong and pos[1] == 1

slValueOriginalShort = ta.valuewhen(entryShort, ta.valuewhen(close >


array.max(arrMa), close, 0), 0)
slValueShort = slValueOriginalShort
slDistShort = ta.valuewhen(entryShort, slValueShort - entryValueShort, 0)

if tpTracker1[1] == 1
slValueShort := entryValueShort
slValueShort

slShort = high >= slValueShort and pos[1] == -1

// Long take profit signals


tpValueLong1 = entryValueLong + slDistLong * 1
tpLong1 = high >= tpValueLong1 and pos[1] == 1 and tpTracker1[1] == 0
tpValueLong2 = entryValueLong + slDistLong * 2
tpLong2 = high >= tpValueLong2 and pos[1] == 1 and tpTracker2[1] == 0
tpValueLong3 = entryValueLong + slDistLong * 3
tpLong3 = high >= tpValueLong3 and pos[1] == 1 and tpTracker3[1] == 0
tpValueLong4 = entryValueLong + slDistLong * 4
tpLong4 = high >= tpValueLong4 and pos[1] == 1 and tpTracker4[1] == 0
tpValueLong5 = entryValueLong + slDistLong * 5
tpLong5 = high >= tpValueLong5 and pos[1] == 1 and tpTracker5[1] == 0

// Short take profit signals


tpValueShort1 = entryValueShort - slDistShort * 1
tpShort1 = low <= tpValueShort1 and pos[1] == -1 and tpTracker1[1] == 0
tpValueShort2 = entryValueShort - slDistShort * 2
tpShort2 = low <= tpValueShort2 and pos[1] == -1 and tpTracker2[1] == 0
tpValueShort3 = entryValueShort - slDistShort * 3
tpShort3 = low <= tpValueShort3 and pos[1] == -1 and tpTracker3[1] == 0
tpValueShort4 = entryValueShort - slDistShort * 4
tpShort4 = low <= tpValueShort4 and pos[1] == -1 and tpTracker4[1] == 0
tpValueShort5 = entryValueShort - slDistShort * 5
tpShort5 = low <= tpValueShort5 and pos[1] == -1 and tpTracker5[1] == 0
// Redefining the take profit trackers
tpTracker1 := entryLong or entryShort or slLong or slShort ? 0 : tpLong1 or
tpShort1 ? 1 : nz(tpTracker1[1])
tpTracker2 := entryLong or entryShort or slLong or slShort ? 0 : tpLong2 or
tpShort2 ? 1 : nz(tpTracker2[1])
tpTracker3 := entryLong or entryShort or slLong or slShort ? 0 : tpLong3 or
tpShort3 ? 1 : nz(tpTracker3[1])
tpTracker4 := entryLong or entryShort or slLong or slShort ? 0 : tpLong4 or
tpShort4 ? 1 : nz(tpTracker4[1])
tpTracker5 := entryLong or entryShort or slLong or slShort ? 0 : tpLong5 or
tpShort5 ? 1 : nz(tpTracker5[1])

// Position redefining
pos := entryLong ? 1 : entryShort ? -1 : tpLong5 or tpShort5 or slLong or slShort ?
0 : nz(pos[1])

plotshape(entryLong, location=location.belowbar, style=shape.labelup,


color=labelColorBuy, textcolor=color.new(color.white, 0), text='Buy')
plotshape(entryShort, location=location.abovebar, style=shape.labeldown,
color=labelColorSell, textcolor=color.new(color.white, 0), text='Sell')

// Alerts
alertcondition(entryLong, title='Buy signal')
alertcondition(entryShort, title='Sell signal')
alertcondition(tpLong1 or tpLong2 or tpLong3 or tpLong4 or tpLong5, title='Buy any
take profit signal')
alertcondition(tpShort1 or tpShort2 or tpShort3 or tpShort4 or tpShort5,
title='Sell any take profit signal')
alertcondition(slLong, title='Buy stop-loss')
alertcondition(slShort, title='Sell stop-loss')

// Labels
label entryLabel = na
label slLabel = na
label tpLabel1 = na
label tpLabel2 = na
label tpLabel3 = na
label tpLabel4 = na
label tpLabel5 = na

line entryLine = na
line slLine = na
line tpLine1 = na
line tpLine2 = na
line tpLine3 = na
line tpLine4 = na
line tpLine5 = na

if pos == 1
entryLabel := label.new(bar_index + 10, entryValueLong,
style=label.style_label_left, color=color.gray, textcolor=color.white, text='Entry:
' + str.tostring(math.round_to_mintick(entryValueLong)))
slLabel := label.new(bar_index + 10, slValueLong, style=label.style_label_left,
color=color.red, textcolor=color.white, text='Stop-loss: ' +
str.tostring(math.round_to_mintick(slValueLong)))

tpLabel1 := label.new(bar_index + 10, tpValueLong1,


style=label.style_label_left, color=color.green, textcolor=color.white, text='TP 1:
' + str.tostring(math.round_to_mintick(tpValueLong1)))

tpLabel2 := label.new(bar_index + 10, tpValueLong2,


style=label.style_label_left, color=color.green, textcolor=color.white, text='TP 2:
' + str.tostring(math.round_to_mintick(tpValueLong2)))

tpLabel3 := label.new(bar_index + 10, tpValueLong3,


style=label.style_label_left, color=color.green, textcolor=color.white, text='TP 3:
' + str.tostring(math.round_to_mintick(tpValueLong3)))

tpLabel4 := label.new(bar_index + 10, tpValueLong4,


style=label.style_label_left, color=color.green, textcolor=color.white, text='TP 4:
' + str.tostring(math.round_to_mintick(tpValueLong4)))

tpLabel5 := label.new(bar_index + 10, tpValueLong5,


style=label.style_label_left, color=color.green, textcolor=color.white, text='TP 5:
' + str.tostring(math.round_to_mintick(tpValueLong5)))

entryLine := line.new(bar_index - 1, entryValueLong, bar_index + 10,


entryValueLong, color=color.gray)

slLine := line.new(bar_index - 1, slValueLong, bar_index + 10, slValueLong,


color=color.red)

tpLine1 := line.new(bar_index - 1, tpValueLong1, bar_index + 10, tpValueLong1,


color=color.green)
tpLine2 := line.new(bar_index - 1, tpValueLong2, bar_index + 10, tpValueLong2,
color=color.green)
tpLine3 := line.new(bar_index - 1, tpValueLong3, bar_index + 10, tpValueLong3,
color=color.green)
tpLine4 := line.new(bar_index - 1, tpValueLong4, bar_index + 10, tpValueLong4,
color=color.green)
tpLine5 := line.new(bar_index - 1, tpValueLong5, bar_index + 10, tpValueLong5,
color=color.green)
tpLine5

if pos == -1
entryLabel := label.new(bar_index + 10, entryValueShort,
style=label.style_label_left, color=color.gray, textcolor=color.white, text='Entry:
' + str.tostring(math.round_to_mintick(entryValueShort)))

slLabel := label.new(bar_index + 10, slValueShort,


style=label.style_label_left, color=color.red, textcolor=color.white, text='Stop-
loss: ' + str.tostring(math.round_to_mintick(slValueShort)))

tpLabel1 := label.new(bar_index + 10, tpValueShort1,


style=label.style_label_left, color=color.green, textcolor=color.white, text='TP 1:
' + str.tostring(math.round_to_mintick(tpValueShort1)))

tpLabel2 := label.new(bar_index + 10, tpValueShort2,


style=label.style_label_left, color=color.green, textcolor=color.white, text='TP 2:
' + str.tostring(math.round_to_mintick(tpValueShort2)))
tpLabel3 := label.new(bar_index + 10, tpValueShort3,
style=label.style_label_left, color=color.green, textcolor=color.white, text='TP 3:
' + str.tostring(math.round_to_mintick(tpValueShort3)))

tpLabel4 := label.new(bar_index + 10, tpValueShort4,


style=label.style_label_left, color=color.green, textcolor=color.white, text='TP 4:
' + str.tostring(math.round_to_mintick(tpValueShort4)))

tpLabel5 := label.new(bar_index + 10, tpValueShort5,


style=label.style_label_left, color=color.green, textcolor=color.white, text='TP 5:
' + str.tostring(math.round_to_mintick(tpValueShort5)))

entryLine := line.new(bar_index - 1, entryValueShort, bar_index + 10,


entryValueShort, color=color.gray)

slLine := line.new(bar_index - 1, slValueShort, bar_index + 10, slValueShort,


color=color.red)

tpLine1 := line.new(bar_index - 1, tpValueShort1, bar_index + 10,


tpValueShort1, color=color.green)
tpLine2 := line.new(bar_index - 1, tpValueShort2, bar_index + 10,
tpValueShort2, color=color.green)
tpLine3 := line.new(bar_index - 1, tpValueShort3, bar_index + 10,
tpValueShort3, color=color.green)
tpLine4 := line.new(bar_index - 1, tpValueShort4, bar_index + 10,
tpValueShort4, color=color.green)
tpLine5 := line.new(bar_index - 1, tpValueShort5, bar_index + 10,
tpValueShort5, color=color.green)
tpLine5

label.delete(entryLabel[1])
label.delete(slLabel[1])
label.delete(tpLabel1[1])
label.delete(tpLabel2[1])
label.delete(tpLabel3[1])
label.delete(tpLabel4[1])
label.delete(tpLabel5[1])

line.delete(entryLine[1])
line.delete(slLine[1])
line.delete(tpLine1[1])
line.delete(tpLine2[1])
line.delete(tpLine3[1])
line.delete(tpLine4[1])
line.delete(tpLine5[1])

showDashboard = input.bool(true, title='Enable dashboard', inline='dashboard')


dashboardType = input.string('Simple dashboard', title='', options=['Simple
dashboard', 'Advanced dashboard'], inline='dashboard')

xDashBoard = input.int(80, 'dashboard distance', minval=20, maxval=1000, step=10)

// Security function
secSMA(_res) =>
request.security(syminfo.tickerid, showDashboard ? _res : timeframe.period,
ta.sma(ohlc4, 200) < close, lookahead=barmerge.lookahead_on)

//}

advDash = dashboardType == 'Advanced dashboard'

// Simple dashboard has the following timeframes in it


// 1. Current
trendCurrent = ta.sma(close, 200) < close ? 'Bullish ??' : 'Bearish ??'

// 2. 15min
trend15min = secSMA(showDashboard ? '15' : '15') ? 'Bullish ??' : 'Bearish ??'

// 3. 1hr
trend1hr = secSMA(showDashboard ? '60' : '15') ? 'Bullish ??' : 'Bearish ??'

// 4. 4hr
trend4hr = secSMA(showDashboard ? '240' : '15') ? 'Bullish ??' : 'Bearish ??'

// 5. 1D
trend1d = secSMA(showDashboard ? '1D' : '15') ? 'Bullish ??' : 'Bearish ??'

// Advanced dashboard trends


// 1. 1min
trend1min = secSMA(advDash and showDashboard ? '1' : '15') ? 'Bullish ??' :
'Bearish ??'

// 2. 3min
trend3min = secSMA(advDash and showDashboard ? '3' : '15') ? 'Bullish ??' :
'Bearish ??'

// 3. 5min
trend5min = secSMA(advDash and showDashboard ? '5' : '15') ? 'Bullish ??' :
'Bearish ??'

// 4. 10min
trend10min = secSMA(advDash and showDashboard ? '10' : '15') ? 'Bullish ??' :
'Bearish ??'

// 5. 30min
trend30min = secSMA(advDash and showDashboard ? '30' : '15') ? 'Bullish ??' :
'Bearish ??'

// 6. 2hr
trend12hr = secSMA(advDash and showDashboard ? '720' : '15') ? 'Bullish ??' :
'Bearish ??'

// 7. 12hr
trend2hr = secSMA(advDash and showDashboard ? '120' : '15') ? 'Bullish ??' :
'Bearish ??'
// Last signal
lastSignalInt = 0
lastSignalInt := entryLong ? 1 : entryShort ? -1 : nz(lastSignalInt[1])
lastSignal = lastSignalInt == 1 ? 'Buy ??' : 'Sell ??'

rsiTrend = ta.rsi(close, 14)

// RSI condition
rsiCond = rsiTrend < 30 ? 'Oversold (' + str.tostring(math.round(rsiTrend, 2)) + ')
??' : rsiTrend > 70 ? 'Overbought (' + str.tostring(math.round(rsiTrend, 2)) +
') ??' : 'Healthy (' + str.tostring(math.round(rsiTrend, 2)) + ') ?'

// ATR function
atrTrend = ta.atr(14)
atrTrendCond = atrTrend > ta.ema(ta.sma(atrTrend, 100), 100) ? 'Trending ??' :
'Ranging ???'

btime = int(ta.sma(time - time[1], 50))

label dashboard = na

if showDashboard
dashboard := label.new(x=time + btime * xDashBoard, y=(ta.highest(20) +
ta.lowest(20)) / 2, text='???????????? ????????' + '\n\nCurrent position: ' +
lastSignal + '\nCurrent trend: ' + trendCurrent + '\nPrice condition: ' + rsiCond +
'\nVolume: ' + str.tostring(math.round(volume * close, 2)) + ' ' + syminfo.currency
+ '\nVolatility: ' + atrTrendCond + '\n\n---------------------------' + '\
nTimeframe trends ??' + (advDash ? '\n\n1min: ' + trend1min : '') + (advDash ? '\
n3min: ' + trend3min : '') + (advDash ? '\n5min: ' + trend5min : '') + (advDash ?
'\n10min: ' + trend10min : '') + '\n15min: ' + trend15min + (advDash ? '\n30min: '
+ trend30min : '') + '\n1hr: ' + trend1hr + (advDash ? '\n2hr: ' + trend2hr : '') +
'\n4hr: ' + trend4hr + (advDash ? '\n12hr: ' + trend12hr : '') + '\nDaily: ' +
trend1d, color=#1E1E1E, textcolor=#C0C0C0, style=label.style_label_left,
xloc=xloc.bar_time, yloc=yloc.price, textalign=text.align_left)
dashboard

label.delete(dashboard[1])

You might also like