<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Coder Legion - Recent posts tagged tradingview</title>
<link>https://coderlegion.com/tag/tradingview</link>
<description>Powered by Question2Answer</description>
<item>
<title>Pine Script v6 in 2026: math.sum, math.tanh, User Defined Types &amp; Risk Management Engine</title>
<link>https://coderlegion.com/26600/pine-script-v6-in-2026-math-sum-math-tanh-user-defined-types-risk-management-engine</link>
<description>&lt;h3 id=&quot;overview-pine-script-v6-amp-institutional-risk-architecture&quot;&gt;Overview: Pine Script v6 &amp;amp; Institutional Risk Architecture&lt;/h3&gt;
&lt;p&gt;TradingView's &lt;strong&gt;Pine Script v6&lt;/strong&gt; introduced critical architectural upgrades for quantitative developers. Moving beyond basic visual scripts, v6 provides strict type enforcement, built-in tensor-like math functions (&lt;code&gt;math.sum()&lt;/code&gt;, &lt;code&gt;math.tanh()&lt;/code&gt;), User-Defined Types (UDTs), and native webhook JSON formatting for institutional order routing.&lt;/p&gt;
&lt;p&gt;In this guide, we break down the most essential v6 syntax upgrades and build a full production-ready risk engine with volatility-adjusted sizing.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Original in-depth research published at &lt;a rel=&quot;nofollow&quot; href=&quot;https://guetaquant.com/pine-script-v6/&quot;&gt;GuetaQuant&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&quot;1-key-mathematical-upgrades-in-pine-script-v6&quot;&gt;1. Key Mathematical Upgrades in Pine Script v6&lt;/h3&gt;
&lt;p&gt;In previous versions (v5), performing mathematical reductions across arrays or custom series required cumbersome loops. Pine Script v6 optimizes computational performance by executing core vector operations natively in C++:&lt;/p&gt;
&lt;h4 id=&quot;math-sum-amp-math-tanh-&quot;&gt;&lt;code&gt;math.sum()&lt;/code&gt; &amp;amp; &lt;code&gt;math.tanh()&lt;/code&gt;&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-pinescript&quot;&gt;//@version=6
indicator(&quot;Pine Script v6 Math &amp;amp; Non-Linear Activation&quot;, overlay=false)

// Native vector sum across an array of returns
var float[] log_returns = array.new_float(0)
float current_return = math.log(close / close[1])
array.push(log_returns, current_return)
if array.size(log_returns) &amp;gt; 50
    array.shift(log_returns)

// Hyperbolic tangent non-linear activation (useful for signal bounding [-1.0, 1.0])
float normalized_zscore = (close - ta.sma(close, 20)) / ta.stdev(close, 20)
float bounded_signal = math.tanh(normalized_zscore)

plot(bounded_signal, &quot;Tanh Signal&quot;, color=color.emerald)
hline(0.8, &quot;Upper Bound&quot;, color=color.gray)
hline(-0.8, &quot;Lower Bound&quot;, color=color.gray)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;2-object-oriented-architecture-with-user-defined-types-udts-&quot;&gt;2. Object-Oriented Architecture with User-Defined Types (UDTs)&lt;/h3&gt;
&lt;p&gt;Pine Script v6 fully embraces struct-like User-Defined Types. This allows you to encapsulate complete trade contexts (entry, stop loss, risk budget, target) into a single object:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-pinescript&quot;&gt;//@version=6
indicator(&quot;GQ Trade Context Engine&quot;, overlay=true)

type TradeRiskContext
    string symbol
    float entryPrice
    float stopLossPrice
    float lotSize
    float riskAmountUSD

// Factory method to calculate ATR-based risk
fn_create_context(float risk_pct, int atr_len, float atr_mult) =&amp;gt;
    float atr_val = ta.atr(atr_len)
    float sl_distance = atr_val * atr_mult
    float sl_price = close - sl_distance
    float risk_dollars = (strategy.equity * risk_pct) / 100.0
    float calculated_lots = risk_dollars / (sl_distance * 10.0) // 10 USD per pip standard
    
    TradeRiskContext.new(syminfo.ticker, close, sl_price, calculated_lots, risk_dollars)

var TradeRiskContext active_trade = na
if ta.crossover(ta.ema(close, 9), ta.ema(close, 21))
    active_trade := fn_create_context(1.0, 14, 2.5)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;3-webhook-json-alert-formatting-for-automated-execution&quot;&gt;3. Webhook JSON Alert Formatting for Automated Execution&lt;/h3&gt;
&lt;p&gt;Routing alerts to MetaTrader 5 (MT5), cTrader, or custom Python execution servers requires strictly formatted JSON payloads:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-pinescript&quot;&gt;//@version=6
strategy(&quot;GQ Webhook Strategy - Pine v6&quot;, overlay=true, initial_capital=10000)

fn_build_order_json(string action, float size, float sl_price) =&amp;gt;
    '{&quot;action&quot;:&quot;' + action + '&quot;,&quot;symbol&quot;:&quot;' + syminfo.ticker + '&quot;,&quot;lots&quot;:' + str.tostring(size) + ',&quot;sl&quot;:' + str.tostring(sl_price) + '}'

if ta.crossover(ta.sma(close, 20), ta.sma(close, 50))
    string payload = fn_build_order_json(&quot;BUY&quot;, 0.50, close - 2.5 * ta.atr(14))
    strategy.entry(&quot;Long&quot;, strategy.long, alert_message=payload)
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h3 id=&quot;4-explore-more-open-source-tools&quot;&gt;4. Explore More Open-Source Tools&lt;/h3&gt;
&lt;p&gt;All our MQL5 EAs, cTrader cBots, and Pine Script v6 indicators are open-source under AGPLv3:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;44 Open Source Quantitative Tools:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/guetaquant-byte/guetaquant-tools&quot;&gt;GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interactive MT5 Lot Size Calculator:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://guetaquant.com/herramientas/mt5-position-sizer/&quot;&gt;GuetaQuant MT5 Position Sizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local-First Quantitative Trading Journal:&lt;/strong&gt; &lt;a rel=&quot;nofollow&quot; href=&quot;https://guetaquant.com/journal/&quot;&gt;GuetaQuant Journal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Disclaimer: Educational research only. Does not constitute investment advice. Compliance with SFC Colombia Decreto 2555/2010.&lt;/em&gt;&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/26600/pine-script-v6-in-2026-math-sum-math-tanh-user-defined-types-risk-management-engine</guid>
<pubDate>Wed, 09 Sep 2026 10:39:20 +0000</pubDate>
</item>
<item>
<title>Driving TradingView Desktop From an AI Agent</title>
<link>https://coderlegion.com/16415/driving-tradingview-desktop-from-an-ai-agent</link>
<description>&lt;p&gt;Anyone who's tried AI-assisted trading research has hit the same wall.&lt;/p&gt;
&lt;p&gt;The agent has no native access to your charts. You end up copy-pasting symbols, indicator values, screenshots, and Pine Script back and forth between TradingView and Claude or Cursor. The tools that try to fix this fall into two camps: route market data through a third-party API (added latency, added cost, their interpretation of your bars), or pollute your TradingView chart with helper indicators just so an agent can read them back.&lt;/p&gt;
&lt;p&gt;There's a third path that's more obvious in retrospect: drive your &lt;em&gt;local&lt;/em&gt; TradingView Desktop through the Chrome DevTools Protocol that the app already exposes on port 9222 when you launch it with &lt;code&gt;--remote-debugging-port=9222&lt;/code&gt;. The agent talks to the same TradingView you already use, reads what your chart actually shows, executes Pine Script through TradingView's own runtime. Same data, same indicators, same features, just with an agent in the loop.&lt;/p&gt;
&lt;p&gt;A project called &lt;code&gt;tradesdontlie/tradingview-mcp&lt;/code&gt; started down this path. Then it stalled with TV Desktop 3.1.0 incompatibilities and a handful of bugs, and the maintainer went quiet on PRs. I forked it, and now 71 commits later just tagged &lt;code&gt;1.0.0&lt;/code&gt; of the fork. This post covers what I added and what the tool doesn't do.&lt;/p&gt;
&lt;h3 id=&quot;what-s-in-1-0-0&quot;&gt;What's in 1.0.0&lt;/h3&gt;
&lt;p&gt;The release is at &lt;a rel=&quot;nofollow&quot; href=&quot;https://github.com/iliaal/tradingview-mcp/releases/tag/1.0.0&quot;&gt;https://github.com/iliaal/tradingview-mcp/releases/tag/1.0.0&lt;/a&gt; with the per-tool changelog. The high-level numbers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;78 → 96 tools (18 new MCP tools)&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;tv&lt;/code&gt; CLI (30 commands, 66 subcommands) mirroring the MCP surface&lt;/li&gt;
&lt;li&gt;TV Desktop 3.1.0 compatibility across the whole surface&lt;/li&gt;
&lt;li&gt;338 offline tests (pattern detection, multi-timeframe, replay, CLI routing)&lt;/li&gt;
&lt;li&gt;Removed &lt;code&gt;ui_evaluate&lt;/code&gt; from the upstream surface (it accepted arbitrary JavaScript in the user's authenticated TV session)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;pine-script-lifecycle&quot;&gt;Pine Script Lifecycle&lt;/h3&gt;
&lt;p&gt;The original project let an agent inspect Pine Script, but only barely. Editing, saving, switching, and version history all required the user to click through TradingView's UI. The 1.0.0 fork closes that gap with eight new tools:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pine_save_as&lt;/code&gt; and &lt;code&gt;pine_rename&lt;/code&gt; for naming and copying scripts&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pine_version_history&lt;/code&gt;, &lt;code&gt;pine_delete&lt;/code&gt;, &lt;code&gt;pine_switch_script&lt;/code&gt; for managing the Pine library&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pine_smart_compile&lt;/code&gt; (auto-detects whether to add or update an indicator on the chart; returns &lt;code&gt;elapsed_ms&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pine_analyze&lt;/code&gt; (offline static analysis; catches typos, unused vars, deprecated patterns before compile)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pine_check&lt;/code&gt; (server-side compile without putting the script on a chart; useful for CI-style validation)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;code&gt;pine_check&lt;/code&gt; + &lt;code&gt;pine_analyze&lt;/code&gt; pair is the unlock for AI-assisted Pine debugging. The agent writes a draft, runs &lt;code&gt;pine_analyze&lt;/code&gt; for cheap structural checks, then &lt;code&gt;pine_check&lt;/code&gt; for the real compile, reads errors, fixes, repeats. The user never has to add an unfinished script to the chart just to see whether it compiles.&lt;/p&gt;
&lt;h3 id=&quot;pine-drawing-readers&quot;&gt;Pine Drawing Readers&lt;/h3&gt;
&lt;p&gt;This is the part I keep using most. Five new tools let the agent read what a Pine indicator actually drew, after it's running on the chart:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;data_get_pine_lines&lt;/code&gt;: horizontal price levels (support, resistance, trend lines)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;data_get_pine_labels&lt;/code&gt;: text annotations (signal labels, divergence callouts)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;data_get_pine_tables&lt;/code&gt;: table cells (stats panels, multi-symbol scanners)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;data_get_pine_boxes&lt;/code&gt;: price zones (supply, demand, order blocks)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;data_get_pine_shapes&lt;/code&gt;: &lt;code&gt;plotshape&lt;/code&gt; and &lt;code&gt;plotchar&lt;/code&gt; markers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Default behavior deduplicates and caps output (50 labels by default). Override with &lt;code&gt;verbose=true&lt;/code&gt; or &lt;code&gt;max_labels=N&lt;/code&gt; for cases where the agent needs the raw set.&lt;/p&gt;
&lt;p&gt;Why this matters: agents writing Pine Script could previously check whether the script &lt;em&gt;compiled&lt;/em&gt;, but couldn't verify whether the logic was &lt;em&gt;correct&lt;/em&gt;. Now the agent can write an indicator, compile it, and read the labels back to confirm the right bars were tagged. Without this, AI-assisted Pine work stops at &quot;syntax is fine, hope you wrote what you meant.&quot;&lt;/p&gt;
&lt;p&gt;This also replaces the workflow that an agent would otherwise fall back to: screenshot the chart, run OCR over the image, hope the agent pieces together what the indicator drew. That path is slow (a screenshot round-trip plus OCR latency on every read), unreliable (overlapping labels and thin lines confuse the OCR), and expensive (chart images in the agent's context burn thousands of tokens before any reasoning happens). The structured readers skip all three problems.&lt;/p&gt;
&lt;h3 id=&quot;multi-pane-and-tab-navigation&quot;&gt;Multi-Pane and Tab Navigation&lt;/h3&gt;
&lt;p&gt;Pine indicators rarely live alone. A real chart layout might have three panes (price + RSI + volume) and four tabs, one per ticker. The original project assumed a single chart context. The fork adds eleven tools that make the layout addressable:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pane_list&lt;/code&gt;, &lt;code&gt;pane_focus&lt;/code&gt;, &lt;code&gt;pane_set_layout&lt;/code&gt;, &lt;code&gt;pane_set_symbol&lt;/code&gt;, &lt;code&gt;pane_set_timeframe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pane_read_batch&lt;/code&gt; (single call that reads across all visible panes)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tab_list&lt;/code&gt;, &lt;code&gt;tab_new&lt;/code&gt;, &lt;code&gt;tab_close&lt;/code&gt;, &lt;code&gt;tab_switch&lt;/code&gt;, &lt;code&gt;tab_switch_by_name&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;pane_read_batch&lt;/code&gt; was the practical motivator: agents that need to compare indicator values across panes used to need 5+ round-trips. The batch reader collapses that to one CDP call, which matters when the agent is iterating quickly.&lt;/p&gt;
&lt;p&gt;A non-obvious detail: pane focus needs a 300ms wait after &lt;code&gt;pane.focus()&lt;/code&gt; for &lt;code&gt;_activeChartWidgetWV&lt;/code&gt; to update, required since TV 3.1.0. The fork bakes this in so users don't have to discover it.&lt;/p&gt;
&lt;h3 id=&quot;multi-timeframe-and-pattern-detection&quot;&gt;Multi-Timeframe and Pattern Detection&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;data_get_multi_timeframe&lt;/code&gt; reads indicator values across a list of timeframes (W → D → 4H → 1H → 15m alignment) in one call. It saves and restores the original timeframe, so the agent gets multi-timeframe context without disrupting the user's view.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;data_detect_candlestick_patterns&lt;/code&gt; runs 17 classic patterns over raw OHLC bars: doji, hammer, hanging_man, inverted_hammer, shooting_star, marubozu, spinning_top, bullish_engulfing, bearish_engulfing, bullish_harami, bearish_harami, piercing_line, dark_cloud_cover, morning_star, evening_star, three_white_soldiers, three_black_crows. Each match returns the pattern name, a direction (bullish/bearish/neutral), and a strength score.&lt;/p&gt;
&lt;p&gt;The point of doing pattern detection natively, instead of via a Pine indicator overlay, is chart hygiene. Pattern detection informs the agent; the user never wants to see it plotted on the chart. Running it over OHLC bars directly means no Pine indicator gets added to the chart, no scripts get pushed to TV's Save dialog, and the user's chart stays clean.&lt;/p&gt;
&lt;h3 id=&quot;the-tv-cli&quot;&gt;The &lt;code&gt;tv&lt;/code&gt; CLI&lt;/h3&gt;
&lt;p&gt;The MCP surface is meant for AI agents. But the same operations are useful from a shell, and shipping both interfaces from the same code path (instead of building a separate CLI program) keeps them in sync.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;tv&lt;/code&gt; ships 30 commands with 66 subcommands. A few examples:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;tv quote get AAPL                          # current quote
tv data ohlcv AAPL --tf 1H --bars 200      # OHLCV bars
tv pine check ./my_indicator.pine          # offline compile
tv pine smart_compile ./my_indicator.pine  # add or update on chart
tv hotlist volume_gainers --country US     # scanner
tv stream all                              # poll-and-diff JSONL output
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;tv stream&lt;/code&gt; polls the chart and emits JSONL whenever something changes: a new bar, an indicator value update, a new label drawn. Useful for piping into tail-and-watch workflows or for sanity-checking a strategy as it runs.&lt;/p&gt;
&lt;h3 id=&quot;cross-platform-launch&quot;&gt;Cross-Platform Launch&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;tv_launch&lt;/code&gt; auto-detects native macOS, Linux, Windows, and Windows MSIX (Microsoft Store) installs of TradingView Desktop, resolves Windows paths correctly when invoked from WSL2, and handles the case where a binary refuses &lt;code&gt;--remote-debugging-port&lt;/code&gt; from a direct spawn. macOS Electron 38 is the worst offender there; the fix is to fall back to &lt;code&gt;open -a&lt;/code&gt; with the port flag in &lt;code&gt;--args&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The motivation for sinking this much code into launch behavior is operational: in a CI-like setup or a containerized agent loop, you want &lt;code&gt;tv_ensure&lt;/code&gt; to be a no-op when TV is already running and a clean launch when it isn't, on whichever OS the agent happens to be on. The original project assumed the user had TradingView running and never had to think about how it got there.&lt;/p&gt;
&lt;h3 id=&quot;a-quiet-architectural-change&quot;&gt;A Quiet Architectural Change&lt;/h3&gt;
&lt;p&gt;One refactor: per-call &lt;code&gt;_deps&lt;/code&gt; dependency injection across ten core modules (&lt;code&gt;chart&lt;/code&gt;, &lt;code&gt;data&lt;/code&gt;, &lt;code&gt;drawing&lt;/code&gt;, &lt;code&gt;pane&lt;/code&gt;, &lt;code&gt;pine&lt;/code&gt;, &lt;code&gt;replay&lt;/code&gt;, &lt;code&gt;ui&lt;/code&gt;, &lt;code&gt;watchlist&lt;/code&gt;, &lt;code&gt;alerts&lt;/code&gt;, &lt;code&gt;capture&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;Before: each module imported &lt;code&gt;connection.js&lt;/code&gt; directly. State lived in module globals. Tests had to monkey-patch &lt;code&gt;connection.js&lt;/code&gt; to swap CDP behavior.&lt;/p&gt;
&lt;p&gt;After: each function accepts a &lt;code&gt;_deps&lt;/code&gt; parameter, so the test harness passes in a mock CDP wrapper without touching globals. The &lt;code&gt;installCdpMocks&lt;/code&gt; and &lt;code&gt;mockEvaluateFromTable&lt;/code&gt; helpers in &lt;code&gt;tests/helpers/mock-cdp.js&lt;/code&gt; give every test an isolated environment.&lt;/p&gt;
&lt;p&gt;Practical result: 338 offline tests run in seconds without needing TradingView Desktop open. The previous test surface was much smaller because anything beyond a unit test required the real app running. The DI refactor unlocked the test count, which is what makes the 3.1.0 compat fixes safe to ship.&lt;/p&gt;
&lt;h3 id=&quot;what-was-removed-ui-evaluate&quot;&gt;What Was Removed: &lt;code&gt;ui_evaluate&lt;/code&gt;&lt;/h3&gt;
&lt;p&gt;The upstream had a tool called &lt;code&gt;ui_evaluate&lt;/code&gt; that accepted arbitrary JavaScript and ran it in the authenticated TradingView session. Anyone with MCP access to the agent had effective full read/write access to the user's TradingView account state: watchlists, alerts, saved scripts, anything the session could see.&lt;/p&gt;
&lt;p&gt;Dropped it. There's no use case for arbitrary JavaScript that isn't better served by a specific tool with a narrow boundary. If you need to read or modify something the existing tools don't cover, that's a missing tool, not a reason to expose the JS runtime.&lt;/p&gt;
&lt;h3 id=&quot;what-it-doesn-t-do&quot;&gt;What It Doesn't Do&lt;/h3&gt;
&lt;p&gt;The agent talks to your &lt;em&gt;running&lt;/em&gt; TradingView Desktop via CDP. There's no API spoofing, no auth bypass, no headless TV. If you don't have TV Desktop installed, the tool can't help you.&lt;/p&gt;
&lt;p&gt;TradingView's free tier covers most of the lifecycle tools. Some features need paid tiers (multi-pane, replay mode, second-resolution data, more indicators per chart). The tools wrap whatever the local TV exposes; they don't unlock features you don't have.&lt;/p&gt;
&lt;p&gt;It doesn't bypass anything. It doesn't get you data TradingView doesn't already give you. The improvement is the agent surface, not the data access.&lt;/p&gt;
&lt;h3 id=&quot;install&quot;&gt;Install&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;git clone https://github.com/iliaal/tradingview-mcp
cd tradingview-mcp
npm install
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Add the server to &lt;code&gt;~/.claude/.mcp.json&lt;/code&gt; (or your MCP config). Launch TradingView with &lt;code&gt;--remote-debugging-port=9222&lt;/code&gt;. The README has the paste-into-Claude-Code one-liner that covers the agent-side wiring.&lt;/p&gt;
</description>
<category>Articles</category>
<guid isPermaLink="true">https://coderlegion.com/16415/driving-tradingview-desktop-from-an-ai-agent</guid>
<pubDate>Sat, 02 May 2026 14:21:08 +0000</pubDate>
</item>
</channel>
</rss>