sobota, 20 października 2018

Giełda - założenia

Na początku były przemyślenia dotyczące tego jak powinna funkcjonować moja giełda, gdy za czołem pisać procedury pewne założenia uległy zmianie, inne zostały rozszerzone o nowe funkcjonalności. (Schematów bazy było co najmniej 5).

Schemat bazy numer 1

Kupno akcji
  1.  nowa pozycja na rynku, kupno ustawiam status bs_id na 1 = kupno, podaje ilość akcji do kupienia i cenę, 
  2. sprawdzam ilość dostępnych akcji w tabeli stock i cenę, 
    1. jeżeli cena jest niższa lub wyższa to sprawdzam czy ktoś w takiej cenie  chce sprzedać (kolumna sharePriceSell), jeżeli chce to puszczam na rynek, zmieniam status pozycji na rynku na bs_id = 0, zmniejszam ilość akcji  w tabeli stock aktualizuje cenę na podstawie ceny z transakcji (kolumna sharePriceBuy) oraz dopisuje datę aktualizacji w tabeli stock, zmniejszam ilość kasy w portfelu oraz zwiększam ilość nabytych akcji (kolumna może być niepotrzebna, możliwe że kolumna do weryfikacji w razie przekłamań),
    2. jeżeli nikt nie sprzedaje w takiej cenie, opcje są dwie albo ustawienie statusu oczekiwanie jeżeli cena spadnie lub się podniesie i zamrożenie środków, albo info zwrotne do użytkownika że transakcja nie możliwa musi zmienić cenę (pierwsza opcja ciekawsza)
Sprzedaż akcji

  1. mam pozycję na rynku (w portfelu), sprawdzam czy na rynku są akcje ilość i cena i teraz jeżeli:
    1.  np chcę sprzedać 100 akcji  po danej cenie, a jest oferta na 50 akcji o tej cenie i 50 po niższej to co wtedy? - albo brak zgody albo podzielenie oferty na dwa, czyli brak zgody
    2. na rynku nikt nie chce sprzedawać, ale mam emitenta  w tej tabeli jest pewna ilość - więc ściągam ilość zmieniam cenę jeżeli jest inna, zeruje tabele akcje ilość min = 0, wszystkie akcje w rynku, zmieniam status transakcji na bs_id = 0
  2. jeżeli transakcja doszła do skutku kasa w portfelu rośnie, ilość akcji w portfelu maleje, ilość akcji u innych użytkowników maleje i/lub u emitenta, cena rynkowa ustalona u emitenta w tabeli stock na cenę ostatniej sprzedaży aktualizacja daty w tabeli stock, 
Emisja

  1. Emitent wysyła pakiet akcji na rynek rekord w tabeli rynek z pustym polem portfel (null), wypełniona tylko cena sprzedaży, cena skupu = 0, status bd_id = 2, ilość w tabeli stock zmniejszona o ilość akcji na rynku lub zjazd do zera jeżeli wszystkie są w rynku, jeżeli ilość akcji w tabeli stack to ilość akcji na rynku to pilnuje tylko żeby nie przekroczyć limitu stackMaxCount, opcja dodatkowa na przyszłość parametr cena akcji jeżeli jest równa zero to pobieram cenę z tabeli stock, jeżeli nie to wpisuje nową cenę do emisji w tabeli marketsquare .
Aktualizacja do Kupna jeżeli jest emisja to patrze też na akcje nie przypisane do nikogo.
Cena w tabeli Stock może być ceną średnią na rynku lub najwyższą w sprzedaży, aczkolwiek można by się zastanawiać czy w ogóle powinna istnieć ta kolumna.

Skup
  1. Rekord w tabeli rynek z pustym polem portfel, cena sprzedaży = 0, uzupełniona cena skupu na podstawie ceny z tabeli Stock (?), status bd_id = 1, ilość akcji  = 0, a wraz z trwaniem skupu ilość się zwiększa nie może przekroczyć maksymalnej ilości wyemitowanych akcji. Zakończenie skupu to status bd_id = 0.
Cykl giełdy
???

Tabela BuyingSelling wartości:
  • 0 - brak akcji,
  • 1 - kupno,
  • 2 - sprzedaż
W wersji kolejnej Tabela ze statusami wygląda następująco:

  1. nothing happend
  2. buy
  3. sell
  4. emission
  5. return

Procedury (zachowanie  funkcjonalności) były testowane za pomocą managmenta, gdyż interfejs jeszcze nie powstał. Przewiduje że strona będzie oparta o ASP.net MVC, do łatwiejszego wyświetlania zastosje Enity Framwerok, repozytorium będzie w osobnym projekcie do którego dostęp będzie za pomocą interfejsów, kontrolery będą służyć tylko do wyświetlenia danych na widoku cała logika w repozytroium

Brak komentarzy:

Prześlij komentarz

 Po wielu miesiącach przerwy Czteroletnim exodusie do bloga ismartdev, który zdechł w zeszłym roku w listopadzie, na powrót wstąpiłem w ten ...