Editors' picksOPEN-SOURCE SCRIPT

In specific circumstances, it is possible to extract data, far above the 40 `request.*()` call limit for 1 single script .

The following technique uses composite tickers. Changing tickers needs to be done in the code itself as will be explained further.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

🔶**PRINCIPLE**

Standard example:

This will give the*close* value from 1 ticker (MTLUSDT); c1 for example is 1.153

Now let's add 2 tickers to MTLUSDT; XMRUSDT and ORNUSDT with, for example, values of 1.153 (I), 143.4 (II) and 0.8242 (III) respectively.

Just adding them up 'MTLUSDT+XMRUSDT+ORNUSDT' would give 145.3772 as a result, which is not something we can use...

Let's multiply ORNUSDT by 100 -> 14340

and multiply MTLUSDT by 1000000000 -> 1153000000 (from now, 10e8 will be used instead of 1000000000)

Then we make the sum.

When we put this in a security call (just the close value) we get:

'MTLUSDT*10e8+XMRUSDT*100+ORNUSDT' -> 1153000000 + 14340 + 0.8242 = 1153014340.8242 (a)

This (a) will be split later on, for example:

1153014330.8242 / 10e8 = 1.1530143408242 -> round -> in this case to 1.153 (I), multiply again by 10e8 -> 1153000000.00 (b)

We subtract this from the initial number:

1153014340.8242 (a)

- 1153000000.0000 (b)

–––––––––––––––––

14340.8242 (c)

Then -> 14340.8242 / 100 = 143.408242 -> round -> 143.4 (II) -> multiply -> 14340.0000 (d)

-> subtract

14340.8242 (c)

- 14340.0000 (d)

––––––––––––

0.8242 (III)

Now we have split the number again into 3 tickers: 1.153 (I), 143.4 (II) and 0.8242 (III)

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

In this publication the function*compose_3_()* will make a composite ticker of 3 tickers, and the *split_3_()* function will split these 3 tickers again after passing 1 *request.security()* call.

In this example:

🔶**CHANGING TICKERS**

If you need to change tickers, you**only** have to change the first part of the script, *USER DEFINED TICKERS*

Back to our example, at line 26 in the code, you'll find:

(*t46*, *T16*,... will be explained later)

You need to figure out how much you need to multiply each ticker, and the number for rounding, to get a good result.

In this case:

'BINANCE:MTLUSDT', multiply number = 10e8, round number is 3 (example value 1.153)

'BINANCE:XMRUSDT', multiply number = 10e1, round number is 1 (example value 143.4)

'BINANCE:ORNUSDT', NO multiply number, round number is 4 (example value 0.8242)

The value with most digits after the decimal point by preference is placed to the right side (ORNUSDT)

If you want to change these 3, how would you do so?

First pick your tickers and look for the round values, for example:

'MATICUSDT', example value = 0.5876 -> round -> 4

'LTCUSDT' , example value = 77.47 -> round -> 2

'ARBUSDT' , example value = 1.0231 -> round -> 4

Value with most digits after the decimal point -> MATIC or ARB, let's pick ARB to go on the right side, LTC at the left of ARB, and MATIC at the most left side.

-> 'MATICUSDT', LTCUSDT', ARBUSDT'

Then check with how much 'LTCUSDT' and 'MATICUSDT' needs to be multiplied to get this:*5876 0 7747 0 1.0231*

'MATICUSDT' -> 10e10

'LTCUSDT' -> 10e3

Replace:

->

DO NOT change anything at t46, n46,... if you don't know what you're doing!

Only

• tickers ('BINANCE:MTLUSDT', 'BINANCE:XMRUSDT', 'BINANCE:ORNUSDT', ...),

• multiply numbers (10e8, 10e1, ...) and

• round numbers (3, 1, 4, ...)

should be changed.

There you go!

🔶**LIMITATIONS**

🔹 The composite ticker fails when 1 of the 3 isn't in market in the weekend, while the other 2 are.

That is the reason all tickers are crypto. I think it is possible to combine stock,... tickers, but they have to share the same market hours.

🔹 The number cannot be as large as you want, the limit lays around 15-16 digits.

This means when you have for example 123, 45.67 and 0.000000000089, you'll get issues when composing to this:

-> 123045670.000000000089 (21 digits)

Make sure the numbers are close to each other as possible, with 1 zero (or 2) in between:

-> 1.230045670089 (13 digits by doing -> (123 * 10e-3) + (45.67 * 10e-7) + 0.000000000089)

🔹 This script contains examples of calculated values, % change, SMA, RMA and RSI.

These values need to be calculated from HTF*close* data at current TF (timeframe).

This gives challenges. For example the*SMA* / *%change* is not a problem (same values at 1h TF from Daily data).

*RMA*, *RSI* is not so easy though...

Daily values are rather similar on a 2-3h TF, but 1h TF and lower is quite different.

At the moment I haven't figured out why, if someone has an idea, don't hesitate to share.

The main goal of this publication is 'composite tickers ~ request.security()' though.

🔹 When a ticker value changes substantially (x10, x100), the multiply number needs to be adjusted accordingly.

🔶**SETTINGS**

🔶**OTHER TECHNIQUES**

• REGEX (Regular expression) and str.match() is used to delete the exchange name from the ticker, in other words, everything before ":" is deleted by following regex:

• To sort, array.sort_indices() is used (line 675 in the code), just as in my first "sort" publication Sort array alphabetically - educational

• Numbers and text colour will adjust automatically when switching between light/dark mode by using chart.fg_color / chart.bg_color

🔹**DISCLAIMER**

Please don't ask me for custom screeners, thank you.

The following technique uses composite tickers. Changing tickers needs to be done in the code itself as will be explained further.

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

🔶

Standard example:

This will give the

Now let's add 2 tickers to MTLUSDT; XMRUSDT and ORNUSDT with, for example, values of 1.153 (I), 143.4 (II) and 0.8242 (III) respectively.

Just adding them up 'MTLUSDT+XMRUSDT+ORNUSDT' would give 145.3772 as a result, which is not something we can use...

Let's multiply ORNUSDT by 100 -> 14340

and multiply MTLUSDT by 1000000000 -> 1153000000 (from now, 10e8 will be used instead of 1000000000)

Then we make the sum.

When we put this in a security call (just the close value) we get:

'MTLUSDT*10e8+XMRUSDT*100+ORNUSDT' -> 1153000000 + 14340 + 0.8242 = 1153014340.8242 (a)

This (a) will be split later on, for example:

1153014330.8242 / 10e8 = 1.1530143408242 -> round -> in this case to 1.153 (I), multiply again by 10e8 -> 1153000000.00 (b)

We subtract this from the initial number:

1153014340.8242 (a)

- 1153000000.0000 (b)

–––––––––––––––––

14340.8242 (c)

Then -> 14340.8242 / 100 = 143.408242 -> round -> 143.4 (II) -> multiply -> 14340.0000 (d)

-> subtract

14340.8242 (c)

- 14340.0000 (d)

––––––––––––

0.8242 (III)

Now we have split the number again into 3 tickers: 1.153 (I), 143.4 (II) and 0.8242 (III)

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

In this publication the function

In this example:

🔶

If you need to change tickers, you

Back to our example, at line 26 in the code, you'll find:

(

You need to figure out how much you need to multiply each ticker, and the number for rounding, to get a good result.

In this case:

'BINANCE:MTLUSDT', multiply number = 10e8, round number is 3 (example value 1.153)

'BINANCE:XMRUSDT', multiply number = 10e1, round number is 1 (example value 143.4)

'BINANCE:ORNUSDT', NO multiply number, round number is 4 (example value 0.8242)

The value with most digits after the decimal point by preference is placed to the right side (ORNUSDT)

If you want to change these 3, how would you do so?

First pick your tickers and look for the round values, for example:

'MATICUSDT', example value = 0.5876 -> round -> 4

'LTCUSDT' , example value = 77.47 -> round -> 2

'ARBUSDT' , example value = 1.0231 -> round -> 4

Value with most digits after the decimal point -> MATIC or ARB, let's pick ARB to go on the right side, LTC at the left of ARB, and MATIC at the most left side.

-> 'MATICUSDT', LTCUSDT', ARBUSDT'

Then check with how much 'LTCUSDT' and 'MATICUSDT' needs to be multiplied to get this:

'MATICUSDT' -> 10e10

'LTCUSDT' -> 10e3

Replace:

->

DO NOT change anything at t46, n46,... if you don't know what you're doing!

Only

• tickers ('BINANCE:MTLUSDT', 'BINANCE:XMRUSDT', 'BINANCE:ORNUSDT', ...),

• multiply numbers (10e8, 10e1, ...) and

• round numbers (3, 1, 4, ...)

should be changed.

There you go!

🔶

🔹 The composite ticker fails when 1 of the 3 isn't in market in the weekend, while the other 2 are.

That is the reason all tickers are crypto. I think it is possible to combine stock,... tickers, but they have to share the same market hours.

🔹 The number cannot be as large as you want, the limit lays around 15-16 digits.

This means when you have for example 123, 45.67 and 0.000000000089, you'll get issues when composing to this:

-> 123045670.000000000089 (21 digits)

Make sure the numbers are close to each other as possible, with 1 zero (or 2) in between:

-> 1.230045670089 (13 digits by doing -> (123 * 10e-3) + (45.67 * 10e-7) + 0.000000000089)

🔹 This script contains examples of calculated values, % change, SMA, RMA and RSI.

These values need to be calculated from HTF

This gives challenges. For example the

Daily values are rather similar on a 2-3h TF, but 1h TF and lower is quite different.

At the moment I haven't figured out why, if someone has an idea, don't hesitate to share.

The main goal of this publication is 'composite tickers ~ request.security()' though.

🔹 When a ticker value changes substantially (x10, x100), the multiply number needs to be adjusted accordingly.

🔶

- SHOW SETS
- SET

•*Length*: length of SMA, RMA and RSI

•*HTF*: Higher TimeFrame (default Daily) - TABLE

•*Size table*: \ _ Self-explanatory

•*Include exchange name*: /

•*Sort*: If exchange names are shown, the*exchanges*will be sorted first - COLOURS

•*CH%*

•*RSI*

•*SMA (RMA)* - DEBUG

Remember*t46*,*T16*,... ?

This can be used for debugging/checking**ALWAYS DISABLE**"*sort*" when doing so.

Example:*Set string*->*T1*(tickers FIL, CAKE, SOL)

(Numbers are slightly different due to time passing by between screen captures)

Placing your tickers at the side panel makes it easy to compare with the printed label below the table (right side,*332201415014.45*),

together with the line*T1*in the script:

FIL : 3.322

CAKE: 1.415

SOL : 14.56

Now it is easy to check whether the tickers are placed close enough to each other, with 1-2 zero's in between.

If you want to check a specific ticker, use "*Show Ticker"*, see out initial example:*Set string*->*T16**Show ticker*->*46*(in the code ->*t46*= 'BINANCE:MTLUSDT')

(Set at**0**to disable "*check string*" and**NONE**to disable "*Set string*")

-> Debug/check/set away! 😀

🔶

• REGEX (Regular expression) and str.match() is used to delete the exchange name from the ticker, in other words, everything before ":" is deleted by following regex:

• To sort, array.sort_indices() is used (line 675 in the code), just as in my first "sort" publication Sort array alphabetically - educational

• Numbers and text colour will adjust automatically when switching between light/dark mode by using chart.fg_color / chart.bg_color

🔹

Please don't ask me for custom screeners, thank you.

In true TradingView spirit, the author of this script has published it open-source, so traders can understand and verify it. Cheers to the author! You may use it for free, but reuse of this code in publication is governed by House rules. You can favorite it to use it on a chart.

LuxAlgo Dev: luxalgo.com

PineCoder: pinecoders.com

- We cannot control our emotions,

but we can control our keyboard -

PineCoder: pinecoders.com

- We cannot control our emotions,

but we can control our keyboard -

The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.