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

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


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


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

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

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

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


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: по каким то конкретным инструментам?

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

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

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

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

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

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

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

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

То же самое.

Thanks: poison

poison

Avatar
Date: 5/21/2014
Reply


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

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

Thanks:

Mikhail Sukhov

Avatar
Date: 5/21/2014
Reply


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

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

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

Thanks: poison

poison

Avatar
Date: 5/22/2014
Reply


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


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:

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

Thanks: poison


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

loading
clippy