← Zurück

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

War dieses Thema hilfreich?

Thema teilen

Kommentare (4)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

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

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