order.State
Atom
26.05.2010


Почему то всегда возвращает None..хотя состояние меняется..в чём может
быть дело?

Теги:


Спасибо:


<< < 2 3 4 5  >
Mikhail Sukhov

Фотография
Дата: 02.07.2010
Ответить


А стоп заявку потом как-нибудь передавали в стратегию? Могли бы Вы еще
посмотреть на все свои сделки в системе (ITrader.GetMyTrades(sec)). По
ним какая позиция возвращается?

On 1 июл, 14:13, Alexander <amukhanch...@gmail.com> wrote:

Спасибо:

Alexander

Фотография
Дата: 02.07.2010
Ответить


Стоп заявку обязательно передавал в стратегию с помощью base.AddOrder.
Вот прям кусок кода:

var stopOrder = new Order
{

Account = Account,

Type = OrderTypes.Conditional,

Volume = Volume,

Security = Security,

Direction = OrderDirections.Buy,

Price = Security.MaxPrice,

StopCondition = new QuikStopCondition

{

Type =

QuikStopConditionTypes.

StopLimit,

StopPrice = stopPrice,
}
};

Trader.RegisterOrder(stopOrder);
base.AddOrder(stopOrder);

AddLog(StrategyErrorStates.None,
"Регистрируем
стопзаявку по цене {0}",
new object[]
{
stopPrice
});

On 2 июл, 02:38, Mikhail Sukhov <msou...@gmail.com> wrote:

Спасибо:

Mikhail Sukhov

Фотография
Дата: 02.07.2010
Ответить


Готов сразу огорчить - Strategy не умеет работать со стоп заявками. Не
делал я в них поддержку - как то все собствеными эмуляциями обходился.
Пока не уверен, есть ли время для фикса, так что давайте будем искать
пути обхода. Как вариант, расчитывать позицию самостоятельно, через
событие ITrader.NewMyTrades. Стоп заявки ессесно где-то сохранять
нужно, и смотреть появление производной заявки. Кстати, Вы написали,
что не поняли, что это такое. Это

http://stocksharp.com/doc/help/html/P_Ecng_Trading_BusinessEntities_O...


On 2 июл, 02:47, Alexander <amukhanch...@gmail.com> wrote:

Спасибо:

Alexander

Фотография
Дата: 02.07.2010
Ответить


Жаль, буду тогда руками считать, да.
неправильный подсчёт позиции через PositionManager ушёл, когда изменил
логику, как отписался в соседнем топике, спасибо.

On 2 июл, 12:34, Mikhail Sukhov <msou...@gmail.com> wrote:

Спасибо:

Alexander

Фотография
Дата: 03.07.2010
Ответить


Михаил, хорошая кстати задачка получилась - посчитать активную позицию
для стратегии. =)
Я пока пришёл к такому варинту, если не прав в рассуждениях -
исправьте, пожалуйста.

PositionManager для стратегии может работать только с заявками,
стопзаявки не учитываются. Поэтому активная позиция в стратегии равна
PositionManager.Position + <число контрактов, сработавших по стопу>.
Для этого при выставлении стоп заявки мы не регистрируем её в
стратегии (base.AddOrder) (обычные заявки регистрируются в стратегии
как раньше), а сохраняем её, для отслеживания что она сработала
(условие что DerivedOrder != null). Если сработала - прибавляем число
контрактов которое сработало по DerivedOrder.
У меня вышло вот что:

ActivePosition = PositionManager.Position + GetStopPosition();

(где GetStopPosition (stopOrders -
ThreadSafeObservableCollection<Order> из заявок, зарегистрированных в
стратегии):)

private int GetStopPosition()
{
return (from stopOrder in stopOrders
where stopOrder.DerivedOrder != null
where stopOrder.DerivedOrder.State ==
OrderStates.Active || stopOrder.DerivedOrder.State ==
OrderStates.Matched
let stopVolume = stopOrder.DerivedOrder.Volume -
stopOrder.DerivedOrder.Balance
let mult = stopOrder.DerivedOrder.Direction ==
OrderDirections.Buy ? 1 : -1
select stopVolume*mult).Sum();
}

(или не в LINQ варианте:
private int GetStopPosition()
{
int resultStopPosition = 0;

foreach (Order stopOrder in stopOrders)
{
if (stopOrder.DerivedOrder != null)
{
if (stopOrder.DerivedOrder.State ==
OrderStates.Active || stopOrder.DerivedOrder.State ==
OrderStates.Matched)
{
int stopVolume = stopOrder.DerivedOrder.Volume
- stopOrder.DerivedOrder.Balance;
int mult = stopOrder.DerivedOrder.Direction ==
OrderDirections.Buy ? 1 : -1;
resultStopPosition += stopVolume*mult;
}
}
}

return resultStopPosition;
}
)

Всё верно? Таким образом, никаких MyNewTrades отслеживать не придётся
(там ведь ещё надо понимать, какие заявки сгенерированы стратегией, а
какие - нет. Всё это, конечно, обходится, но весь вопрос в затратах).

On 2 июл, 12:34, Mikhail Sukhov <msou...@gmail.com> wrote:

Спасибо:

Alexander

Фотография
Дата: 03.07.2010
Ответить


Или просто все, не равные null, DerivedOrder от стопов добавлять в
стратегию методом base.AddOrder.
Они, кстати, проверяются при добавлении на совпадение, т.е. что будет,
если добавить одну и туже DerivedOrder заявку через base.AddOrder?
Если не проверяются - надо просто хранить список уже добавленных
DerivedOrder и проверять при добавлении, что уже не добавили.

On 3 июл, 15:35, Alexander <amukhanch...@gmail.com> wrote:

Спасибо:

Mikhail Sukhov

Фотография
Дата: 05.07.2010
Ответить


1. Открыл для себя let конструкцию. Или это не C#?
2. Думаю, стоит проверять лишь на stopOrder.DerivedOrder != null.
3. Я бы подписался еще и на StopOrdersChanged. Вот там бы дожидался
stopOrder.DerivedOrder != null после чего подсчитывал бы позицию уже
по обычной заявке.

On 3 июл, 15:35, Alexander <amukhanch...@gmail.com> wrote:

Спасибо:

Mikhail Sukhov

Фотография
Дата: 05.07.2010
Ответить


Нет, не проверяются. Недочет, конечно же. Но попробовать с AddOrder
стоит.

On 3 июл, 16:04, Alexander <amukhanch...@gmail.com> wrote:

Спасибо:

Alexander

Фотография
Дата: 05.07.2010
Ответить


1) Это LINQ запрос был =) Порой на нём проще что-то написать. "let a =
b" == "пусть далее в запросе a равно b"
2) Т.е. дополнительно проверять State не стоит? Это пока я посылаю
стоп заявки по маркету на фортсе (по цене верхнего или нижнего
лимита), потом может измениться на лимитные цены, потому вроде стоит
проверять в любом случае.
3) Попробую для начала сделать как расписал - внутри стратегии
отслеживать, а не через событие. Т.к. у меня к каждому счёту приписана
своя отдельная стратегия (т.е. одна стратегия может быть приписана
нескольким счетам) - так будет пока проще.

Или через AddOrder, сохраняя все DerivedOrder, которые не равны null.
Так даже более интересное решение вышло. =)

Большое спасибо за такую всестороннюю поддержку! С нетерпением жду
новой версии. =)

On 5 июл, 13:54, Mikhail Sukhov <msou...@gmail.com> wrote:

Спасибо:

Dmitriy Klimov

Фотография
Дата: 22.10.2010
Ответить


Alexander, к какому конечному решению вы пришли при подсчете активной позиции для стратегии? И что за метод AddOrder? Не нашел такого...
Спасибо:
<< < 2 3 4 5  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy