К статье
Справка XTester
XTester Studio

Первый проверочный бэктест

Готовый C# проект для первого запуска: полный код, манифест, загрузка истории и проверенный результат без заявок.

Проверено: Для версий: 1.0.0-preview.1

Что получится

Это готовый первый проверочный бэктест для человека, который пока не пишет C#. Вы создадите папочную стратегию, вставите полный файл, скомпилируете его и проверите обработку исторических свечей.

Пример считает закрытые бары и пишет журнал. Он не размещает заявки, поэтому ноль сделок — ожидаемый результат. Так удобно проверить установку, данные и запуск до добавления торговых правил.

Полный проект проверен в изолированном EngineHost 1.0.0-preview.1 на macOS: компиляция без ошибок и исторический расчёт Binance/Spot/BTCUSDT за час 2020-01-01. Дополнительные библиотеки, API-ключи биржи и платная модель ИИ в коде не используются.

Эта инструкция относится к формату стратегий Studio. Для другого выпуска, старого Tester или примера из SDK Handbook сначала проверьте версию и доступный API.

Получить готовый проект

Где открыть

палитра команд → «XTester: Новая стратегия…» → «Создать с нуля». Выберите C#, имя First Check и отдельную учебную папку.

Альтернативный путь: скачайте ZIP, распакуйте папку first-check и откройте её через «Открыть сохранённую стратегию» в мастере. В архиве main.cs, манифест, инструкции RU/EN и фактический протокол проверки; истории котировок и установленной программы в нём нет.

Скриншот программыXTester 1.0.0-preview.1
Мастер стратегии: три способа начать работу.Снимок интерфейса · XTester 1.0.0-preview.1
  1. Создать новую стратегию с нуля.
  2. Открыть уже сохранённую стратегию.

Скачать учебный проектZIP

Папочная стратегия состоит из main.cs и xtester.strategy.json. Мастер может добавить служебные поля. Если создаёте её через мастер, сохраните созданную структуру и целиком замените только main.cs кодом ниже.

first-check/
  main.cs
  xtester.strategy.json
  README.ru.md
  README.en.md
  verification.json

Полный main.cs

Откройте main.cs, выделите всё содержимое и вставьте этот полный файл. Сохраните его перед компиляцией.

Для папочного шаблона Studio namespace и using здесь не пропущены: компилятор добавляет стандартные импорты SDK. Это проверенный формат файла стратегии, а не отдельный консольный .NET-проект. Точные типы и сигнатуры можно сверить по API установленного движка.

OnInit получает журнал и обнуляет счётчик. OnBar вызывается для закрытых баров. OnFinish выводит число обработанных баров. В коде нет вызовов отправки ордеров.

public class UserStrategy : IStrategy
{
    private ILogger _logger = null!;
    private int _closedBars;

    public void OnInit(StrategyContext context)
    {
        _logger = context.Logger;
        _closedBars = 0;
        _logger.Info("Learning example started. No orders will be placed.");
    }

    public void OnTick(decimal? price = null) { }

    public void OnBar(ISymbolKey symbolKey, IKline kline)
    {
        _closedBars++;
        if (_closedBars == 1)
        {
            _logger.Info("The first closed bar was received.");
        }
    }

    public void OnFinish(StrategyFinishContext context)
    {
        _logger.Info("Closed bars processed: " + _closedBars);
    }
}

Манифест и условия

Манифест указывает язык, точку входа и параметры примера. Сценарий использует C# и main.cs, Binance Spot BTCUSDT, m1 и начальные 1000 USDT.

Ниже приведён полный манифест проверенного ZIP. При создании через мастер задайте те же условия в интерфейсе; вручную добавлять .csproj не требуется. В режиме шага выберите Bar («Бар»). Прогон в инструкции исторический.

{
  "strategy": {
    "name": "First Check",
    "language": "csharp",
    "entryPoint": "main.cs"
  },
  "simulation": {
    "exchange": "Binance",
    "market": "Spot",
    "symbol": "BTCUSDT",
    "timeframe": "m1",
    "period": {
      "from": "2020-01-01T00:00:00Z",
      "to": "2020-01-01T01:00:00Z"
    },
    "depositUsdt": 1000,
    "launchMode": "Release"
  }
}

Скачать данные и запустить

Откройте «Данные» и загрузите историю Binance / Spot / BTCUSDT, m1, за 2020-01-01. Для часового расчёта нужны свечи с 00:00 до 00:59 UTC. Проверьте фактическое покрытие после загрузки.

Порядок действий
  1. Выберите Binance, Spot, BTCUSDT и m1.
  2. Задайте начало 2020-01-01 00:00 и конец 2020-01-01 01:00 UTC.
  3. Проверьте начальные средства 1000 USDT и режим шага Bar.
  4. Выполните «Скомпилировать стратегию» и проверьте отсутствие ошибок.
  5. Запустите исторический расчёт выбранной стратегии и дождитесь завершения.

Если история недоступна, сначала устраните причину загрузки. Другой инструмент, другая дата или сгенерированные данные изменяют проверяемый сценарий.

Затем откройте «Симуляция» выбранной стратегии и задайте условия ниже. В проверке был использован режим Bar с обычной моделируемой моделью исполнения; исторические цены не делают исполнение точной реконструкцией биржи.

Проверить результат

В выполненной проверке получены 60 шагов, 59 вызовов по закрытым барам, 0 заявок и 0 сделок. Сообщение Closed bars processed: 59 подтвердило выполнение нашего кода, а не только успешную компиляцию.

Скриншот программыXTester 1.0.0-preview.1
В нижней панели «Лог стратегии» видны запуск, первая закрытая свеча и итоговая строка Closed bars processed: 59. Сообщения примера написаны в его исходнике.Снимок интерфейса · XTester 1.0.0-preview.1
Скриншот программыXTester 1.0.0-preview.1
В отчёте 0 сделок, капитал стратегии остался 1 000 USDT. Пунктир показывает отдельный ориентир по BTCUSDT, а не сделки примера.Снимок интерфейса · XTester 1.0.0-preview.1
  1. Итоговые показатели прогона.
  2. Капитал и ориентир для сравнения.

Время строк журнала — время исторического расчёта. Поэтому в этом примере вы увидите дату 2020-01-01, а не сегодняшнюю дату компьютера. Шаг времени и вызов OnBar — разные события; на выбранных границах их числа отличаются.

Проверьте собственные условия и журнал: первые сообщения показывают запуск примера и получение закрытого бара, последняя строка — итог счётчика. При изменении периода, данных или сборки число баров может отличаться.

Нулевая доходность здесь не оценка торговой идеи: код специально ничего не покупает и не продаёт. Для следующего упражнения добавляйте конкретные правила входа/выхода и проверяйте их отдельно.

Learning example started. No orders will be placed.
The first closed bar was received.
Closed bars processed: 59

Если результат не получился

Ошибка типов IStrategy или StrategyContext. Проверьте, что выбран C# шаблон Studio, открыт правильный проект и файл заменён целиком. Сверьте версию по «О программе» и доступный API, прежде чем добавлять namespace из другого примера.

Нет свечей или расчёт не стартует. Проверьте биржу, рынок, пару, m1, UTC-период и фактический диапазон загруженной истории. Само наличие названия инструмента в списке не подтверждает данные.

Ноль сделок при наличии сообщений журнала — нормальный результат этого примера. Отсутствие самих сообщений требует проверки выбранной стратегии, сохранения файла, компиляции и запуска.

Для поддержки сохраните версию, условия расчёта, его собственный runId и точное сообщение ошибки. Не используйте идентификатор из чужого проверочного протокола для своего проекта.