Indicator · Pine Script v5 · On the chart

Position Sizes

by etnt· code credited to kruskakli

Position Sizes is an overlay indicator that calculates risk-managed trade sizing based on account size and risk percentage parameters.

View on GitHub

GitHub stars2on the repository
Pine versionv5runs as is
Lines of code361
Settings17inputs
LicenceMPL-2.0
Last update1 year ago3 Aug 2025

Add It to Your TradingView Chart

  1. 1Copy the scriptPress Copy script above, or the copy button on the code below.
  2. 2Open the Pine EditorOpen a TradingView chart and choose Pine Editor at the bottom of the screen.
  3. 3Paste over the templateCreate a new indicator, select all of the template text and paste. Press Save and give it a name.
  4. 4Add it to the chartPress Add to chart, then adjust the settings with the gear icon next to its name.

Source Code

361 lines of Pine Script v5 from PineScript/position-sizes.pine, published under MPL-2.0. Keep the author's credit and licence lines when you reuse it.

position-sizes.pine
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © kruskakli
//
// When trading, position sizing and risk calculation is the key to become successful.
// 
// We need to keep the losses small and adjust the position size according to what
// risk we are prepared to take for the planned Entry.
//
// Based on the Account Size and the max percentage we want to risk for any trade,
// we calculate, for a number of fixed max Loss percentages:
//
//  - The Position size, both in percent and in the selected currency.
//  - Number of shares to buy.
//  - Where to put the Stop Loss.
//  - Where a 1RTP (1 Risk amount Take Profit) level could be put .
//
// We also calculate the numbers based on the ATR times a multiple.
//
// The values are presented in a table format and will hopefully aid in selecting
// a suitable Stop Loss (based on the chart sutuation) and hence the proper Position Size.
//
// We also allow for expressing the Account size in currencies other than USD.
// Example:
//
//   Account Size in USD and trading US stocks: select USD
//   Account Size in SEK but trading US stocks: select USDSEK
//
//
//@version=5
indicator('Position Sizes', overlay=true)

kaki1 = color.new(#fff68f, 0)

text_sz = size.small

src = close

// Change in percent
cpt(_x, _x1) =>
    _cpt = (_x / _x1 - 1) * 100
    _cpt

// Which account to display.
whatAccount = input.string(title='Display Account', defval='Account 1', options=['Account 1', 'Account 2'])
useAccount = whatAccount == 'Account 1' ? 1 : 2

//
// Account 1
//
accSize = input.int(20000, title='Account 1 Size', group='Account 1')
accountRiskPercent_in = input.float(0.5, title='Account 1 Risk Size (%)', group='Account 1')
accountRiskPercent = accountRiskPercent_in / 100

convert = input.string(title='Convert to USD', defval='USD', group='Account 1', options=['EURSEK', 'USDSEK', 'USDEUR', 'USDCAD', 'USDAUD', 'USDGBP', 'USDJPY', 'USD', 'SEK', 'EUR', 'CAD', 'AUD', 'GBP', 'JPY'])
// Can't have security in an 'if'...sigh...
cur = request.security(convert, timeframe.period, close)
USDcur = float(cur)
// Convert or do not convert...?
if convert == 'USD' or convert == 'SEK' or convert == 'EUR' or convert == 'CAD' or convert == 'AUD' or convert == 'GBP' or convert == 'JPY'
    USDcur := 1.0
    USDcur


//
// Account 2
//
accSize2 = input.int(20000, title='Account 2 Size', group='Account 2')
accountRiskPercent_in2 = input.float(0.5, title='Account 2 Risk Size (%)', group='Account 2')
accountRiskPercent2 = accountRiskPercent_in2 / 100

convert2 = input.string(title='Convert to USD', defval='USD', group='Account 2', options=['EURSEK', 'USDSEK', 'USDEUR', 'USDCAD', 'USDAUD', 'USDGBP', 'USDJPY', 'USD', 'SEK', 'EUR', 'CAD', 'AUD', 'GBP', 'JPY'])
// Can't have security in an 'if'...sigh...
cur2 = request.security(convert2, timeframe.period, close)
USDcur2 = float(cur2)
// Convert or do not convert...?
if convert2 == 'USD' or convert2 == 'SEK' or convert2 == 'EUR' or convert2 == 'CAD' or convert2 == 'AUD' or convert2 == 'GBP' or convert2 == 'JPY'
    USDcur2 := 1.0
    USDcur2


//
// Input four Loss percentage levels.
//
slPercent1_in = input.float(2, title='1.Loss percent', group='Risk levels in percent')
slPercent1 = slPercent1_in / 100
slPercent1str = str.tostring(slPercent1_in)

slPercent2_in = input.float(3, title='2.Loss percent', group='Risk levels in percent')
slPercent2 = slPercent2_in / 100
slPercent2str = str.tostring(slPercent2_in)

slPercent3_in = input.float(4, title='3.Loss percent', group='Risk levels in percent')
slPercent3 = slPercent3_in / 100
slPercent3str = str.tostring(slPercent3_in)

slPercent4_in = input.float(5, title='4.Loss percent', group='Risk levels in percent')
slPercent4 = slPercent4_in / 100
slPercent4str = str.tostring(slPercent4_in)


// Calculate the Stop-Loss
sl1 = close * (1 - slPercent1)
sl1str = str.tostring(math.round(sl1, 2))

sl2 = close * (1 - slPercent2)
sl2str = str.tostring(math.round(sl2, 2))

sl3 = close * (1 - slPercent3)
sl3str = str.tostring(math.round(sl3, 2))

sl4 = close * (1 - slPercent4)
sl4str = str.tostring(math.round(sl4, 2))


// Calculate the 1R Take Profit
tp1 = close * (1 + slPercent1)
tp1str = str.tostring(math.round(tp1, 2))

tp2 = close * (1 + slPercent2)
tp2str = str.tostring(math.round(tp2, 2))

tp3 = close * (1 + slPercent3)
tp3str = str.tostring(math.round(tp3, 2))

tp4 = close * (1 + slPercent4)
tp4str = str.tostring(math.round(tp4, 2))


//
// Account 1
//

// Calculate the Position Percentage
posPercent1 = accountRiskPercent / slPercent1
posPercent1str = str.tostring(math.round(posPercent1 * 100, 2))

posPercent2 = accountRiskPercent / slPercent2
posPercent2str = str.tostring(math.round(posPercent2 * 100, 2))

posPercent3 = accountRiskPercent / slPercent3
posPercent3str = str.tostring(math.round(posPercent3 * 100, 2))

posPercent4 = accountRiskPercent / slPercent4
posPercent4str = str.tostring(math.round(posPercent4 * 100, 2))


// Calculate the Position Size
posSize1 = accSize * posPercent1 / USDcur
posSize1str = str.tostring(math.round(posSize1))

posSize2 = accSize * posPercent2 / USDcur
posSize2str = str.tostring(math.round(posSize2))

posSize3 = accSize * posPercent3 / USDcur
posSize3str = str.tostring(math.round(posSize3))

posSize4 = accSize * posPercent4 / USDcur
posSize4str = str.tostring(math.round(posSize4))


// Calculate the number of shares
noShares1 = math.floor(posSize1 / close)
noShares1str = str.tostring(noShares1)

noShares2 = math.floor(posSize2 / close)
noShares2str = str.tostring(noShares2)

noShares3 = math.floor(posSize3 / close)
noShares3str = str.tostring(noShares3)

noShares4 = math.floor(posSize4 / close)
noShares4str = str.tostring(noShares4)

//
// Account 2
//

// Calculate the Position Percentage
posPercent1_2 = accountRiskPercent2 / slPercent1
posPercent1str_2 = str.tostring(math.round(posPercent1_2 * 100, 2))

posPercent2_2 = accountRiskPercent2 / slPercent2
posPercent2str_2 = str.tostring(math.round(posPercent2_2 * 100, 2))

posPercent3_2 = accountRiskPercent2 / slPercent3
posPercent3str_2 = str.tostring(math.round(posPercent3_2 * 100, 2))

posPercent4_2 = accountRiskPercent2 / slPercent4
posPercent4str_2 = str.tostring(math.round(posPercent4_2 * 100, 2))


// Calculate the Position Size
posSize1_2 = accSize2 * posPercent1_2 / USDcur2
posSize1str_2 = str.tostring(math.round(posSize1_2))

posSize2_2 = accSize2 * posPercent2_2 / USDcur2
posSize2str_2 = str.tostring(math.round(posSize2_2))

posSize3_2 = accSize2 * posPercent3_2 / USDcur2
posSize3str_2 = str.tostring(math.round(posSize3_2))

posSize4_2 = accSize2 * posPercent4_2 / USDcur2
posSize4str_2 = str.tostring(math.round(posSize4_2))


// Calculate the number of shares
noShares1_2 = math.floor(posSize1_2 / close)
noShares1str_2 = str.tostring(noShares1_2)

noShares2_2 = math.floor(posSize2_2 / close)
noShares2str_2 = str.tostring(noShares2_2)

noShares3_2 = math.floor(posSize3_2 / close)
noShares3str_2 = str.tostring(noShares3_2)

noShares4_2 = math.floor(posSize4_2 / close)
noShares4str_2 = str.tostring(noShares4_2)



// Calculate ATR base Stop Loss.
ATRLen = input.int(defval=14, title='ATR Length', group='ATR based Risk level')
ATRMul = input.float(defval=1, title='ATR multiple', group='ATR based Risk level')
// Use ATR x Multiple to calculate the Stop Loss
ATR = ta.atr(ATRLen)
ATRpercent = 1 - (close - ATR * ATRMul) / close

ATRpercentStr = str.tostring(math.round(ATRpercent * 100, 2))
ATRslStr = str.tostring(math.round(close - ATR * ATRMul, 2))
ATRtpStr = str.tostring(math.round(close + ATR * ATRMul, 2))

//
// Account 1
//
ATRposPercent = accountRiskPercent / ATRpercent
ATRposPercentStr = str.tostring(math.round(ATRposPercent * 100, 2))

ATRposSize = accSize * ATRposPercent / USDcur
ATRposSizeStr = str.tostring(math.round(ATRposSize))

ATRnoShares = math.floor(ATRposSize / close)
ATRnoSharesStr = str.tostring(ATRnoShares)

//
// Account 2
//
ATRposPercent_2 = accountRiskPercent2 / ATRpercent
ATRposPercentStr_2 = str.tostring(math.round(ATRposPercent_2 * 100, 2))

ATRposSize_2 = accSize2 * ATRposPercent_2 / USDcur2
ATRposSizeStr_2 = str.tostring(math.round(ATRposSize_2))

ATRnoShares_2 = math.floor(ATRposSize_2 / close)
ATRnoSharesStr_2 = str.tostring(ATRnoShares_2)


//
// Construct the Table
//
tabLoc = input.string(title='Table Location', defval='Lower Right', group='Table Layout', options=['Upper Right', 'Middle Right', 'Lower Right'])
tabPos = tabLoc == 'Upper Right' ? position.top_right : tabLoc == 'Middle Right' ? position.middle_right : position.bottom_right

// User selectable colors.
text_col = input.color(title='Header Color', defval=color.yellow, group='Table Layout')
value_col = input.color(title='Value Color', defval=color.white, group='Table Layout')
atr_col = input.color(title='ATR Color', defval=kaki1, group='Table Layout')

table t = table.new(tabPos, 6, 6, frame_color=color.gray, frame_width=1, border_color=color.gray, border_width=1)

var SLP_TIP = "Stop Loss percentage."
var STP_TIP = "Where to put the Stop Loss according to the SL-percentage."
var RTP_TIP = "Where to Take Profit according to 1 Risk Unit (i.e the Stop Loss percentage)."
var POS_TIP = "Positions size in percent of Account size."
var PSZ_TIP = "Position size in money."
var NUM_TIP = "Number of shares to buy covered by the Position Size."

if barstate.islast and useAccount == 1 and timeframe.period != 'M'
    table.cell(t, 0, 0, 'SL%',   tooltip=SLP_TIP, text_halign=text.align_center, text_size=text_sz, text_color=text_col)
    table.cell(t, 1, 0, 'Stop',  tooltip=STP_TIP, text_halign=text.align_center, text_size=text_sz, text_color=text_col)
    table.cell(t, 2, 0, '1RTP',  tooltip=RTP_TIP, text_halign=text.align_center, text_size=text_sz, text_color=text_col)
    table.cell(t, 3, 0, 'Pos%',  tooltip=POS_TIP, text_halign=text.align_center, text_size=text_sz, text_color=text_col)
    table.cell(t, 4, 0, 'PosSz', tooltip=PSZ_TIP, text_halign=text.align_center, text_size=text_sz, text_color=text_col)
    table.cell(t, 5, 0, '#',     tooltip=NUM_TIP, text_halign=text.align_center, text_size=text_sz, text_color=text_col)
    //
    table.cell(t, 0, 1, slPercent1str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 1, 1, sl1str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 2, 1, tp1str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 3, 1, posPercent1str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 4, 1, posSize1str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 5, 1, noShares1str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    //
    table.cell(t, 0, 2, slPercent2str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 1, 2, sl2str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 2, 2, tp2str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 3, 2, posPercent2str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 4, 2, posSize2str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 5, 2, noShares2str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    //
    table.cell(t, 0, 3, slPercent3str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 1, 3, sl3str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 2, 3, tp3str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 3, 3, posPercent3str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 4, 3, posSize3str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 5, 3, noShares3str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    //
    table.cell(t, 0, 4, slPercent4str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 1, 4, sl4str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 2, 4, tp4str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 3, 4, posPercent4str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 4, 4, posSize4str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 5, 4, noShares4str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    //
    table.cell(t, 0, 5, ATRpercentStr, text_halign=text.align_left, text_size=text_sz, text_color=atr_col)
    table.cell(t, 1, 5, ATRslStr, text_halign=text.align_left, text_size=text_sz, text_color=atr_col)
    table.cell(t, 2, 5, ATRtpStr, text_halign=text.align_left, text_size=text_sz, text_color=atr_col)
    table.cell(t, 3, 5, ATRposPercentStr, text_halign=text.align_left, text_size=text_sz, text_color=atr_col)
    table.cell(t, 4, 5, ATRposSizeStr, text_halign=text.align_left, text_size=text_sz, text_color=atr_col)
    table.cell(t, 5, 5, ATRnoSharesStr, text_halign=text.align_left, text_size=text_sz, text_color=atr_col)

if barstate.islast and useAccount == 2 and timeframe.period != 'M'
    table.cell(t, 0, 0, 'SL%', text_halign=text.align_center, text_size=text_sz, text_color=text_col)
    table.cell(t, 1, 0, 'Stop', text_halign=text.align_center, text_size=text_sz, text_color=text_col)
    table.cell(t, 2, 0, '1RTP', text_halign=text.align_center, text_size=text_sz, text_color=text_col)
    table.cell(t, 3, 0, 'Pos%', text_halign=text.align_center, text_size=text_sz, text_color=text_col)
    table.cell(t, 4, 0, 'PosSz', text_halign=text.align_center, text_size=text_sz, text_color=text_col)
    table.cell(t, 5, 0, '#', text_halign=text.align_center, text_size=text_sz, text_color=text_col)
    //
    table.cell(t, 0, 1, slPercent1str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 1, 1, sl1str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 2, 1, tp1str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 3, 1, posPercent1str_2, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 4, 1, posSize1str_2, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 5, 1, noShares1str_2, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    //
    table.cell(t, 0, 2, slPercent2str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 1, 2, sl2str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 2, 2, tp2str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 3, 2, posPercent2str_2, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 4, 2, posSize2str_2, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 5, 2, noShares2str_2, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    //
    table.cell(t, 0, 3, slPercent3str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 1, 3, sl3str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 2, 3, tp3str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 3, 3, posPercent3str_2, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 4, 3, posSize3str_2, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 5, 3, noShares3str_2, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    //
    table.cell(t, 0, 4, slPercent4str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 1, 4, sl4str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 2, 4, tp4str, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 3, 4, posPercent4str_2, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 4, 4, posSize4str_2, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    table.cell(t, 5, 4, noShares4str_2, text_halign=text.align_left, text_size=text_sz, text_color=value_col)
    //
    table.cell(t, 0, 5, ATRpercentStr, text_halign=text.align_left, text_size=text_sz, text_color=atr_col)
    table.cell(t, 1, 5, ATRslStr, text_halign=text.align_left, text_size=text_sz, text_color=atr_col)
    table.cell(t, 2, 5, ATRtpStr, text_halign=text.align_left, text_size=text_sz, text_color=atr_col)
    table.cell(t, 3, 5, ATRposPercentStr_2, text_halign=text.align_left, text_size=text_sz, text_color=atr_col)
    table.cell(t, 4, 5, ATRposSizeStr_2, text_halign=text.align_left, text_size=text_sz, text_color=atr_col)
    table.cell(t, 5, 5, ATRnoSharesStr_2, text_halign=text.align_left, text_size=text_sz, text_color=atr_col)

Overview

Position Sizes calculates position values, required share quantities, stop-loss levels, and 1R take-profit targets across four customizable loss percentage thresholds alongside an ATR-based multiplier. The calculated metrics are rendered in an on-chart table to help traders evaluate appropriate position sizing relative to chart technicals. It supports two switchable account profiles and currency conversion rates for multi-currency trading.

Details

Published by

etnt on GitHub

Code credit

kruskakli, as written in the script's header

Type

Indicator, Pine Script v5

Draws

On the price chart

Category

Screeners & dashboards, Volatility & bands

Markets

Any symbol

Timeframes

Any timeframe

Risk Notes

No repainting, lookahead or stacked entries were found in its code or README. That says nothing about how well it works: test it first.

Settings

The inputs you can change from the gear icon on the chart. Defaults are the author's.

SettingTypeDefaultVariable
Display AccountstringAccount 1whatAccount
Account 1 Sizeint20000accSize
Account 1 Risk Size (%)float0.5accountRiskPercent_in
Convert to USDstringUSDconvert
Account 2 Sizeint20000accSize2
Account 2 Risk Size (%)float0.5accountRiskPercent_in2
Convert to USDstringUSDconvert2
1.Loss percentfloat2slPercent1_in
2.Loss percentfloat3slPercent2_in
3.Loss percentfloat4slPercent3_in
4.Loss percentfloat5slPercent4_in
ATR Lengthint14ATRLen
Show all 17 settings
SettingTypeDefaultVariable
ATR multiplefloat1ATRMul
Table LocationstringLower RighttabLoc
Header Colorcolorcolor.yellowtext_col
Value Colorcolorcolor.whitevalue_col
ATR Colorcolorkaki1atr_col
Third-party code. ForexR did not write, test or endorse this script, and the summary above was generated automatically from its code and README. Indicators describe the past, and a strategy's backtest can look better than live trading, especially when a script repaints. Check it in the Strategy Tester and on a demo account before you rely on it.

Similar Pine Scripts

This overlay indicator plots a Supertrend from an ATR length and factor, four exponential moving averages, and a selectable VWAP or TWAP taken from a chosen timeframe on the price chart. It also shows MACD and stochastic with adjustable lengths, smoothing, ver

Indicator v5 Oscillators & momentumMoving averages
Updated 1 year ago · MPL-2.0 GitHub repository of Momentum Setup: Vijay Thakare Option Buying Scalping Setup
330 stars

This multi-symbol indicator evaluates a combined trading condition across up to 40 user-defined symbols. It processes MACD bullish crossovers, RSI thresholds, Bollinger Band boundaries, and DMI/ADX trend filters using security calls. When buy or sell criteria

Indicator v5 Oscillators & momentumVolatility & bands
Updated 2 months ago · None stated GitHub repository of Multi MACD + BB + RSI [Alorse]

Pricing Table

by namuan
318 stars

This indicator calculates theoretical options contract values and in-the-money probabilities using historical realized volatility across multiple standard deviations. It displays these metrics in a table overlay directly on the price chart. Users can adjust th

Indicator v4 Volatility & bandsScreeners & dashboards
Updated 2 months ago · MIT GitHub repository of Pricing Table
218 stars

This indicator maps market structure and supply and demand zones on the price chart. It marks validated and optional unvalidated swing highs and lows using a pivot length and extra confirmation bars. Consolidation and impulse moves are measured against ATR to

Indicator v6 SMC / ICT / price actionSupport & resistance Repaints
Updated 3 months ago · None stated GitHub repository of Market Structure + Supply/Demand
200 stars

Storm Gauge calculates annualized realized volatility and compares it against a historical percentile lookback window to classify market volatility regimes into calm, normal, or storm conditions. Based on a target volatility input, it calculates dynamic positi

Indicator v5 Volatility & bandsScreeners & dashboards
Updated 3 months ago · MIT GitHub repository of Storm Gauge — Vol Regime + Position Size

8zz反指標v2

by hansai-art
121 stars

The 8zz Contrarian Indicator plots reverse sentiment trading signals directly on the price chart based on tracked retail post activity. It generates bullish signals during retail panic and bearish signals during market euphoria. The indicator features adjustab

Indicator v6 Moving averagesOscillators & momentum
Updated 3 months ago · None stated GitHub repository of 8zz反指標v2

More indicators

Trade Your Charts With a Regulated Broker

Compare brokers that connect to TradingView, with spreads, minimum deposits and leverage side by side.

Compare brokers