eSKon
|
Дата: 12.02.2019
С данным вопросом частично разобрался, оказывается заявки не выполнялись потому-что я для Security установил VolumeStep, а заявки подавал некратные. Поэтому вопрос уже другой: 1. Я вообще правильно делаю устанавливая VolumeStep и подразумевая размер лота? 2. Если так, то почему у меня после исполнения нескольких заявок Position (это количество бумаг, правильно?) оказывается некратным - я ведь размер лота установил для бумаги, как неполный лот выполняется?
|
|
Спасибо:
|
|
|
|
|
eSKon
|
Дата: 12.02.2019
Я уже и так наплодил тем, поэтому сюда же вопрос добавлю. По какой причине заявка при тестировании на истории может быть отменена? Заявка по рынку, объём небольшой, но в какой-то момент заявка отменяется. В чём может быть дело?
|
|
Спасибо:
|
|
|
|
|
eSKon
|
Дата: 13.02.2019
Тут поискал по форуму и нагел ответ, что заявка может быть отменена по причине отсутствия ликвидности. Но мне этот ответ ничего не говорит. Что это значит? В истории на свече полтора милиона объём торгов, как на заявку на объём 300, может не найтись продавца по рыночной цене? При этом после отмены отмены заявки, позиция показывает только исполненную часть (60), а денег не остается совсем, как будто заявка выполнена целиком. Возможно я не так смотрю деньги, но на вопросы как смотреть мне так никто и не ответил.
|
|
Спасибо:
|
|
|
|
|
Support
|
Дата: 13.02.2019
Добрый день
Заявка может быть отвергнута системой, но не отменена. Отмена идёт только пользовательским кодом.
|
|
Спасибо:
|
|
|
|
|
eSKon
|
Дата: 13.02.2019
|
|
|
|
Вот кусок лога: 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);
Во-первых откройте уже секрет - я правильно беру эти значения или нет?
Во-вторых по логам видно, что заявка таки отменена, но деньги при этом не вернулись. Как так?
|
|
Спасибо:
|
|
|
|
|
eSKon
|
Дата: 13.02.2019
Попытался явно отменять заявку в такой ситуации - деньги всё равно не возвращаются. Что я не так делаю?
|
|
Спасибо:
|
|
|
|
|
eSKon
|
Дата: 13.02.2019
Если никого не смущает, что я разговариваю сам с собой, то продолжу. Сообщение об отмене заявки приходит из MarketEmulator.cs:
switch (order.TimeInForce) { case null: case TimeInForce.PutInQueue: { order.Balance = leftBalance;
if (executions.Count > 0) { if (leftBalance == 0) { order.OrderState = OrderStates.Done; this.AddInfoLog(LocalizedStrings.Str1164Params, order.TransactionId); }
result.Add(ToOrder(time, order)); } if (order.OrderType == OrderTypes.Market) { if (leftBalance > 0) { this.AddInfoLog(LocalizedStrings.Str1165Params, order.TransactionId, leftBalance);
order.OrderState = OrderStates.Done; result.Add(ToOrder(time, order)); } }
break; }
сообщение 1165 из локализации order.OrderState = OrderStates.Done; - это не отмена разве? Ну пусть отмена, но где деньги? Почему они так и висят в блокированных?
|
|
Спасибо:
|
|
|
|
|
Support
|
Дата: 14.02.2019
Пожалуйста, уточните, что подразумевается под фразой возврата? Вы имеете ввиду разблокировку денежных средств?
|
|
Спасибо:
|
|
|
|
|
eSKon
|
Дата: 14.02.2019
Для начала хотелось бы получить ответы на вопросы, заданные уже раз 10: Мне нужно получить: - количество свободных денег в портфеле - количество бумаг в портфеле - размер лота для конкретной бумаги (для истории очевидно это нужно устанавливать при создании Security, но какое поле?)
Откуда взять это?
Далее: почему не срабатывает OnOrderChanged?
Ну и наконец последний вопрос: (зависит от того правильно ли я получаю количество свободных денег) Поскольку получаю я это количество как Portfolio.CurrentValue.GetValueOrDefault(0) - Portfolio.BlockedValue.GetValueOrDefault(0) То очевидно именно разблокировка мне нужна, почему она не происходит при отмене заявки?
|
|
Спасибо:
|
|
|
|
|
eSKon
|
Дата: 14.02.2019
Складывается ощущение, что я какие-то неприличные вопросы задаю, на которые цивилизованные люди не отвечают :) Попробую поприличней сформулировать: 1. Как узнать сколько у меня свободных денег? Неблокированных, непотраченных, только тех, что в портфеле, без заёмных. 2. Как узнать сколько в портфеле купленных бумаг? 3. Как установить/получить размер лота? Как называется поле? 4. В каких случаях должен срабатывать OnOrderChanged и почему он у меня никогда не срабатывает? (тестировал только на истории) 5. Поможет ли мне решить проблему с отмененными заявками явное разбиение заявки на несколько?
|
|
Спасибо:
|
|
|
|