// konstruktor, wywoływany spod BosPapers.Update() internal BosPaper(BosAccount account, DTO.Paper data) { Account = account; Instrument = BosInstrument.Create(data.Instrument); Quantity110 = data.Account110; Quantity120 = data.Account120; }
/// <summary> /// Wysłanie do systemu nowego zlecenia z podanymi parametrami. /// <para>Zobacz też metody klasy BosInstrument: Order, Buy, Sell - które od razu określają, /// którego instrumentu dane zlecenie ma dotyczyć i ewentualnie prezyzują też stronę transakcji (kupno/sprzedaż)</para> /// </summary> /// <param name="account">Rachunek, na który zostaje przeznaczone to zlecenie.</param> /// <param name="instrument">Instrument, którego walory chcemy kupić/sprzedać.</param> /// <param name="side">Zlecenie kupna (BosOrderSide.Buy) czy sprzedaży (BosOrderSide.Sell).</param> /// <param name="price">Limit ceny, jaki wstawiamy do zlecenia (BosPrice.PKC/PCR/PCRO... lub po prostu kwota).</param> /// <param name="activationPrice">Ewentualny limit aktywacji zlecenia (null, jeśli aktywowane od razu, bez stop'a).</param> /// <param name="quantity">Liczba walorów, jaką zamierzamy kupić/sprzedać.</param> /// <param name="minimumQuantity">Minimalna liczba walorów, jaka musi się zrealizować, albo zlecenie będzie anulowane. /// Podając tutaj to samo, co w polu "quantity", uzyskujemy zlecenie typu "WuA".</param> /// <param name="visibleQuantity">Liczba walorów ujawniana w arkuszu ofert ("WUJ").</param> /// <param name="immediateOrCancel">Czy to zlecenie typu "WiA" (to, co nie wykona się natychmiast, jest od razu anulowane).</param> /// <param name="expirationDate">Data ważności zlecenia (null, jeśli tylko na bieżącą sesję).</param> public static void Create(BosAccount account, BosInstrument instrument, BosOrderSide side, BosPrice price, decimal?activationPrice, uint quantity, uint?minimumQuantity, uint?visibleQuantity, bool immediateOrCancel, DateTime?expirationDate) { var data = new OrderData(); data.AccountNumber = account.Number; data.MainData = new OrderMainData(); data.MainData.CreateTime = DateTime.Now; data.MainData.Instrument = instrument.Convert(); data.MainData.Side = side; data.MainData.PriceType = price.Type; data.MainData.PriceLimit = price.NumValue; data.MainData.ActivationPrice = activationPrice; data.MainData.Quantity = quantity; data.MainData.MinimumQuantity = minimumQuantity; data.MainData.VisibleQuantity = visibleQuantity; data.MainData.ImmediateOrCancel = immediateOrCancel; data.MainData.ExpirationDate = expirationDate; account.api.Connection.OrderCreate(data); // TODO: Zastanawiam się jeszczcze m.in. co z ClientId, TradeDate... i czy w ogóle byłby sens // od razu tworzyć taki nowy obiekt BosOrder (zamiast zaczekać aż sam się doda przy OrderUpdate). }
private ListViewGroup GetAccountGroup(BosAccount account) { var group = accountsView.Groups[account.Number]; if (group == null) { group = new ListViewGroup(account.Number, "Account: " + account.Number); accountsView.Groups.Add(group); } else { var oldItems = group.Items.OfType<ListViewItem>().ToArray(); foreach (var item in oldItems) accountsView.Items.Remove(item); } return group; }
// ----- ustawianie listview z informacjami o rachunkach ----- private void UpdateAccountInfo(BosAccount account) { accountsView.BeginUpdate(); try { var group = GetAccountGroup(account); foreach (var paper in account.Papers) AddAccountPaperItem(group, paper); foreach (var order in account.Orders) if (order.IsActive) AddAccountOrderItem(group, order); AddAccountFundItem(group, "Total", account.PortfolioValue, null, null); AddAccountFundItem(group, "Deposit", account.DepositBlocked, "deficit", account.DepositDeficit); AddAccountFundItem(group, "Available", account.AvailableFunds, "cash", account.AvailableCash); } finally { accountsView.EndUpdate(); } }
// konstruktor wywoływany w klasie BosOrders, gdy pojawia się nowy numer zlecenia internal BosOrder(BosAccount account, OrderData data) { Account = account; Id = data.BrokerId; Update(data); }
// konstruktor, wywoływany z samej klasy BosAccount internal BosPapers(BosAccount account) { Account = account; }
// konstruktor, wywoływany z samej klasy BosAccount internal BosOrders(BosAccount account) { Account = account; }
/// <summary> /// Wysłanie do systemu nowego zlecenia z podanymi parametrami. /// <para>Zobacz też metody klasy BosInstrument: Order, Buy, Sell - które od razu określają, /// którego instrumentu dane zlecenie ma dotyczyć i ewentualnie prezyzują też stronę transakcji (kupno/sprzedaż)</para> /// </summary> /// <param name="account">Rachunek, na który zostaje przeznaczone to zlecenie.</param> /// <param name="instrument">Instrument, którego walory chcemy kupić/sprzedać.</param> /// <param name="side">Zlecenie kupna (BosOrderSide.Buy) czy sprzedaży (BosOrderSide.Sell).</param> /// <param name="price">Limit ceny, jaki wstawiamy do zlecenia (BosPrice.PKC/PCR/PCRO... lub po prostu kwota).</param> /// <param name="activationPrice">Ewentualny limit aktywacji zlecenia (null, jeśli aktywowane od razu, bez stop'a).</param> /// <param name="quantity">Liczba walorów, jaką zamierzamy kupić/sprzedać.</param> /// <param name="minimumQuantity">Minimalna liczba walorów, jaka musi się zrealizować, albo zlecenie będzie anulowane. /// Podając tutaj to samo, co w polu "quantity", uzyskujemy zlecenie typu "WuA".</param> /// <param name="visibleQuantity">Liczba walorów ujawniana w arkuszu ofert ("WUJ").</param> /// <param name="immediateOrCancel">Czy to zlecenie typu "WiA" (to, co nie wykona się natychmiast, jest od razu anulowane).</param> /// <param name="expirationDate">Data ważności zlecenia (null, jeśli tylko na bieżącą sesję).</param> public static void Create(BosAccount account, BosInstrument instrument, BosOrderSide side, BosPrice price, decimal? activationPrice, uint quantity, uint? minimumQuantity, uint? visibleQuantity, bool immediateOrCancel, DateTime? expirationDate) { var data = new OrderData(); data.AccountNumber = account.Number; data.MainData = new OrderMainData(); data.MainData.CreateTime = DateTime.Now; data.MainData.Instrument = instrument.Convert(); data.MainData.Side = side; data.MainData.PriceType = price.Type; data.MainData.PriceLimit = price.NumValue; data.MainData.ActivationPrice = activationPrice; data.MainData.Quantity = quantity; data.MainData.MinimumQuantity = minimumQuantity; data.MainData.VisibleQuantity = visibleQuantity; data.MainData.ImmediateOrCancel = immediateOrCancel; data.MainData.ExpirationDate = expirationDate; account.api.Connection.OrderCreate(data); // TODO: Zastanawiam się jeszczcze m.in. co z ClientId, TradeDate... i czy w ogóle byłby sens // od razu tworzyć taki nowy obiekt BosOrder (zamiast zaczekać aż sam się doda przy OrderUpdate). }