Получение размера позиции


Получение размера позиции
Atom
5/20/2014


В стратегии ArbitrageStrategy проверка открытых позиций по паре осуществляется вот так:

Code

private bool NoPositions
{
   get { return PositionManager.Positions.All(p => p.CurrentValue == 0); }
}


Это перебор по всем открытым позициям в quik или по всем позициям по каким то конкретным инструментам?
Из какой таблицы берутся данные?

Что если по счету будут открыты другие позиции, не относящиеся к этой стратегии?
Или если будут параллельно работать другие стратегии по другим инструментам?
Как в данном случае корректно получить наличие позиций?


Вот так будет правильнее или то же самое?

Code

private bool NoPositions
{
    get {
       return (PositionManager.Positions.FirstOrDefault(p => p.Security == Security1).CurrentValue == 0 &&
             PositionManager.Positions.FirstOrDefault(p => p.Security == Security2).CurrentValue == 0);
    }
 }


Tags:


Thanks:


Mikhail Sukhov

Avatar
Date: 5/21/2014
Reply


poison Go to
по каким то конкретным инструментам?


Strategy.Security конечно же. Дочерние позиции "на верх" не пробрасываются по понятным причинам.

poison Go to

Из какой таблицы берутся данные?


Расчет по заявка (баланс).

poison Go to

Что если по счету будут открыты другие позиции, не относящиеся к этой стратегии?


Пользовательские действия игнорируются стратегией.

poison Go to

Или если будут параллельно работать другие стратегии по другим инструментам?
Как в данном случае корректно получить наличие позиций?


Стратегии работают независимо друг от друга.

poison Go to

Вот так будет правильнее или то же самое?


То же самое.
Thanks: poison

poison

Avatar
Date: 5/21/2014
Reply


А как быть, если в стратегии используется 2 инструмента и нужно учитывать изменения позиций по ним?

Правильно ли я понял, что в стратегии учитываются все позиции, ордера которых были сгенерированы с помощью это стратегии?
То есть, не важно какой инструмент выбран в Strategy.Security, если я буду из этой стратегии проводить сделки и по другим инструментам, они тоже будут учитываться?
Thanks:

Mikhail Sukhov

Avatar
Date: 5/21/2014
Reply


poison Go to
А как быть, если в стратегии используется 2 инструмента и нужно учитывать изменения позиций по ним?

Правильно ли я понял, что в стратегии учитываются все позиции, ордера которых были сгенерированы с помощью это стратегии?
То есть, не важно какой инструмент выбран в Strategy.Security, если я буду из этой стратегии проводить сделки и по другим инструментам, они тоже будут учитываться?


Надо использовать дочернии стратегии, и из родительской стратегии выдавать сигналы.
Thanks: poison

poison

Avatar
Date: 5/22/2014
Reply


Никак не получается получить трейды для второго инструмента. У меня дочерняя стратегия pairOrderStrategy, которая сама содержит 2 дочерних стратегии, каждая их которых посылает ордер для своего инструмента. После остановки стратегий получаю трейды вот так:

Code

var security1AvgPrice = pairOrderStrategy.FastOrderStrategy1.MyTrades
                                        .Where(t => t.Trade.Security == Security1).GetAveragePrice() * _s1PriceCoef;
var security2AvgPrice = pairOrderStrategy.FastOrderStrategy2.MyTrades
                                        .Where(t => t.Trade.Security == Security2).GetAveragePrice() * _s2PriceCoef;


Второй инструмент всегда возвращает 0 в MyTrades, хотя там есть и ордера и позиции. Я пробую вручную задавать Strategy.Security при инициализации стратегии, но это не помогает.
Подозреваю, что так как эти стратегии дочерние, то Security у них такой же как и у родительской и поэтому трейды для второго инструмента игнорируются.

Можно ли получить как то трейды для второго инструмента?
Thanks:

Mikhail Sukhov

Avatar
Date: 5/23/2014
Reply


poison Go to


Скорее всего стратегия останавливается до того, как получает всю инфомрацию. Надо использовать Strategy.WaitAllTrades
Thanks: poison


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy