Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
В режиме самостоятельного управления заявками можно управлять заявками агента, выставлять заявку, снимать заявку. В этом режиме недоступны стандартные методы работы с позициями (BuyAtMarket, BuyAtPrice и т.д.). И соответственно у агента не будут работать стандартные опции для работы с позициями: Автооткрытие, автозакрытие, виртуальная позиция, ждать исполнения и другие. В этом режиме работать с заявками следует через интерфейс ISecurityRt.
Доступные свойства и методы интерфейса ISecurityRt: IsPortfolioReady - возвращает истину если инструмент готов к торговле BalanceQuantity - количество лотов по бумаге из таблицы Позиции EstimatedBalance - баланс счета на основе стоимости всех бумаг CurrencyBalance - количество свободных денег на счету, связанном с бумагой Orders - список исполненных и активных заявок по бумаге (только для данного агента) CancelledOrders - список отмененных заявок по бумаге (только для данного агента) HasActiveOrders - есть активные заявки или нет NewOrder(...) - выставить новую заявку CancelOrder(...) - отменить заявку ChangeOrder(...) - выставить новую заявку
Важно: - В свойстве скрипта нужно поставить галочку 'Отключить генерацию позиций' - Нужно запустить скрипт в режиме агента. - Чтобы агент начал выставлять заявки нужно в свойстве агента поставить галочки: 'исполнять входы сразу' и 'исполнять выходы сразу'.
GitHub (исходник): https://github.com/TSLab-Dev/Handlers
GitHub (исходник): https://github.com/TSLab-Dev/TSLabExtendedHandlers
GitHub (готовая dll): https://github.com/TSLab-Dev/TSLabExtendedHandlers/releases
Блоки:
BinancePosition - Получить значение позиции из бинанса. Для фьючерсов Usdt-M и Coin-M.
Индикатор считает спред двух инструментов по формуле (K1 * sec1 - K2 * sec2). Возвращает новый инструмент. Показан пример работы метода sec.CloneAndReplaceBars(bars).
Для того чтобы что то улучшить, это надо измерить. Поэтому хорошая практика замерять выполнение скрипта. В начале скрипта ставим: var sw = Stopwatch.StartNew(); В конце: ctx.Log($"Time: {sw.Elapsed}", MessageType.Info, true); После выполнения скрипта в логе будет написано время выполнения. Также можно замерять отдельные участки кода. Пример:
Это касается свойств в ISecurity: ClosePrices, OpenPrices, HighPrices, LowPrices, Volumes. Внутри них есть кеширование, из-за этого получение этих данных будет медленным. Поэтому рекомендуется получить все нужные данные перед торговым циклом и в цикле их использовать. var closePrices = sec.ClosePrices; var openPrices = sec.OpenPrices; var highPrices = sec.HighPrices; var lowPrices = sec.LowPrices; var volumes = sec.Volumes;
Пример:
По возможности создавать необходимые объекты до цикла, в котором они используются. Например, есть такой код, в котором используется время:
Создание TimeSpan лучше вынести до цикла:
Подробнее тут: .