← Voltar

что с PositionManager?

Всем привет!

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

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

Este tópico foi útil?

Compartilhar tópico

Comentários (4)

Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário

Alexander
Alexander

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

Johny Cash
Johny Cash Autor

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

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

Johny Cash
Johny Cash Autor

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