что с PositionManager?
Atom Ответить
04.04.2012


Всем привет!

Попробовал создать стратегию и вроде все получилось, но не могу получить размер позиции
Стратегия обрабатывается по приходу новых сделок
Код
 
protected override void OnStarting()
        {
            this
                .When(Security.SecurityNewTrades())
                .Do(MakePosition);
	
            base.OnStarting();
        }

В процедуре MakePosition такой код
Код

        ...
        var _myPosition = Trader.GetPosition(Portfolio, Security);
        	if (_myPosition != null)
        	{
	        Console.WriteLine("Position current value: {0}", _myPosition.CurrentValue);
		Console.WriteLine("Position begin value: {0}", _myPosition.BeginValue);
		Console.WriteLine("Position blocked value: {0}", _myPosition.BlockedValue);        		
        	}


	if (lastTrade.Volume > 3)
            {
                var condition = true;
                var conditionDirection = (first > last);
                if (condition && !_gotPosition)
                {
                    var direction = conditionDirection ? OrderDirections.Buy : OrderDirections.Sell;
                    var order = this.CreateOrder(direction, Security.GetMarketPrice(direction), Volume);
		   RegisterOrder(order);
		   _gotPosition = true;
                }
            }


PositionManager.Position всегда показывает 0.
Покопавшись на форуме нашел что можно получить позицию из трейдера, но Trader.GetPosition() у меня всегда возвращает null,
даже когда проходит не одна сделка, а несколько.
Пришлось заводить переменную _gotPosition чтобы понять что позиция есть.
Чуть не забыл, проверял на фьюче сбера.

Теги:


Спасибо:




4 Ответов
Alexander

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


Какой шлюз? Покажите скриншот квика если это квик где будет видно что позиция != 0 и при этом распечатайте для какого конкретно инструмента пытаетесь взять позу.
Спасибо:

Johny Cash

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


Да, это QuikTrader.
Версия стокшарпа 4.1 из дев ветки, на 4.0.23 пробовал, тоже самое.

Код

 public void MakePosition()
        {
            var lastTrade = Security.LastTrade;
            
            ...            

            [b]if (PositionManager.Position != 0)
                _gotPosition = true;[/b]            
            var _myPosition = Trader.GetPosition(Portfolio, Security);
        	if (_myPosition != null)
        	{
				Console.WriteLine("Position current value: {0}", _myPosition.CurrentValue);
				Console.WriteLine("Position begin value: {0}", _myPosition.BeginValue);
				Console.WriteLine("Position blocked value: {0}", _myPosition.BlockedValue);        		
        	}


			if (lastTrade.Volume > 3)
            {
                var condition = true;
                var conditionDirection = (first > last);
                if (condition && !_gotPosition)
                {
                    var direction = conditionDirection ? OrderDirections.Buy : OrderDirections.Sell;
                    var order = this.CreateOrder(direction, Security.GetMarketPrice(direction), Volume);
					RegisterOrder(order);
					_gotPosition = true;
                }
            }
        }



И еще момент, может это поможет решению, когда пытался регистрировать через MarketQuotingStrategy то в логах не проходило состояние State=Done, хотя до этого приходили состояния None и Active.
Автор топика
Спасибо:

Alexander

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


у вас и GetPosition возвращает null и PositionManager возвращает 0?
Что говорит verifier? Скиньте скриншот всего квика тогда
Спасибо:

Johny Cash

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


Пардон, это мой косяк, не экспортировал таблицу позиций по деривативам.
Посыпаю голову пеплом...
Автор топика
Спасибо:


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

loading
clippy