Editors' Picks
PINE LIBRARY
Aktualisiert

Motion

3 184
▮ FEATURES
  • Now as library version :)
  • String-based transition-effects
  • Performance optimization. Reduced memory consumption up to >90% by kicking the output to the "stdout".
  • Use marquee- or loader-effect on any possible string location.


Example: UI Price-Ticker
[CLX][#01] Animation - Price Ticker (Marquee)


----------------------------------------------------------------------------

Library "Motion"

_getStringMono(_len, _str, _sep)
  Parameters:
    _len
    _str
    _sep

marquee(this, _extern, _ws, _subLen, _subStart)
  Parameters:
    this
    _extern
    _ws
    _subLen
    _subStart

transition(this, _subLen, _subStart)
  Parameters:
    this
    _subLen
    _subStart

hold(this)
  Parameters:
    this

keyframe
  keyframe A keyframe object.
  Fields:
    seq
    intv
    step
    length
    update_no
    frame_no
    ltr
    hold
Versionshinweise
▮ v2
  • Bug fix: Removed "typo" in str.format().
  • Bug fix: Removed "out of bounds" on string length change.
  • Updated: User inputs.
  • New: Changelog.


👀 STILL UNDER DEVELOPMENT! Frequently updated!

Added:
nz(_src, _replacement)
  Parameters:
    _src
    _replacement

Updated:
keyframe
  keyframe A keyframe object.
  Fields:
    seq
    intv
    step
    length
    update_no
    frame_no
    pointer
    ltr
    hold
Versionshinweise
v3
  • Bug fix: The `_ws` whitespace parameter in the marquee function should now working like expected. Thx to HeWhoMustNotBeNamed
Versionshinweise
v4
▮ v4
  • Removed unnecessary exports


    • Removed:
      nz(_src, _replacement)

      _getStringMono(_len, _str, _sep)
Versionshinweise
v5
Versionshinweise
v6

Added:
start(this)
  Parameters:
    this

stop(this)
  Parameters:
    this

toggle(this)
  Parameters:
    this

reset(this)
  Parameters:
    this

reverse(this)
  Parameters:
    this

transition
  transition A transition object.
  Fields:
    fx
    max_loops
    sub_start
    sub_length
    refill
    external_seq
    type
    dir
    side

Updated:
transition(this, _fx, _maxLoops, _subLen, _subStart, _ltr, _autoplay, _refill, _series)
  Parameters:
    this
    _fx
    _maxLoops
    _subLen
    _subStart
    _ltr
    _autoplay
    _refill
    _series

keyframe
  keyframe A keyframe object.
  Fields:
    seq
    ws
    intv
    step
    update_no
    frame_no
    loop_no
    length
    pointer
    ltr
    __transition
    execution
    setup

Removed:
marquee(this, _extern, _ws, _subLen, _subStart)

hold(this)
Versionshinweise
v7
Versionshinweise
v8

Updated:
keyframe
  keyframe A keyframe object.
  Fields:
    seq
    ws
    intv
    step
    fx
    max_loops
    sub_start
    sub_length
    refill
    ltr
    external_seq
    type
    dir
    side
    update_no
    frame_no
    loop_no
    length
    pointer
    execution
    setup

Removed:
transition
  transition A transition object.

Bug Fixes:
-- LTR & Placeholder feature should now working like expected.
Versionshinweise
▮ v9 Major Upgrade

This update is a major upgrade to the library. The library now uses a more object-oriented approach, while the exported functions are now more user-friendly. Additional string effects are added.

Updated:
transition()
keyframe

New Secondary Functions:
prev(this, _skip)
next(this, _skip)

New Simplified Functions:
marquee(this, _seq, _ws, _maxLoops, _ltr)
slideInLeft(this, _seq, _ws, _maxLoops, _refill)
slideOutLeft(this, _seq, _ws, _maxLoops, _refill)
slideInRight(this, _seq, _ws, _maxLoops, _refill)
slideOutRight(this, _seq, _ws, _maxLoops, _refill)
blink(this, _seq, _ws, _maxLoops)

Also refactored most of the utility functions.

================================================================================

▮ Setup

To use this library in your scripts, you must first import it. To do this, add the following line to the top of your script:

Pine Script®
import cryptolinx/Motion/1 as motion


Next, create a `keyframe` object by using the `varip` keyword.

Pine Script®
varip myKeyframe = motion.keyframe.new(_intv = 1, _steps = 1,)


Based on your needs, you can now use one of the simplified functions to create a transition effect, or you can use the `transition()` or `iteration()` function to create a custom transition effect.

Simplified Functions:

(direct output)

Pine Script®
// motion.marquee(keyframe myKeyframe, string _seq, int _ws, int _maxLoops, bool _ltr) motion.marquee(myKeyframe, 'Hello World!', 3, 0) // 0 = infinite loops // motion.slideInLeft(keyframe myKeyframe, string _seq, int _ws, int _maxLoops, bool _refill) motion.slideInLeft(myKeyframe, 'Hello World!', 3, 0) // 0 = infinite loops // motion.slideOutLeft(keyframe myKeyframe, string _seq, int _ws, int _maxLoops, bool _refill) motion.slideOutLeft(myKeyframe, 'Hello World!', 3, 0) // 0 = infinite loops // motion.slideInRight(keyframe myKeyframe, string _seq, int _ws, int _maxLoops, bool _refill) motion.slideInRight(myKeyframe, 'Hello World!', 3, 0) // 0 = infinite loops // motion.slideOutRight(keyframe myKeyframe, string _seq, int _ws, int _maxLoops, bool _refill) motion.slideOutRight(myKeyframe, 'Hello World!', 3, 0) // 0 = infinite loops // motion.blink(keyframe myKeyframe, string _seq, int _ws, int _maxLoops) motion.blink(myKeyframe, 'Hello World!', 3, 0) // 0 = infinite loops


(indirect output)

Pine Script®
// After you create a transition, you can use the output field of the `keyframe` object to output the result // motion.marquee(myKeyframe, 'Hello World!', 3, 0) myKeyframe.output


Note: The transition() function doesn't store anything at the output field, to not overload the object with unnecessary long varip string data.

Example advanced transition() usage:
[CLX][#01] Animation - Price Ticker (Marquee)


================================================================================

Here are some numbers about the update frequency:
Snapshot
Versionshinweise
v10

- code improvements
- bug fixes
- new fx
Versionshinweise
🚀 v11

- new motion color_gradient() fx
- new fadeIn/Out() fx
- added missing simplified blend-effects

📑 ADDED
color_gradient(this, _color_from, _color_to, _transp_from, _transp_to, _steps, _maxLoops, _resetOnEveryBar, _autoplay, _cycle, _timerType, _timerMu, _timerStart, _timerMode)
// --
fadeIn(this, _color_from, _color_to, _steps, _transp_from, _transp_to, _maxLoops, _timerType)
fadeOut(this, _color_from, _color_to, _steps, _transp_from, _transp_to, _maxLoops, _timerType)
// --
blendInLeft(this, _seq, _ws, _maxLoops, _refill, _timerType)
blendOutLeft(this, _seq, _ws, _maxLoops, _refill, _timerType)
blendInRight(this, _seq, _ws, _maxLoops, _refill, _timerType)
blendOutRight(this, _seq, _ws, _maxLoops, _refill, _timerType)


📑 UPDATED:
marquee(this, _seq, _ws, _maxLoops, _ltr, _timerType)
// --
blink(this, _seq, _ws, _maxLoops, _timerType)
// --
slideInLeft(this, _seq, _ws, _maxLoops, _refill, _timerType)
slideOutLeft(this, _seq, _ws, _maxLoops, _refill, _timerType)
slideInRight(this, _seq, _ws, _maxLoops, _refill, _timerType)
slideOutRight(this, _seq, _ws, _maxLoops, _refill, _timerType)
Versionshinweise
🎬 Motion Library - Dynamic Transitions & Animations for Pine Script™

📢 ABOUT

Motion is a powerful animation library designed to bring your Pine Script™ charts to life. Generate smooth transition effects for strings, colors, and positions with per-tick updates. Whether you need scrolling marquees, color gradients, or dynamic label movements — Motion delivers with user-friendly APIs and optimal performance.

FEATURES

🎯 Content FX (Text Effects)
• [c]marquee[/c] — Scrolling text effect (like HTML marquee)
• [c]spot[/c] — Spotlight effect highlighting portions of text
• [c]blink[/c] — Flashing/blinking text visibility toggle
• [c]slide_in_left[/c] / [c]slide_in_right[/c] — Text slides in from sides
• [c]slide_out_left[/c] / [c]slide_out_right[/c] — Text slides out to sides
• [c]blend_in_left[/c] / [c]blend_in_right[/c] — Fade in from sides
• [c]blend_out_left[/c] / [c]blend_out_right[/c] — Fade out to sides
• [c]show[/c] / [c]hide[/c] — Simple visibility control

🎨 Style FX (Color Effects)
• [c]gradient()[/c] — Smooth color transitions between any colors
• [c]fade()[/c] — Fade colors in/out with transparency control
• [c]fade_in()[/c] / [c]fade_out()[/c] — Simplified fade helpers

📍 Position FX (Movement Effects)
• [c]movement()[/c] — Move labels/lines along custom paths
• [c]move()[/c] — Simplified position manipulation

📊 Easing Functions
• [c]linear[/c] — Constant speed
• [c]ease[/c] — Smooth acceleration/deceleration
• [c]ease_in[/c] — Slow start, fast end
• [c]ease_out[/c] — Fast start, slow end
• [c]progressive[/c] — Accelerating progression
• [c]exponential[/c] — Exponential growth curve
• [c]fibonacci[/c] — Based on fibonacci sequence ratios

🔧 TWO WAYS TO USE

🅿️ Primitive Method (Frameworkless)
Ultra-lightweight, zero overhead for simple needs:
Pine Script®
import cryptolinx/Motion/VERSION as m // Simple marquee with one line! string text = "Hello World!".motion() // Or with arrays array<string> items = array.from("A", "B", "C") string current = items.motion()


🔷 Framework Method (Full Control)
Complete animation framework with keyframes, transitions, timers:
Pine Script®
import cryptolinx/Motion/VERSION as m // Define keyframe with custom timing var kf = m.keyframe.new(intv = 3, steps = 1) // Apply transition effect string animated = kf.transition( _seq = "Hello World!", _fx = "marquee", __opt = m.option.new(reverse = true, bounce = true) )


💡 EXAMPLES

🔄 Marquee Effect
Pine Script®
var kf = m.keyframe.new(intv = 2) string scrolling = kf.transition( _seq = "Breaking News: Markets Rally!", _fx = "marquee", __opt = m.option.new(ws = 5) ) label.new(bar_index, high, scrolling, style = label.style_label_down)


🌈 Rainbow Gradient
Pine Script®
var kf = m.keyframe.new() color rainbow = array.from( color.red, color.orange, color.yellow, color.green, color.blue, color.purple ).fade(_steps = 8) label.new(bar_index, close, "✨", textcolor = rainbow)


💫 Slide In Animation
Pine Script®
var kf = m.keyframe.new(intv = 1) string animated = kf.transition( _seq = "ALERT!", _fx = "slide_in_right", __opt = m.option.new(max_loops = 1, prefix = "⚠️ ", suffix = " ⚠️") )


🔢 Iteration Effect (Cycling Values)
Pine Script®
var kf = m.keyframe.new(intv = 5) string countdown = kf.iteration( _seqArr = array.from("3", "2", "1", "GO!"), __opt = m.option.new(prefix = "[ ", suffix = " ]") )


📍 Label Movement
Pine Script®
var label myLabel = label.new(bar_index, close, "Moving!") var kf = m.keyframe.new() // Define path: x:y offsets separated by > kf.move(myLabel, "5:0>0:-5>-5:0>0:5", _yHeight = high - low)


🎭 Multi-Transition Chaining
Pine Script®
var kf = m.keyframe.new() // Chain multiple effects on one keyframe kf.transition(_seq = "Hello", _fx = "blink", __opt = m.option.new(max_loops = 3)) string final = kf.transition(_seq = "Hello World!", _fx = "marquee")


📊 OBJECT TYPES

keyframe — Main animation controller
• [c]intv[/c] — Interval between updates (Δt)
• [c]steps[/c] — Updates per execution
• [c]exec[/c] — Start/stop control
• [c]offset[/c] — Timeline offset

transition — Effect configuration
• [c]fx[/c] — Effect type (marquee, blink, slide, etc.)
• [c]action[/c], [c]dir[/c], [c]side[/c] — Parsed effect properties

option — Customization settings
• [c]max_loops[/c] — Loop count (0 = infinite)
• [c]reverse[/c] / [c]bounce[/c] — Direction control
• [c]prefix[/c] / [c]suffix[/c] — Text additions
• [c]sub_start[/c] / [c]sub_length[/c] — Subsequence slicing
• [c]easing[/c] — Easing function type

timer — Timing control
• [c]frequency[/c] — on_tick, on_time, on_index, on_input
• [c]start_on[/c] — now, on_open, on_close
• [c]mu[/c] — Time unit fineness

FREQUENCY MODES

• [c]on_tick[/c] — Update every price tick (smoothest)
• [c]on_time[/c] — Update based on real-world time
• [c]on_index[/c] — Update based on bar index
• [c]on_input[/c] — External control via [c]extern[/c] field

📛 METHOD BADGES

• 🅿️ [c]method-primitive[/c] → Zero-overhead, frameworkless
• 🔷 [c]method-primary[/c] → Core framework methods
• 🔶 [c]method-secondary[/c] → Simplified user-friendly wrappers
• 🔺 [c]method-library[/c] → Internal framework methods

🚀 WHY MOTION?

• 🎬 Dynamic Charts — Bring static labels to life with animations
• ⚡ Optimized — Fine-tuned for minimal memory usage
• 🔧 Flexible — From one-liners to complex multi-transition chains
• 📖 Documented — Comprehensive inline examples
• 🔗 Chainable — Compose effects together seamlessly
• 🎯 Per-Tick Updates — Smooth real-time animations

📋 COMPLETE METHOD REFERENCE

Primitive Methods
• [c]motion()[/c] — Basic string/array manipulation (+4 overloads)
• [c]run()[/c] — Generate oscillating series (+1 overload)
• [c]easing()[/c] — Apply easing curves (+1 overload)

Primary Methods
• [c]transition()[/c] — Text transition effects
• [c]iteration()[/c] — Value cycling/iteration
• [c]gradient()[/c] — Color gradient generation
• [c]movement()[/c] — Position path animation

Secondary Methods (Simplified)
• [c]fx()[/c] — Unified effect wrapper (+3 overloads)
• [c]iterate()[/c] — Simple iteration (+3 overloads)
• [c]fade()[/c] — Color fading (+4 overloads)
• [c]fade_in()[/c] / [c]fade_out()[/c] — Direction-specific fades (+4 overloads each)
• [c]move()[/c] — Position movement (+4 overloads)

Controller Methods
• [c]start()[/c] — Start animation execution
• [c]stop()[/c] — Stop animation
• [c]reset()[/c] — Reset to initial state

🎮 TIP: DEBUGGING

Enable the built-in console insights by creating a copy of the script:
Pine Script®
// In script settings: // Show Console - Insights = true // Shows: Keyframe state, pointer position, loop count, etc.

Haftungsausschluss

Die Informationen und Veröffentlichungen sind nicht als Finanz-, Anlage-, Handels- oder andere Arten von Ratschlägen oder Empfehlungen gedacht, die von TradingView bereitgestellt oder gebilligt werden, und stellen diese nicht dar. Lesen Sie mehr in den Nutzungsbedingungen.