If you port indicators often or in whole sets, it helps when the agent follows the same order every time.
The skill sets that order: the agent rewrites the logic, shows a table of what carries over and how, checks the result and names the differences.
How to install
Copy the skill text and paste it into the agent's chat with this line on top:
Save this as a skill named "indicator-port". If you can't save skills, follow it for the rest of our conversation.
Skill text
---
name: indicator-port
description: Ports an indicator from another platform to ATAS through the ATAS MCP server and Script Lab: the agent rewrites the logic, names the differences and cross-checks the calculation. Use when the user asks to port, convert, move or rewrite an indicator from its source code ("port this indicator to ATAS", "convert my indicator", "rewrite this code for ATAS"). Requires the source code. Not for closed-source indicators, strategies that trade or orders.
compatibility: Requires the ATAS MCP server, access to Script Lab, permission for script indicators, the source code and the ability to run code for the cross-check.
metadata:
version: 0.1
updated: 2026-11-01
---
# indicator-port
Rewrite the indicator's logic for ATAS and show honestly how the result differs from the original. Reply in the user's language. If the source contains a strategy and orders, port only the calculation and the marks. Do not add orders.
## Hard rules
- Rights first. Work only with code the user wrote themselves or whose license allows it. If the user doesn't know, say so and ask them to check. Keep the author and license notice from the source. Do not bypass protection and do not reconstruct closed code.
- Do not call the port an exact copy. Say: "the logic was rewritten, and these are the differences".
- Always run `scripts_preview` before saving.
- Check the result with a separate calculation from `chart_get_bars`. If the user has values from the original, check against them too. AI Connect gives bars and screenshots for crypto. If the user's chart is on another instrument, offer to check on a crypto chart from their connection or against values from the original.
- If a part doesn't carry over, ask what to do. Do not replace it silently.
- Give the indicator your own name. Do not include names of other platforms or their trademarks in it.
## 1. Break down the source
Make a table before any changes:
```
In the source In ATAS Status
<function, setting> <what replaces it> as is / different / not ported
```
Check separately: data from another instrument or timeframe, calculation inside an unclosed bar, graphic elements, alerts, strategy logic.
## 2. Port
1. Read the `atas://docs/atas-script` resource if it is available. If the source looks like syntax that ATAS Script understands on its own, first check it as is with `scripts_validate`.
2. Go through the diagnostics. Show the user any error on data from another timeframe or instrument and offer options with their cost. Ask which one to choose.
3. `scripts_preview` on the user's chart: how many bars, which series.
## 3. Cross-check
A separate calculation in code on the same bars. Name the number of matching bars and the tolerance. Name what the result depends on: for example, the depth of loaded history or the chart timeframe.
## 4. Save
Save only if the user asked or agreed: `scripts_create` (it compiles right away; on `compiled: false` fix it with `scripts_update_source`), then `scripts_add_to_chart`. Check with `module_screenshot`.
## 5. Answer
```
Indicator: <name>, <where it was added>
Ported as is: <list>
Done differently: <list and why>
Not ported: <list>
Check: <period, number of bars, what it was compared with, whether it matched>
Correct on timeframes: <list>
Source author and license: <as stated in the source>
```
If something displays incorrectly, ask the user to describe the difference and fix it: first the cause, then the change, then the preview and cross-check again.
How to run it
Use indicator-port. I wrote this code myself. Port it to my BTCUSDT 5m chart.
<paste the source code here>
As an example, take a small indicator written specifically for this page:
//@version=5
indicator("Volume Spike Bands", overlay=true)
len = input.int(30, "Length")
mult = input.float(2.0, "Multiplier")
basis = ta.sma(close, len)
dev = mult * ta.stdev(close, len)
plot(basis, "Basis", color=color.gray)
plot(basis + dev, "Upper", color=color.teal)
plot(basis - dev, "Lower", color=color.red)
spike = volume > ta.sma(volume, len) * 2
plotshape(spike and close > basis + dev, "Up spike", shape.triangleup, location.belowbar, color.teal)
plotshape(spike and close < basis - dev, "Down spike", shape.triangledown, location.abovebar, color.red)
alertcondition(spike, "Volume spike", "Volume spike")
What you get
First the agent checks the calculation and stops at whatever doesn't carry over one to one. Here it is the alert:
Use indicator-port. I wrote this code myself. Port it to my BTCUSDT 5m chart.
<paste the source code here>
The calculation is ported and checked: the three lines on 100 closed BTCUSDT 5m bars and all 12 marks matched. Tolerance 0.000001.
Saving and adding it to the chart are waiting for your decision: the compiler accepts alertcondition, but it doesn't create a notification.
Replace it with an ATAS alert() that fires at most once per bar, or save without notifications?
I'm asking because of your indicator-port instructions: "If a part doesn't carry over, ask what to do. Do not replace it silently."
Make it an automatic notification once per bar.
The "Volume Surge Bands" indicator is saved and added to your BTCUSDT 5m Binance Futures. The display has been checked.
- As is: settings 30 and 2, the three lines, the volume spike conditions and the triangle marks.
- Different:
alertconditionis replaced with an automaticalert(), on a volume spike, at most once per bar, without waiting for the bar to close. - Not ported: nothing; the alert was replaced with your approval.
- Check: 100 closed bars on Nov 5, 13:00-21:15 UTC. An independent calculation from
chart_get_bars: all three lines and 12 marks matched, tolerance 0.000001. I haven't yet seen a live notification being delivered. - Timeframes: tested on 5m; the logic works on the current timeframe once 30 bars have accumulated. Values change on the open bar.
- Author: you; no license stated. Authorship is kept in the code.
The logic was rewritten for ATAS; notification behavior and styling depend on the platform.

If you don't have values from the original platform, the check only shows that the code calculates what was intended. Give the agent a few values with their date and time, and it will compare against them.
What you need
- An agent that can run code for the cross-check