что с PositionManager?

что с PositionManager?
Atom
4/4/2012
Johny Cash


Всем привет!

Попробовал создать стратегию и вроде все получилось, но не могу получить размер позиции Стратегия обрабатывается по приходу новых сделок

 
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 чтобы понять что позиция есть. Чуть не забыл, проверял на фьюче сбера.


Tags:


Thanks:


Alexander

Avatar
Date: 4/4/2012
Reply


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

Thanks:

Johny Cash

Avatar
Date: 4/4/2012
Reply


Да, это 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.

Thanks:

Alexander

Avatar
Date: 4/4/2012
Reply


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

Thanks:

Johny Cash

Avatar
Date: 4/4/2012
Reply


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

Thanks:


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

loading
clippy