Поскольку логика робота предусматривает достаточно основательный подход, начну с интерфейса программы. Возможно, это позволит увидеть требования к функционалу в новом свете.
Основное окно
Просто и со вкусом:)
Почему нет кнопок в основном окне?
На мой взгляд, кнопки должен нажимать робот, а мы только наблюдать за результатами его работы.
В перспективе можно добавить дополнительную информацию для визуального контроля, например, количество сделок, прибыль в рублях и т.д.
Все элементы управления доступны через меню, которое включает в себя вкладки: Торговля, Настройки, Окна.
Вкладка Торговля содержит следующие пункты
При выборе пункта «Установить соединение» программа подключается к коннектору по умолчанию. Информация об инициализации соединения отображается в окне логов.
После удачного соединения этот пункт становится неактивным, при этом активируется пункт «Запуск робота».
Соответственно, до установки соединения пункты «Разорвать соединение», «Запуск робота», «Остановка робота» неактивны.
Вкладка Настройки
Каждый элемент вызывает окно для настройки соответствующих параметров.
Окно также будет содержать вкладки для перехода к другим пунктам меню Настройки.
Источник данных: выбор коннектора, проверка работы (аналог Verifier), возможность подключения нескольких коннекторов.
Кстати, возможна ли в S# одновременная работа с несколькими источниками данных, например, с Quik и Plaza2?
Стратегии: выбор торговой стратегии. Предполагаю, что для каждого типа стратегий будет свой дистрибутив с соответствующими настройками, поэтому в данном пункте можно будет переключаться не между арбитражем и, например, торговлей волатильностью, а скорее это будет выбор инструментов и оптимизация параметров для определенной стратегии.
Контроль рисков: рабочий сайз (% от счета, количество контрактов), максимальная просадка за определенный период, максимальный убыток на сделку, защита от технических сбоев:)
Управление временем: включение/выключение по расписанию. Наверно, здесь же: период для автоматического восстановления связи, период для проверки связи с сервером. Возможно, период для хранения информации о заявках, сделках.
Вкладка Окна
При выборе пункта меню вызывается соответствующее окно с вкладками для перехода к другим элементам.
Деньги: аналог «Ограничений по клиентским счетам». Можно добавить прибыль в процентах, прибыль за определенный период. Максимальная прибыль/убыток на сделку, максимальная просадка в рублях, процентах. Здесь же: возможность построить графики эквити и просадок за выбранный период.
Логи: вся информация о работе программы с указанием времени, типа и состояния операции.
Заявки: информация о выставленных заявках. Возможность посмотреть заявки за выбранный период.
Сделки: информация обо всех сделках. Просмотр сделок за выбранный период времени.
Позиции: данные о текущих позициях, аналог «Позиций по клиентским счетам». Опять же возможность посмотреть позиции в любой момент времени в прошлом.
Графики.
Сначала хотел вынести в отдельный пункт и, возможно, так и сделаю в перспективе.
График: текущий график позиции.
Как будет выглядеть портфель при торговле волатильностью, более-менее представляю, а вот при арбитраже будем смотреть на горизонтальную прямую:)
Также необходимо наверно добавить график БА для удобства.
Модель: аналог опционного аналитика. Нормально там все реализовано, кроме календарей, конечно.
Улыбка: улыбка 2D и 3D. Графики за выбранный период. История по определенному страйку.
Смотрю на это описание и думаю: не получится нормального робота, так хоть софт для торговли будет удобный:)
Весит приложение 12 КБ, при этом кушает уже 12 МБ. Майкрософт..
Code
<Window x:Class="robot.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Робот 1.0" Height="250" Width="400">
<Grid Margin="1" Background="LightGray">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="30*"/>
<RowDefinition Height="70*"/>
</Grid.RowDefinitions>
<Menu Grid.Row="0">
<MenuItem Header="Торговля">
<MenuItem Header="Установить соединение"></MenuItem>
<MenuItem Header="Разорвать соединение"></MenuItem>
<Separator></Separator>
<MenuItem Header="Запуск робота"></MenuItem>
<MenuItem Header="Остановка робота"></MenuItem>
<Separator></Separator>
<MenuItem Header="Выход"></MenuItem>
</MenuItem>
<MenuItem Header="Настройки">
<MenuItem Header="Источник данных"></MenuItem>
<MenuItem Header="Стратегии"></MenuItem>
<Separator></Separator>
<MenuItem Header="Контроль рисков"></MenuItem>
<MenuItem Header="Управление временем"></MenuItem>
</MenuItem>
<MenuItem Header="Окна">
<MenuItem Header="Деньги"></MenuItem>
<Separator></Separator>
<MenuItem Header="Логи"></MenuItem>
<Separator></Separator>
<MenuItem Header="Заявки"></MenuItem>
<MenuItem Header="Сделки"></MenuItem>
<MenuItem Header="Позиции"></MenuItem>
<Separator></Separator>
<MenuItem Header="График"></MenuItem>
<MenuItem Header="Модель"></MenuItem>
<MenuItem Header="Улыбка"></MenuItem>
</MenuItem>
</Menu>
<Grid Grid.Row="1" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50*"/>
<ColumnDefinition Width="50*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="100*"/>
</Grid.RowDefinitions>
<Viewbox Grid.Row="1" Grid.Column="0" Margin="7">
<TextBlock Foreground="Black" FontStyle="Normal" Height="Auto" HorizontalAlignment="Center" Name="textBlock1" Text="Прибыль" VerticalAlignment="Center" Width="Auto" />
</Viewbox>
<Viewbox Grid.Row="1" Grid.Column="1" Margin="7">
<TextBlock Foreground="Black" Height="Auto" HorizontalAlignment="Center" Name="textBlock2" Text="11402%" VerticalAlignment="Center" Width="Auto" />
</Viewbox>
</Grid>
<Grid Grid.Row="2" Background="White" >
<Viewbox Margin="5" >
<TextBlock Foreground="Black" Height="Auto" HorizontalAlignment="Left" Name="textBlock3" Text="Логи" VerticalAlignment="Center" Width="Auto" ></TextBlock>
</Viewbox>
</Grid>
</Grid>
</Window>