Перейти к содержанию

Миграция с .NET Framework

Миграция на .NET 6.0

cTrader Windows перешел с .NET Framework на .NET 6.0 в версии 4.2. Это привело к ряду значительных изменений в пользовательском интерфейсе и в том, как компилируются и собираются сиБоты и индикаторы.

Ключевые изменения

До миграции cTrader использовал .NET Framework 4.0 (и C# версии 4). Все алгоритмы работали внутри основного процесса cTrader Windows.

После миграции cTrader теперь использует отдельные дочерние процессы для индикаторов и сиБотов. Он также использует специальный пакет NuGet для сборки файлов .algo.

Тем не менее новые релизы cTrader обратно совместимы с кодом, написанным до миграции. За исключением нескольких случаев, вы можете свободно использовать индикаторы и сиБотов, которые были созданы в более старых версиях cTrader.

Примечание

Некоторые имена параметров и методы были изменены во время миграции. При сборке ваших старых сиБотов или индикаторов в новых версиях cTrader вы можете получить ошибки или предупреждения сборки из-за этого. Обратитесь к справочной библиотеке, чтобы узнать новые имена методов или параметров и перегрузки методов.

Как выполнить миграцию на .NET 6.0

Чтобы выполнить миграцию с .NET Framework на .NET 6.0, пересоберите свои индикаторы и сиБотов в cTrader Windows 4.2 или новее. Во время пересборки cTrader автоматически изменит структуру проекта .NET на новый стиль SDK.

После пересборки измените целевую платформу вашего индикатора или сиБота на .NET 6.0 через выпадающее меню Target framework.

Image title

Протестируйте свой индикатор или сиБот после пересборки.

Примечание

Если ваш индикатор или сиБот использует права доступа File, Registry или Internet, измените их на FullAccess.

В версии 4.2 сиБоты и индикаторы, использующие несколько потоков, не могут вызывать какие-либо элементы API. Эту проблему можно решить, используя метод BeginInvokeOnMainThread для вызова метода или элемента API. В противном случае ваш код выдаст ошибку.

Поскольку API cTrader Algo не является потокобезопасным, вы должны использовать метод BeginInvokeOnMainThread при каждом вызове или обращении к элементу API.