что с PositionManager?
Atom
04.04.2012
Johny Cash


Всем привет!

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

        base.OnStarting();
    }

[/CODE] В процедуре MakePosition такой код [CODE=CSharp] ... 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;
            }
        }

[/CODE]

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


Теги:


Спасибо:


Alexander

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


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

Спасибо:

Johny Cash

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


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

[CODE=CSharp] 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;
            }
        }
    }

[/CODE] [URL=http://imglink.ru/show-image.php?id=bf036552a737026a6261937793be7591] [IMG]http://imglink.ru/thumbnails/04-04-12/eac49f64750b3fdb0fe4a486a49db21b.jpg[/IMG][/URL]

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

Спасибо:

Alexander

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


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

Спасибо:

Johny Cash

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


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

Спасибо:


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

loading
clippy