ATAS X is a cross-platform version of the ATAS trading platform that runs natively on both Windows and macOS. Unlike the classic ATAS, which is built on WPF (Windows Presentation Foundation) and runs only on Windows, ATAS X uses cross-platform technologies, which imposes certain additional requirements on custom indicator assemblies.
To make the transition to ATAS X as seamless as possible, we have implemented automatic conversion of Windows-specific types to their cross-platform equivalents. This means that most indicators originally developed for the classic ATAS will work on ATAS X without any code modifications.
For example, the Color type from the System.Windows.Media namespace, keyboard types from System.Windows.Input (such as Key), and GDI+ drawing primitives (System.Drawing.SolidBrush, Pen, Font) are automatically mapped to cross-platform counterparts at runtime. You do not need to change your existing code or add conditional compilation — the platform handles this transparently.
Note that the conversion is not universal: WPF types that have no cross-platform equivalent are not converted — for example, WPF brushes such as System.Windows.Media.SolidColorBrush. An indicator that references such a type will be rejected when loaded on ATAS X. Use System.Windows.Media.Color together with the platform drawing API (see the «Drawing» article) instead of WPF brushes.
Despite the automatic conversion of most types, there is one significant limitation — custom WPF editors.
If your indicator assembly contains custom property editors built using WPF controls (e.g., custom UserControl elements used in the indicator settings window), these cannot be automatically converted to cross-platform equivalents. WPF is a Windows-only UI framework, and there is no way to automatically translate arbitrary WPF visual components into a cross-platform representation.
If your assembly includes custom WPF editors, it will not work on ATAS X automatically.
A separate build for ATAS X is not required. Build the indicator as usual — for the classic ATAS (WPF, the AnyCPU platform; for the target framework, match your platform's runtime, see the «.NET version» section below) — and the same file works on both platforms:
System.Windows.Media.Color, brushes, keys, etc.) to their cross-platform counterparts (see the «Automatic type conversion» section above).In practice this means:
AnyCPU; no special configuration is required.System.Windows.Media.Color, etc.) — exactly as for the classic ATAS.bin\Debug\<framework>\, e.g. net10.0-windows) is installed into both the classic ATAS and ATAS X.Window, DataTemplateSelector, XAML / System.Xaml) — they are not converted, and such an indicator will be rejected with a clear error when loaded on ATAS X. But these elements are not applicable cross-platform anyway.There is no dedicated project template (
dotnet newor a Visual Studio template) for ATAS X, and none is needed: the project is created the same way as for the classic ATAS (see the «Development of a user indicator» article). For a reference of the recommended configuration, see the official indicators repository on GitHub — it contains examples and an up-to-date project structure.
The same rule applies: upload a single classic (WPF) build — one module registration (one UID / FeatureId). A module in the Personal Area stores a single file; both the classic ATAS and ATAS X download that same file, and ATAS X adapts the assembly at load time. Separate builds or registrations per platform are neither needed nor supported by the Personal Area model.
The indicator's target framework must match the runtime of the platform it will be loaded into. Depending on the platform version this is .NET 8 or .NET 10.
Choosing the framework is a matter of compatibility with the platform runtime, not performance: the .NET version has virtually no effect on the indicator's execution speed. So do not pick a "newer framework for the sake of speed" — target compatibility with your platform (and use multitargeting if you support several versions).
The platform version number shown in the lower-right corner of the main window does not directly indicate which .NET runtime is used — do not rely on it when choosing the framework. The most reliable approach is to set up multitargeting and build the indicator for both frameworks at once: you get one assembly per runtime and deploy the one that matches your platform. This is especially convenient if you switch between platform versions (updating, rolling back to a previous build, etc.) with different runtimes.
To do this, list both frameworks in TargetFrameworks (plural). Example .csproj:
The build produces one DLL per framework in separate folders: bin\Debug\net8.0-windows\<Indicator>.dll and bin\Debug\net10.0-windows\<Indicator>.dll. Install into the platform the one that matches its runtime.
References to the ATAS libraries must be compatible with both targets. Take them from the installed platform; if the reference assemblies belong to a newer runtime than the target framework, the build for the lower target may fail — in that case reference the DLLs from the installation of the corresponding platform version.
You do not need to set the C# language version explicitly — specify <LangVersion>latest</LangVersion> and the newest syntax supported by your SDK becomes available (C# 14 for .NET 10).
The general performance recommendations (calculation in OnCalculate, rendering in OnRender, thread safety) are the same for the classic ATAS and ATAS X — see the dedicated «Performance recommendations» article. The only ATAS X specific is the custom WPF editors restriction described in the «Limitation: custom WPF editors» section above.
If your indicator does not contain custom WPF editors but still does not work on ATAS X, please contact our technical support. Send us the DLL file or the source code of your indicator, and we will help resolve the issue.