public void UpdatePositionOnBoard() { var balances = _kraken.GetBalance(); // var ret2 = JsonConvert.DeserializeObject<GetTradeBalanceResponse>(tradeBalance.ToString()); var jProperties = JToken.Parse(balances.ToString()).SelectToken("result");//.Children<JProperty>(); var children = jProperties.Children(); foreach (var portfolio in children) { string res = portfolio.ToString().Replace("{", "").Replace("}", "").Replace("\"", "").Replace(" ", ""); string[] resArr = res.Split(':'); PositionOnBoard position = new PositionOnBoard(); position.PortfolioName = "KrakenTradePortfolio"; position.SecurityNameCode = resArr[0]; position.ValueCurrent = resArr[1].ToDecimal(); position.ValueBegin = resArr[1].ToDecimal(); _myPortfolio.SetNewPosition(position); } if (NewPortfolioEvent != null) { NewPortfolioEvent(_myPortfolio); } }
internal Rook(Colour pieceColour, PositionOnBoard positionOnBoard, BoardAI boardAI) { color = pieceColour; position = positionOnBoard; pieceID = color == Colour.Black ? 9 : 10; LinktoBoard(boardAI); }
internal Cannon(Colour pieceColour, PositionOnBoard positionOnBoard, BoardAI boardAI) { color = pieceColour; position = positionOnBoard; pieceID = color == Colour.Black ? 11 : 12; LinktoBoard(boardAI); }
internal Knight(Colour pieceColour, PositionOnBoard positionOnBoard, BoardAI boardAI) { color = pieceColour; position = positionOnBoard; pieceID = color == Colour.Black ? 7 : 8; LinktoBoard(boardAI); }
public King(Colour pieceColour, PositionOnBoard positionOnBoard, BoardAI boardAI) { color = pieceColour; position = positionOnBoard; pieceID = color == Colour.Black ? 1 : 2; LinktoBoard(boardAI); }
private PositionOnBoard GetLocationForNewPart(SnakeDirection snakeDirection) { var location = Last.Location; var newLocation = new PositionOnBoard(location.PosLeftCanvas, location.PosTopCanvas); switch (snakeDirection) { case SnakeDirection.Up: newLocation.PosTopCanvas += 22; break; case SnakeDirection.Right: newLocation.PosLeftCanvas -= 22; break; case SnakeDirection.Down: newLocation.PosTopCanvas -= 22; break; case SnakeDirection.Left: newLocation.PosLeftCanvas += 22; break; } return(newLocation); }
private decimal GetBalance(BotTabSimple _tab) { //return 300; if (_tab.Connector.MyServer.ServerType == ServerType.Tester || _tab.Connector.MyServer.ServerType == ServerType.Optimizer) { return(_tab.Portfolio.ValueCurrent); } if (_tab.Connector.MyServer.ServerType == ServerType.BinanceFutures) { List <PositionOnBoard> bal = _tab.Portfolio.GetPositionOnBoard(); if (bal != null && bal.Count > 0) { PositionOnBoard b = bal.FindLast(x => x.SecurityNameCode == "USDT"); if (b != null) { return(b.ValueCurrent); } } } if (_tab.Connector.MyServer.ServerType == ServerType.BitMex) { return(_tab.Portfolio.ValueCurrent - _tab.Portfolio.ValueBlocked); } return(0); }
public static Portfolio Create(JToken data, string portfolioName) { var portfolio = Create(portfolioName); portfolio.ValueCurrent = 1; portfolio.ValueBlocked = 1; portfolio.ValueBegin = 1; foreach (var jtPosition in data) { PositionOnBoard pos = new PositionOnBoard(); pos.PortfolioName = portfolio.Number; pos.SecurityNameCode = jtPosition.Path.Replace("result.", ""); var wallet_balace = jtPosition.First.SelectToken("wallet_balance").Value <decimal>(); var realizedPnl = jtPosition.First.SelectToken("realised_pnl").Value <decimal>(); pos.ValueBegin = wallet_balace; pos.ValueCurrent = wallet_balace + realizedPnl; pos.ValueBlocked = jtPosition.First.SelectToken("used_margin").Value <decimal>(); if (pos.ValueCurrent > 0 || pos.ValueBlocked > 0) { portfolio.SetNewPosition(pos); } } return(portfolio); }
private PositionOnBoard GetLocationForNewPart(SnakeDirectionType snakeDirection) { var lastLocation = SnakeObj.Last.Location; var newLocation = new PositionOnBoard(lastLocation.PosLeftCanvas, lastLocation.PosTopCanvas); switch (snakeDirection) { case SnakeDirectionType.Up: newLocation.PosTopCanvas += 20; break; case SnakeDirectionType.Right: newLocation.PosLeftCanvas -= 20; break; case SnakeDirectionType.Down: newLocation.PosTopCanvas -= 20; break; case SnakeDirectionType.Left: newLocation.PosLeftCanvas += 20; break; } return(newLocation); }
public override void GetPortfolios() { string timeStamp = TimeManager.GetUnixTimeStampSeconds().ToString(); var headers = new Dictionary <string, string>(); headers.Add("Timestamp", timeStamp); headers.Add("KEY", _publicKey); headers.Add("SIGN", _signer.GetSignStringRest("GET", _path + _wallet + "/accounts", "", "", timeStamp)); var result = _requestREST.SendGetQuery("GET", _host + _path + _wallet, "/accounts", headers); if (result.Contains("failed")) { SendLogMessage("GateIFutures: Cant get porfolios", LogMessageType.Error); return; } GfAccount accountInfo = JsonConvert.DeserializeObject <GfAccount>(result); Portfolio portfolio = Portfolios[0]; portfolio.ClearPositionOnBoard(); PositionOnBoard pos = new PositionOnBoard(); pos.SecurityNameCode = accountInfo.Currency; pos.ValueBegin = Converter.StringToDecimal(accountInfo.Total); pos.ValueCurrent = Converter.StringToDecimal(accountInfo.Available); pos.ValueBlocked = Converter.StringToDecimal(accountInfo.PositionMargin + accountInfo.OrderMargin); portfolio.SetNewPosition(pos); OnPortfolioEvent(Portfolios); }
internal Pawn(Colour pieceColour, PositionOnBoard positionOnBoard, BoardAI boardAI) { color = pieceColour; position = positionOnBoard; pieceID = color == Colour.Black ? 13 : 14; LinktoBoard(boardAI); }
private void EventsOnOnFuturesClientHolding(FuturesClientHolding futPos) { lock (changeFutPosLocker) { if (_portfolios != null && _portfolios.Count != 0) { Portfolio needPortfolio = _portfolios.Find(p => p.Number == futPos.trdAccId); if (needPortfolio == null) { return; } PositionOnBoard newPos = new PositionOnBoard(); newPos.PortfolioName = futPos.trdAccId; newPos.SecurityNameCode = futPos.secCode; newPos.ValueBegin = Convert.ToDecimal(futPos.startNet); newPos.ValueCurrent = Convert.ToDecimal(futPos.totalNet); newPos.ValueBlocked = 0; needPortfolio.SetNewPosition(newPos); if (PortfolioEvent != null) { PortfolioEvent(_portfolios); } } } }
public Portfolio Create(JToken data, string portfolioName) { var portfolio = Create(portfolioName); var collateral = data.SelectToken(CollateralPath).Value <decimal>(); var freeCollateral = data.SelectToken(FreeCollateralPath).Value <decimal>(); var positions = data.SelectTokens(PositionsPath).Children(); portfolio.ValueCurrent = data.SelectToken(TotalAccountValuePath).Value <decimal>(); portfolio.ValueBlocked = collateral - freeCollateral; foreach (var jtPosition in positions) { PositionOnBoard pos = new PositionOnBoard(); pos.PortfolioName = portfolio.Number; pos.SecurityNameCode = jtPosition.SelectToken(NamePath).ToString(); var cost = jtPosition.SelectToken(CostPath).Value <decimal>(); var realizedPnl = jtPosition.SelectToken(PnlPricePath).Value <decimal>(); pos.ValueBegin = cost; pos.ValueCurrent = cost + realizedPnl; pos.ValueBlocked = jtPosition.SelectToken(CollateralUsedPath).Value <decimal>(); if (pos.ValueCurrent > 0 || pos.ValueBlocked > 0) { portfolio.SetNewPosition(pos); } } return(portfolio); }
/// <summary> /// обновилась позиция на бирже /// </summary> /// <param name="position">позиция по инструменту на бирже</param> private void UpdatePosition(PositionOnBoard position) { lock (_lockerUpdatePosition) { try { if (_portfolios == null || _portfolios.Count == 0) { return; } Portfolio myPortfolio = _portfolios.Find(portfolio1 => portfolio1.Number == position.PortfolioName); if (myPortfolio == null) { return; } myPortfolio.SetNewPosition(position); _portfolioToSend.Enqueue(_portfolios); } catch (Exception error) { SendLogMessage(error.ToString(), LogMessageType.Error); } } }
private void UpDatePosition(PositionOnBoard position) { lock (_lockerUpDatePosition) { Portfolio myPortfolio = null; if (_portfolios != null) { myPortfolio = _portfolios.Find(portfolio => portfolio.Number.Split('@')[0] == position.PortfolioName); } if (myPortfolio == null) { PositionOnBoardSander sender = new PositionOnBoardSander(); sender.PositionOnBoard = position; sender.TimeSendPortfolio += UpDatePosition; Thread worker = new Thread(sender.Go); worker.IsBackground = true; worker.CurrentCulture = new CultureInfo("ru-RU"); worker.Start(); return; } myPortfolio.SetNewPosition(position); if (UpdatePortfolios != null) { UpdatePortfolios(_portfolios); } } }
public static Vector FromEnum(PositionOnBoard value) { switch (value) { case PositionOnBoard.One: return(new Vector(0, 0)); case PositionOnBoard.Two: return(new Vector(2, 0)); case PositionOnBoard.Three: return(new Vector(4, 0)); case PositionOnBoard.Four: return(new Vector(0, 2)); case PositionOnBoard.Five: return(new Vector(2, 2)); case PositionOnBoard.Six: return(new Vector(4, 2)); case PositionOnBoard.Seven: return(new Vector(0, 4)); case PositionOnBoard.Eight: return(new Vector(2, 4)); case PositionOnBoard.Nine: return(new Vector(4, 4)); default: return(new Vector(0, 0)); } }
internal Bishop(Colour pieceColour, PositionOnBoard positionOnBoard, BoardAI boardAI) { color = pieceColour; position = positionOnBoard; pieceID = color == Colour.Black ? 5 : 6; LinktoBoard(boardAI); }
void Client_NewPortfolio(BalanceInfo balance) { lock (_locker) { if (_portfolios == null) { _portfolios = new List <Portfolio>(); } var cryptoPortfolio = new Portfolio(); cryptoPortfolio.Number = balance.Name; var positionsOnBoard = new List <PositionOnBoard>(); foreach (var portfolio in balance.Balances) { var needPos = positionsOnBoard.Find(p => p.SecurityNameCode == portfolio.currency); if (needPos == null) { needPos = new PositionOnBoard(); needPos.SecurityNameCode = portfolio.currency; if (portfolio.type == "available") { needPos.ValueCurrent = ParseDecimal(portfolio.value); } else if (portfolio.type == "trade") { needPos.ValueBlocked = ParseDecimal(portfolio.value); } if (needPos.ValueCurrent != 0 || needPos.ValueBlocked != 0) { positionsOnBoard.Add(needPos); } } else { if (portfolio.type == "available") { needPos.ValueCurrent = ParseDecimal(portfolio.value); } else if (portfolio.type == "trade") { needPos.ValueBlocked = ParseDecimal(portfolio.value); } } } foreach (var pos in positionsOnBoard) { cryptoPortfolio.SetNewPosition(pos); } _portfolios.Add(cryptoPortfolio); PortfolioEvent?.Invoke(_portfolios); } }
// Start is called before the first frame update void Start() { gestureInteraction = GetComponent <PositionOnBoard>(); camera = Camera.main.transform; routeToGo = 0; tParam = 0f; coroutineAllowed = true; nextR1 = new Vector3(0, 0, 0); }
private void PlazaControllerOnUpdatePosition(PositionOnBoard positionOnBoard) { lock (_lockerUpdatePosition) { // write in the security name right description, becaus before in this line some ID / забиваем в название инструмента правдивое описание, т.к. до этого в этой строке некий ID Security security = null; if (_securities != null) { security = _securities.Find(security1 => security1.NameId == positionOnBoard.SecurityNameCode || security1.Name == positionOnBoard.SecurityNameCode); } if (security == null) { PositionOnBoardSander sender = new PositionOnBoardSander(); sender.PositionOnBoard = positionOnBoard; sender.TimeSendPortfolio += PlazaControllerOnUpdatePosition; Thread worker = new Thread(sender.Go); worker.CurrentCulture = new CultureInfo("ru-RU"); worker.IsBackground = true; worker.Start(); return; } positionOnBoard.SecurityNameCode = security.Name; Portfolio myPortfolio = null; if (_portfolios != null) { myPortfolio = _portfolios.Find(portfolio => portfolio.Number == positionOnBoard.PortfolioName); } if (myPortfolio == null) { PositionOnBoardSander sender = new PositionOnBoardSander(); sender.PositionOnBoard = positionOnBoard; sender.TimeSendPortfolio += PlazaControllerOnUpdatePosition; Thread worker = new Thread(sender.Go); worker.CurrentCulture = new CultureInfo("ru-RU"); worker.IsBackground = true; worker.Start(); return; } myPortfolio.SetNewPosition(positionOnBoard); if (PortfolioEvent != null) { PortfolioEvent(_portfolios); } } }
private void _client_NewPortfolioMargin(AccountResponseMargin portfs) { try { if (portfs == null) { return; } if (portfs.userAssets == null) { return; } Portfolio myPortfolio = _portfolios.Find(p => p.Number == "BinanceMargin"); if (myPortfolio == null) { Portfolio newPortf = new Portfolio(); newPortf.Number = "BinanceMargin"; newPortf.ValueBegin = 1; newPortf.ValueCurrent = 1; _portfolios.Add(newPortf); myPortfolio = newPortf; } foreach (var onePortf in portfs.userAssets) { PositionOnBoard newPortf = new PositionOnBoard(); newPortf.SecurityNameCode = onePortf.asset; newPortf.ValueBegin = onePortf.free.ToDecimal(); newPortf.ValueCurrent = onePortf.free.ToDecimal(); newPortf.ValueBlocked = onePortf.locked.ToDecimal(); myPortfolio.SetNewPosition(newPortf); } if (PortfolioEvent != null) { PortfolioEvent(_portfolios); } } catch (Exception error) { SendLogMessage(error.ToString(), LogMessageType.Error); } }
private decimal GetBalance() { if (_tab.Connector.MyServer.ServerType == ServerType.Tester || _tab.Connector.MyServer.ServerType == ServerType.Optimizer) { if (_tab.Portfolio.ValueBlocked != 0) { Console.WriteLine("Заблокировано " + _tab.Portfolio.ValueBlocked); } return(_tab.Portfolio.ValueCurrent); } if (_tab.Connector.MyServer.ServerType == ServerType.BinanceFutures) { List <PositionOnBoard> bal = _tab.Portfolio.GetPositionOnBoard(); if (bal != null && bal.Count > 0) { PositionOnBoard b = bal.FindLast(x => x.SecurityNameCode == "USDT"); if (b != null) { return(b.ValueCurrent); } } } if (_tab.Connector.MyServer.ServerType == ServerType.Binance) { List <PositionOnBoard> bal = _tab.Portfolio.GetPositionOnBoard(); if (bal != null && bal.Count > 0) { PositionOnBoard b = bal.FindLast(x => x.SecurityNameCode == _tab.Securiti.NameClass); if (b != null) { if (_tab.Connector.PortfolioName == "BinanceMargin" && b.ValueCurrent == 0 && b.ValueBlocked != 0) { int _posCountNaw = GetOpenPositionsCount(); if (_posCountNaw > 3 || _posCountNaw == 0) //тк 3е плечо на маржиналке то ограничимся 3мя позициями, а если нет открытых то гдето ошибка { return(0); } return(b.ValueBlocked / _posCountNaw); } return(b.ValueCurrent); } } } if (_tab.Connector.MyServer.ServerType == ServerType.BitMex) { return(_tab.Portfolio.ValueCurrent - _tab.Portfolio.ValueBlocked); } return(0); }
private void UpdateSpotPosition() { while (true) { Thread.Sleep(5000); if (QuikLua != null) { bool quikStateIsActiv = QuikLua.Service.IsConnected().Result; } if (QuikLua == null) { continue; } if (ServerStatus == ServerConnectStatus.Disconnect) { continue; } List <DepoLimitEx> spotPos = QuikLua.Trading.GetDepoLimits().Result; Portfolio needPortf; foreach (var pos in spotPos) { if (pos.LimitKind == LimitKind.T0) { needPortf = _portfolios.Find(p => p.Number == pos.TrdAccId); PositionOnBoard position = new PositionOnBoard(); if (needPortf != null) { position.PortfolioName = pos.TrdAccId; position.ValueBegin = pos.OpenBalance; position.ValueCurrent = pos.CurrentBalance; position.ValueBlocked = pos.LockedSell; position.SecurityNameCode = pos.SecCode; needPortf.SetNewPosition(position); } } } if (PortfolioEvent != null) { PortfolioEvent(_portfolios); } } }
/// <summary> /// got portfolio data /// пришли данные по портфелям /// </summary> /// <param name="unitedPortfolio">portfolio in Transaq format / портфель в формате Transaq</param> private void ClientOnUpdatePortfolio(UnitedPortfolio unitedPortfolio) { if (_portfolios == null) { _portfolios = new List <Portfolio>(); } var needPortfolio = _portfolios.Find(p => p.Number == unitedPortfolio.Union); if (needPortfolio == null) { needPortfolio = new Portfolio() { Number = unitedPortfolio.Union, ValueBegin = Convert.ToDecimal(unitedPortfolio.Open_equity.Replace(".", ",")), ValueCurrent = Convert.ToDecimal(unitedPortfolio.Equity.Replace(".", ",")), }; _portfolios.Add(needPortfolio); } else { needPortfolio.ValueBegin = Convert.ToDecimal(unitedPortfolio.Open_equity.Replace(".", ",")); needPortfolio.ValueCurrent = Convert.ToDecimal(unitedPortfolio.Equity.Replace(".", ",")); } needPortfolio.ClearPositionOnBoard(); if (unitedPortfolio.Asset != null && unitedPortfolio.Asset.Count != 0) { foreach (var asset in unitedPortfolio.Asset) { for (int i = 0; i < asset.Security.Count; i++) { PositionOnBoard pos = new PositionOnBoard() { SecurityNameCode = asset.Security[i].Seccode, ValueBegin = Convert.ToDecimal(asset.Security[i].Open_balance.Replace(".", ",")), ValueCurrent = Convert.ToDecimal(asset.Security[i].Balance.Replace(".", ",")), ValueBlocked = asset.Security[i].Buying == "0" ? Convert.ToDecimal(asset.Security[i].Selling.Replace(".", ",")) : Convert.ToDecimal(asset.Security[i].Buying.Replace(".", ",")), PortfolioName = needPortfolio.Number, }; needPortfolio.SetNewPosition(pos); } } } PortfolioEvent?.Invoke(_portfolios); }
/// <summary> /// take balance /// взять баланс /// </summary> public void GetBalance() { _portfolio = new Portfolio(); _portfolio.Number = "ExmoPortfolio"; List <string> currencies = GetCurrencies(); for (int i = 0; i < currencies.Count; i++) { PositionOnBoard positionOnBoard = new PositionOnBoard(); positionOnBoard.PortfolioName = _portfolio.Number; positionOnBoard.SecurityNameCode = currencies[i]; _portfolio.SetNewPosition(positionOnBoard); } }
public void UpdPositions() { string url = _url + "portfolio"; var jsonCurrency = ApiQuery(url, "GET", new Dictionary <string, string>()); if (jsonCurrency == null) { return; } var jProperties = JToken.Parse(jsonCurrency).SelectToken("payload");//.Children<JProperty>(); var children = jProperties.Children().Children().Children(); string res = children.ToString(); if (res == "") { return; } foreach (var position in children) { PositionOnBoard pos = new PositionOnBoard(); pos.SecurityNameCode = position.SelectToken("ticker").ToString(); pos.ValueCurrent = position.SelectToken("balance").ToString().ToDecimal(); pos.PortfolioName = position.SelectToken("expectedYield").SelectToken("currency").ToString(); Portfolio myPortfolio = _portfolios.Find(p => p.Number == pos.PortfolioName); if (myPortfolio == null) { continue; } myPortfolio.SetNewPosition(pos); } if (UpdatePortfolio != null) { for (int i = 0; i < _portfolios.Count; i++) { UpdatePortfolio(_portfolios[i]); } } }
void _ibClient_NewPortfolioPosition(SecurityIb contract, string accountName, int value) { try { if (_portfolios == null || _portfolios.Count == 0) { return; } // see if you already have the right portfolio / смотрим, есть ли уже нужный портфель Portfolio portfolio = _portfolios.Find(portfolio1 => portfolio1.Number == accountName); if (portfolio == null) { //SendLogMessage("обновляли позицию. Не можем найти портфель"); return; } // see if you already have the right Os.Engine security / смотрим, есть ли нужная бумага в формате Os.Engine string name = contract.Symbol + "_" + contract.SecType + "_" + contract.Exchange; if (_securities == null || _securities.Find(security => security.Name == name) == null) { //SendLogMessage("обновляли позицию. Не можем найти бумагу. " + contract.Symbol); return; } // update the contract position / обновляем позицию по контракту PositionOnBoard positionOnBoard = new PositionOnBoard(); positionOnBoard.SecurityNameCode = name; positionOnBoard.PortfolioName = accountName; positionOnBoard.ValueCurrent = value; portfolio.SetNewPosition(positionOnBoard); if (PortfolioEvent != null) { PortfolioEvent(_portfolios); } } catch (Exception error) { SendLogMessage(error.ToString(), LogMessageType.Error); } }
public override void GetPortfolios() { if (Portfolios == null) { return; } foreach (var portfolio in Portfolios) { string url = _privateUriBuilder.Build("GET", $"/v1/account/accounts/{portfolio.Number.Split('_')[1]}/balance"); var httpClient = new HttpClient(); string response = httpClient.GetStringAsync(url).Result; if (response.Contains("Incorrect Access key")) { SendLogMessage("Huobi: Incorrect Access API key", LogMessageType.Error); return; } GetAccountBalanceResponse accountBalance = JsonConvert.DeserializeObject <GetAccountBalanceResponse>(response); //portfolio.ClearPositionOnBoard(); for (int i = 0; accountBalance.data != null && i < accountBalance.data.list.Length; i++) { var currentData = accountBalance.data.list[i]; if (currentData.balance == 0) { continue; } PositionOnBoard pos = new PositionOnBoard(); pos.SecurityNameCode = currentData.currency; pos.PortfolioName = portfolio.Number; pos.ValueCurrent = currentData.balance; pos.ValueBegin = currentData.balance; portfolio.SetNewPosition(pos); } } OnPortfolioEvent(Portfolios); }
///<summary> /// Метод, который содержит логику реализующую ход игрока ///</summary> ///<param name="actor">Игрок</param> internal bool PlayersTurn(Actor actor) { Int32 left = Console.CursorLeft; Int32 top = Console.CursorTop; Console.SetCursorPosition(0, mapHeight); bool isCanBePlaced = true; while (isCanBePlaced) { Console.WriteLine($"Hey, {actor.Name} enter position(example: 1): "); PositionOnBoard position = (PositionOnBoard)Int32.Parse(Console.ReadLine()); isCanBePlaced = !map.SetActorSymbolToBoard(actor, position); } Console.SetCursorPosition(left, top); return(CheckPlayersWin(actor)); }
public override void GetPortfolios() { if (Portfolios == null) { return; } foreach (var portfolio in Portfolios) { string url = _privateUriBuilder.Build("POST", "/swap-api/v1/swap_account_info"); StringContent httpContent = new StringContent(new JsonObject().ToString(), Encoding.UTF8, "application/json"); var httpClient = new HttpClient(); var response = httpClient.PostAsync(url, httpContent).Result; string result = response.Content.ReadAsStringAsync().Result; if (result.Contains("Incorrect Access key")) { SendLogMessage("Huobi: Incorrect Access API key", LogMessageType.Error); return; } FuturesAccountInfo accountInfo = JsonConvert.DeserializeObject <FuturesAccountInfo>(result); portfolio.ClearPositionOnBoard(); for (int i = 0; accountInfo.data != null && i < accountInfo.data.Count; i++) { var currentData = accountInfo.data[i]; PositionOnBoard pos = new PositionOnBoard(); pos.SecurityNameCode = currentData.symbol; pos.ValueBegin = currentData.margin_available; pos.ValueCurrent = currentData.margin_available; pos.ValueBlocked = currentData.margin_frozen; portfolio.SetNewPosition(pos); } } OnPortfolioEvent(Portfolios); }