← Zurück

получение позиции

Здравствуйте. Подскажите, как получить в quik размер позиции? пробовал на примере sample console дописать следующее

<mark>```csharp private static Positions _position

trader.NewPositions += positions => { _position =positions.FirstOrDefault(p => p.portfolio =_portfolio); или _position =positions.FirstOrDefault(p => p.security =_lkoh); }

но _position остается равен null

что делать?
и по аналогии как получить значения из "позиции по деривативам"?
как я понимаю в StartExport(...) надо добавить (..., trader.DerivatePositionsTable), но как потом обращаться к этим значениям?

если кто сталкивался, помогите пожалуйста с кодом

War dieses Thema hilfreich?

Thema teilen

Kommentare (7)

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

freelancer
freelancer

Trader.GetPosition

finiss
finiss
finiss Autor

) пробовал, выдает 0

freelancer
freelancer

У меня так: _trader.StartExport(new DdeTable[] { _trader.SecuritiesTable, _trader.DerivativePortfoliosTable, _trader.DerivativePositionsTable, _trader.MyTradesTable, _trader.OrdersTable, _trader.StopOrdersTable, _trader.TradesTable });

и всё работает

Maniac
Maniac
_trader.NewPositions += positions => this.GuiAsync(() =>
{
	if (_position == null)
		_position = positions.FirstOrDefault(p => p.Security == _sec);
});

_sec - не должна быть null, и в таблице Позиции по бумагам или Позиции по деривативам должна быть строчка с данной бумагой _sec. Если нужна позиция по RIM2, например, то да, нужно добавить для экспорта _trader.DerivativePortfoliosTable (как в примере).

freelancer
freelancer

Позиция равна 0 даже тогда, когда строчки нет. GetPosition возвращает null

Доктор Сальватор

Если вы подразумераете под размером позиции количество купленных или проданных вами контрактов по определённому инструменту, значение которых отображается в таблице "Позиции по деривативам", то это значение можно получить следующим образом:


decimal PositionPoInstrumentu = _trader.GetPosition(portfolio, security).CurrentValue;

Результатом будет число контрактов со знаком. Если "+" - значит куплено, а если "-" - значит продано.

FinDirector
FinDirector
		Position GetPosition()
		{
			Position result = Trader.GetPosition(Portfolio, Security);
			if (result != null)
				return result;
			ManualResetEvent manualResetEvent = new ManualResetEvent(false);
			Action<IEnumerable<Position>> onNewPositions = p =>
			{
				if (Trader.GetPosition(Portfolio, Security) != null)
					manualResetEvent.Set();
			};
			Trader.NewPositions += onNewPositions;
			manualResetEvent.WaitOne(TimeSpan.FromSeconds(30));
			Trader.NewPositions -= onNewPositions;
			result = Trader.GetPosition(Portfolio, Security);
			return result;
		}