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


В стратегии 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);
    }
 }


Теги:


Спасибо:


Mikhail Sukhov

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


poison Перейти
по каким то конкретным инструментам?


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

poison Перейти

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


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

poison Перейти

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


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

poison Перейти

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


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

poison Перейти

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


То же самое.
Спасибо: poison

poison

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


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

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

Mikhail Sukhov

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


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

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


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

poison

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


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

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

Mikhail Sukhov

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


poison Перейти


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


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

loading
clippy