- Как правильно получать информацию об исполненной заявке? Попытался сначала просто реализовать метод OnOrderChanged - событие никогда не срабатывает. Подцепил его явно в конструкторе стратегии с Connector - стало приходить, но при этом цена исполнения 0. Понятно, что заявка была рыночная, но как мне узнать цену исполнения? Реализовал метод OnNewMyTrade, вроде оттуда можно вытащить и цену исполнения и исходный ордер с состоянием правильным, но при этом при тестировании на истории на часовиках заявка исполняется через 4-5 свечек после размещения. Понятно, что за 5 часов ситуация меняется кардинально, и там в очереди уже другие заявки появляются. Может в предыдущей попытке тоже была эта проблема, когда OnOrderChanged делал, просто тогда не обратил внимание на это.
- Немного непонятно с терминологией и наименованием полей. Мне нужно получить:
- количество свободных денег в портфеле
- количество бумаг в портфеле
- размер лота для конкретной бумаги (для истории очевидно это нужно устанавливать при создании Security, но какое поле?) Откуда это всё брать и как оно называется?
← Zurück
Kommentare (15)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
С данным вопросом частично разобрался, оказывается заявки не выполнялись потому-что я для Security установил VolumeStep, а заявки подавал некратные. Поэтому вопрос уже другой:
Я уже и так наплодил тем, поэтому сюда же вопрос добавлю. По какой причине заявка при тестировании на истории может быть отменена? Заявка по рынку, объём небольшой, но в какой-то момент заявка отменяется. В чём может быть дело?
Тут поискал по форуму и нагел ответ, что заявка может быть отменена по причине отсутствия ликвидности. Но мне этот ответ ничего не говорит. Что это значит? В истории на свече полтора милиона объём торгов, как на заявку на объём 300, может не найтись продавца по рыночной цене? При этом после отмены отмены заявки, позиция показывает только исполненную часть (60), а денег не остается совсем, как будто заявка выполнена целиком. Возможно я не так смотрю деньги, но на вопросы как смотреть мне так никто и не ответил.
Добрый день
Заявка может быть отвергнута системой, но не отменена. Отмена идёт только пользовательским кодом.
Вот кусок лога: 2010/01/14 14:00:02.000| |MFS_SBERP@TQBR_test account|MONEY: 25323,460000000000000000000000, SECS: 0 2010/01/14 14:00:02.000| |MFS_SBERP@TQBR_test account|Регистрация новой Market (0x23B1E22) заявки на Buy с ценой 0 и объемом 340. 2010/01/14 14:00:02.000| |HistoryEmulationConnector|RegisterOrder: 0/ SBERP@TQBR test account Покупка Цена=0 Объем=340 Сост=None Бал=0 Сост=Market 2010/01/14 14:00:02.000| |HistoryEmulationConnector|New order: 12/ SBERP@TQBR test account Покупка Цена=0 Объем=340 Сост=Pending Бал=340 Сост=Market 2019/02/13 03:42:31.382| |SecurityMarketEmulator|Заявка 12 зарегистрирована. 2019/02/13 03:42:31.382| |SecurityMarketEmulator|Заявка 12. Исполнение объема 60 по цене 73,55. 2019/02/13 03:42:31.383| |SecurityMarketEmulator|Заявка 12 отменяется, так как является рыночной с неисполненным объемом 280. 2019/02/13 03:42:31.383| |SecurityMarketEmulator|Сделка 7 заявки 12 P=73,55 V=60. 2010/01/14 14:00:02.000| |HistoryEmulationConnector|Order changed: 12/5 SBERP@TQBR test account Покупка Цена=0 Объем=340 Сост=Done Бал=280 Сост=Market 2010/01/14 14:00:02.000| |MFS_SBERP@TQBR_test account|Новая позиция: (S#:SBERP@TQBR, Native:,Type:, test account)=60. 2010/01/14 14:00:02.000| |MFS_SBERP@TQBR_test account|Заявка 12 (0x23B1E22) больше не активна. 2010/01/14 14:00:02.000| |HistoryEmulationConnector|New own trade: 14.01.2010 14:00:02 +03:00 7 73,55 60 от заявки 12/5 SBERP@TQBR test account Покупка Цена=0 Объем=340 Сост=Done Бал=280 Сост=Market 2010/01/14 14:00:02.000| |MFS_SBERP@TQBR_test account|Trade: Done, Buy, 60 2010/01/14 14:00:02.000| |MFS_SBERP@TQBR_test account|Новая Buy сделка 7 по цене 73,55 на 60 заявки 12. 2010/01/14 15:00:05.000| |MFS_SBERP@TQBR_test account|MONEY: 322,020000000000000000000000, SECS: 60
строки вида "Trade: Done, Buy, 60" это мой лог из OnNewMyTrade строки вида "MONEY: 322,020000000000000000000000, SECS: 60" это мой лог из CandleManager_Processing, код такой:
this.AddInfoLog("MONEY: {0}, SECS: {1}", Portfolio.CurrentValue.GetValueOrDefault(0) - Portfolio.BlockedValue.GetValueOrDefault(0), Position);
Во-первых откройте уже секрет - я правильно беру эти значения или нет?
Во-вторых по логам видно, что заявка таки отменена, но деньги при этом не вернулись. Как так?
Попытался явно отменять заявку в такой ситуации - деньги всё равно не возвращаются. Что я не так делаю?
Если никого не смущает, что я разговариваю сам с собой, то продолжу. Сообщение об отмене заявки приходит из MarketEmulator.cs:
сообщение 1165 из локализации order.OrderState = OrderStates.Done; - это не отмена разве? Ну пусть отмена, но где деньги? Почему они так и висят в блокированных?
Пожалуйста, уточните, что подразумевается под фразой возврата? Вы имеете ввиду разблокировку денежных средств?
Для начала хотелось бы получить ответы на вопросы, заданные уже раз 10: Мне нужно получить:
Откуда взять это?
Далее: почему не срабатывает OnOrderChanged?
Ну и наконец последний вопрос: (зависит от того правильно ли я получаю количество свободных денег) Поскольку получаю я это количество как Portfolio.CurrentValue.GetValueOrDefault(0) - Portfolio.BlockedValue.GetValueOrDefault(0) То очевидно именно разблокировка мне нужна, почему она не происходит при отмене заявки?
Складывается ощущение, что я какие-то неприличные вопросы задаю, на которые цивилизованные люди не отвечают :) Попробую поприличней сформулировать:
Первый и второй вопрос меня тоже интересует. Внятного отчета не нашел. Если ты решил эти вопросы - поделись пожалуйста) 🤓 Админы видимо не хотят делиться этой инфой !