На главную > Блог > Категория > 🎯 C# и WPF: создаём графики для трейдинга — реально, удобно, быстро
Вы торгуете, анализируете графики, тестируете стратегии. И в какой-то момент понимаете: стандартный терминал неудобен, индикаторов не хватает, а хочется «всё своё». Вопрос: на чём писать? Python — хорошо для бэктестов и скриптов, но для десктопного приложения с красивыми графиками он не лучший выбор. Java — громоздко.
А вот C# + WPF (Windows Presentation Foundation) — это родная, мощная и очень быстрая связка от Microsoft. WPF позволяет создавать профессиональные, плавные графики, которые не уступают TradingView по удобству, но при этом вы полностью контролируете код. В этой статье я расскажу, как реализовать трейдинговые графики на C# в WPF, какие библиотеки использовать и почему это проще, чем кажется.
«WPF — это конструктор Lego для взрослых программистов. А C# — это клей, который держит всё вместе. Постройте свой идеальный терминал».
WPF — это фреймворк для создания десктопных приложений под Windows. В отличие от старых WinForms, он использует векторную графику, поддерживает аппаратное ускорение и позволяет создавать интерфейсы, которые выглядят современно и работают плавно даже с тысячами точек на графике.
Рисовать график с нуля через низкоуровневые примитивы (Line, Rectangle) — можно, но долго и муторно. Есть готовые решения.
| Библиотека | Лицензия | Сложность | Особенности |
|---|---|---|---|
| LiveCharts 2 (рекомендую) | Apache 2.0 (бесплатно) | 🟢 средняя | Современная, быстрая, поддерживает свечные графики, зум, тултипы, MVVM. Идеально для трейдинга. |
| OxyPlot | MIT (бесплатно) | 🟢 низкая | Очень простая, но менее гибкая. Подходит для простых линейных графиков. Есть поддержка свечей. |
| SciChart | Коммерческая (дорогая) | 🔴 высокая | Молниеносная, миллионы точек, профессиональный трейдинг-инструментарий. Используется в банках и HFT. |
| ScottPlot | MIT (бесплатно) | 🟢 низкая | Научная графика, быстро рисует большие массивы, но свечи придётся допиливать. |
Покажу на примере LiveCharts 2. Предполагаем, что у вас уже есть Visual Studio 2022 (Community Edition — бесплатно).
В Visual Studio: «Создать проект» → «WPF Application (.NET 8 или 6)» → называем «TradingChartDemo».
Откройте «Управление пакетами NuGet» (ПКМ по проекту → «Управление пакетами NuGet»). Найдите и установите:
LiveChartsCore.SkiaSharpView
LiveChartsCore.SkiaSharpView.WPF
<Window x:Class="TradingChartDemo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:lvc="clr-namespace:LiveChartsCore.SkiaSharpView.WPF;assembly=LiveChartsCore.SkiaSharpView.WPF"
Title="Трейдинг график" Height="600" Width="800">
<Grid>
<lvc:CartesianChart x:Name="TradingChart">
<lvc:CartesianChart.Series>
<lvc:CandlesticksSeries x:Name="CandleSeries" />
</lvc:CartesianChart.Series>
</lvc:CartesianChart>
</Grid>
</Window>
using LiveChartsCore;
using LiveChartsCore.SkiaSharpView;
using LiveChartsCore.SkiaSharpView.Painting;
using SkiaSharp;
using System;
using System.Collections.Generic;
using System.Windows;
namespace TradingChartDemo
{
public class Candle
{
public double High { get; set; }
public double Low { get; set; }
public double Open { get; set; }
public double Close { get; set; }
}
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// Генерируем тестовые свечи (в реальности сюда придут данные с биржи)
var candles = GenerateTestCandles();
// Конвертируем в формат LiveCharts
var candleSeries = new CandlesticksSeries
{
Values = candles,
Stroke = new SolidColorPaint(SKColors.Black),
Fill = null // стандартное заполнение
};
TradingChart.Series = new ISeries[] { candleSeries };
}
private List<Candle> GenerateTestCandles()
{
var list = new List<Candle>();
var rnd = new Random();
double price = 67000;
for (int i = 0; i < 100; i++)
{
double change = (rnd.NextDouble() - 0.5) * 300;
double open = price;
double close = open + change;
double high = Math.Max(open, close) + rnd.NextDouble() * 150;
double low = Math.Min(open, close) - rnd.NextDouble() * 150;
list.Add(new Candle { Open = open, Close = close, High = high, Low = low });
price = close;
}
return list;
}
}
}
Нажмите F5 — вы увидите свечной график, который можно зумить и панорамировать мышкой. Готово! 🎉
Красивый график — это половина дела. Теперь нужно кормить его реальными ценами. Самый простой способ — использовать WebSocket для получения свечей в реальном времени.
using WebSocketSharp;
using Newtonsoft.Json.Linq;
// Подключение к стриму свечей BTC/USDT, таймфрейм 1 минута
var ws = new WebSocket("wss://stream.binance.com:9443/ws/btcusdt@kline_1m");
ws.OnMessage += (sender, e) =>
{
dynamic data = JObject.Parse(e.Data);
// Парсим свечу: data.k.open, data.k.high, data.k.low, data.k.close
Dispatcher.Invoke(() =>
{
// Обновляем график (добавляем новую свечу в список)
// Candle newCandle = ...
// candles.Add(newCandle);
// TradingChart.Core.Update();
});
};
ws.Connect();
Binance.Net, Bybit.Net — обёртки с готовыми методами для получения котировок, ордеров и баланса.
LiveCharts 2 позволяет накладывать несколько серий на один график. Добавим простую скользящую среднюю.
// Сначала рассчитываем SMA
double[] closes = candles.Select(c => c.Close).ToArray();
int period = 14;
double[] smaValues = new double[closes.Length];
for (int i = period - 1; i < closes.Length; i++)
{
smaValues[i] = closes.Skip(i - period + 1).Take(period).Average();
}
// Добавляем новую серию (линию)
var smaSeries = new LineSeries
{
Values = smaValues,
Stroke = new SolidColorPaint(SKColors.Blue),
GeometrySize = 0 // убираем точки на линии
};
// Передаём в контрол
TradingChart.Series = new ISeries[] { candleSeries, smaSeries };
WPF может тормозить, если вы перерисовываете график слишком часто или загружаете слишком много точек. Вот несколько советов:
| Плюсы | Минусы |
|---|---|
| ✅ Высокая производительность (DirectX) | ❌ Только под Windows (хотя .NET 8 + Avalonia позволяют кросс-платформу) |
| ✅ Бесплатные мощные библиотеки (LiveCharts, OxyPlot) | ❌ Кривая обучения: XAML, привязки данных, MVVM — придётся освоить |
| ✅ Родной доступ к API бирж через HttpClient/WebSocket | ❌ Для HFT нужны библиотеки с низкой задержкой (SciChart — платная) |
| ✅ Современный интерфейс, анимации, скины | ❌ Тяжелее WinForms, но легче Electron-приложений |
Если вы хотите создать собственный торговый терминал, бэктестер или аналитическую платформу под Windows, C# + WPF — один из лучших вариантов. Он даёт высокую производительность, современный интерфейс и прямой доступ к «железу». Да, придётся освоить XAML и MVVM. Но результат того стоит: вы получите приложение, которое работает плавно, выглядит красиво и не тормозит даже при тысячах свечей.
Начните с малого: установите LiveCharts 2, нарисуйте тестовые свечи. Потом подключите Binance API — пусть график оживёт. Потом добавьте скользящие средние. А дальше — ваша фантазия: уведомления, сделки, стратегии. Главное — сделать первый шаг.
И помните: даже если вы никогда не станете профессиональным WPF-разработчиком, создание своего инструментария даст вам глубокое понимание рынка. Вы перестанете быть заложником чужого софта и начнёте торговать так, как удобно вам.
«WPF — это как швейцарский нож для трейдера: можно и график нарисовать, и ордер отправить, и отчёт сформировать. Всё в одном флаконе под Windows».
Дата размещения статьи: 2026-05-24T14:26:17