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

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


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


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 дочерних стратегии, каждая их которых посылает ордер для своего инструмента. После остановки стратегий получаю трейды вот так:

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


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


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

loading
clippy