PineCoders

MTF Selection Framework - PineCoders FAQ

Our MTF Selection Framework allows Pine coders to add multi-timeframe capabilities to their script with the following features:

► Timeframe selection
The higher timeframe can be selected using 3 different ways:
• By steps (60 min., 1D, 3D, 1W, 1M, 1Y).
• As a multiple of the current chart's resolution, which can be fractional, so 3.5 will work.
• Fixed.

► Non-repainting or Repainting mode can be selected.

► Smoothing of the HTF line
Can be turned on/off and a smoothing factor allows the user to select the degree of smoothing he requires.

The framework is used here to create a higher timeframe version of a simple RSI line, but it can be used to access HTF information for almost any signal.


Functions used


f_resInMinutes()
Converts the current timeframe.multiplier plus the TF into minutes of type float.
• In Pine, the timeframe.multiplier is an integer representing the resolution, but a value of 1 can mean one day or one minute. This function converts that information in a standard fractional float minutes format that can then be used by the other functions in the framework.
• If the chart's current resolution is 15 seconds, the function will return 0.25. If the chart's resolution is one day, it will return 1440.

f_tfResInMinutes(_resolution)
Returns resolution of _resolution period in minutes.
• This function does the same as f_resInMinutes(), but on the target resolution supplied as a parameter in the timeframe.period string format.

f_resNextStep(_res)
Given a current resolution in fractional float minutes, returns its corresponding stepped HTF in the timeframe.period string format.
• This allows the implementation of the step HTF selection mode.

f_multipleOfRes(_res, _mult)
Given a current resolution in fractional float minutes and a fractional multiplier, returns a multiple of the resolution as a string in "timeframe.period" format usable with "security()".
• A multiple like 3.5 is allowed.
• Note that with seconds resolutions, the result returned is constrained by the discrete seconds resolutions available on TV.

f_htfLabel(_txt, _y, _color)
Used to display a label showing either:
• A warning when the chart's resolution is not lower than the HTF.
• The HTF resolution currently used.
The y position used to position the label will require adaptation to the signal you are using. For use in "overlay = true" mode, a technique that works well is commented out in the code.

Jan 26
Release Notes: Updated comments and label function.
Jan 26
Release Notes: Fixed alignment in code.
Jan 27
Release Notes: Changed variable name in label function.
Jan 27
Release Notes: Optimized f_tfResInMinutes(_resolution). Thanks to MichelT!
Jan 27
Release Notes: Typo. Thx scarf!
Jan 31
Release Notes: .
• Added steps to the shorter TFs in f_resNextStep(). The steps are now: 15 min., 60 min., 4H, 1D, 3D, 1W, 1M, 1Y.
• Also added a compact version of the functions at the end of the script, which uses only 7 lines.
Feb 01
Release Notes: .
Added one function:
f_resFromMinutes(_minutes)
Given a resolution in fractional float minutes, returns it as a string in "timeframe.period" format usable with "security()".
Feb 17
Release Notes: Added 2 functions:
f_theoreticalDilationOf(_res)
f_avgDilationOf(_res)
They return the theoretical and the average number of chart bars (the dilation) in the higher resolution. The average number will vary because of non-trading period or irregularities in datasets.
Remove from Favorite Scripts Add to Favorite Scripts

Comments

awesome, thanks LucF!
+1 Reply
Always amazed by your work! Thanks so much for sharing!
+1 Reply
Looks nice! Is it possible to plot warning text if the user selects a TF lower than the chart TF?
Reply
PineCoders coininvestor
@coininvestor, Yes. Look at lines 117-118.
+1 Reply
Beautiful work my friend
Reply
The new "Volatility Stop MTF" published by the @TradingView account uses this framework, btw. It demonstrates how to use "security()" in conjunction with a function returning a tuple (more than one result).
Reply
LucF, quick question,

When you need to code for each variable in your script 2 securitycalls() to get it into HigherTimeframe.... Then you bump into the problem of too many securitycall() in your script.

Do you have an idea how to prevent this,.... so is there a more generic manner??

==> talking about this line: ..... rHtf = not vHtfOn ? r : vHtfRepaints ? security(syminfo.tickerid, vHtf, r) : security(syminfo.tickerid, vHtf, r, lookahead = barmerge.lookahead_on)
Reply
@GeVe, The only ways I know of will be:
1. Eliminate one of the 2, so either hard-code whether you are repainting or not.
2. Use this structure to control repainting:
// —————————— Alternate but more complex way of avoiding repainting using barmerge.lookahead_off.
// It is also possible to avoid repainting using "lookahead_off" (the default in v3 and v4), but we then need to include logic 
//   to use different "security()" calls for historical and real-time bars, so it's more complicated:
//      1. for the REALTIME bar we use:  security(syminfo.tickerid, higherTf, data[1])
//      2. for HISTORICAL bars we use:   security(syminfo.tickerid, higherTf, data)[1]
indexHighTf = barstate.isrealtime ? 1 : 0
indexCurrTf = barstate.isrealtime ? 0 : 1
sec2ff = security(syminfo.tickerid, higherTf, data[indexHighTf])[indexCurrTf]

which is taken from here:
Reply
@allanster @wroclai @GeVe @idrisbengali Thank you all for your good words. They are important. Happy to be useful and help you MTF away!
Reply
Home Stock Screener Forex Screener Crypto Screener Economic Calendar How It Works Chart Features Pricing Refer a friend House Rules Help Center Website & Broker Solutions Widgets Charting Solutions Lightweight Charting Library Blog & News Twitter
Profile Profile Settings Account and Billing Refer a friend My Support Tickets Help Center Ideas Published Followers Following Private Messages Chat Sign Out