/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠPeter ĠKen ji ĠY aman aka Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . py am soft . tick ert ape . portfolio Ċ Ċ import Ġcom . py am soft . tick ert ape . core . is Zero Ċ import Ġcom . py am soft . tick ert ape . db . holding . Db Hold ing Ċ import Ġcom . py am soft . tick ert ape . db . position . Db Position Ċ import Ġcom . py am soft . tick ert ape . quote . Ticker Ċ import Ġcom . py am soft . tick ert ape . stocks . api . Equ ity Type Ċ import Ġcom . py am soft . tick ert ape . stocks . api . Stock Direction Ċ import Ġcom . py am soft . tick ert ape . stocks . api . Stock Money Value Ċ import Ġcom . py am soft . tick ert ape . stocks . api . Stock Percent Ċ import Ġcom . py am soft . tick ert ape . stocks . api . Stock Share Value Ċ import Ġcom . py am soft . tick ert ape . stocks . api . Trade Side Ċ import Ġcom . py am soft . tick ert ape . stocks . api . as Direction Ċ import Ġcom . py am soft . tick ert ape . stocks . api . as Money Ċ import Ġcom . py am soft . tick ert ape . stocks . api . as Percent Ċ import Ġcom . py am soft . tick ert ape . stocks . api . as Shares Ċ Ċ data Ġclass ĠPortfolio Stock Ċ internal Ġconstructor ( ĊĠĠĠ Ġval Ġholding : ĠDb Hold ing , ĊĠĠĠ Ġval Ġpositions : ĠList < Db Position >, ĊĠĠĠ Ġval Ġticker : ĠT icker ?, Ċ ) Ġ{ ĊĊĠ Ġval Ġtoday Direction : ĠStock Direction ĊĠ Ġval Ġtotal Direction : ĠStock Direction ĊĠ Ġval Ġcurrent : ĠStock Money Value ĊĠ Ġval Ġtotal Shares : ĠStock Share Value ĊĠ Ġval Ġgain Loss Display String : ĠString ĊĠ Ġval Ġchange Today Display String : ĠString ĊĠ Ġval Ġis Option Ġ= Ġholding . type () Ġ== ĠEqu ity Type . OPTION ĊĊĠ Ġ// ĠUsed Ġin ĠPortfolio Stock List ĊĠ Ġinternal Ġval Ġcost Number : ĠDouble ĊĠ Ġinternal Ġval Ġtoday Change Number : ĠDouble ? ĊĠ Ġinternal Ġval Ġtoday Number : ĠDouble ? ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġval Ġoptions Modifier Ġ= Ġif Ġ( is Option ) Ġ 1 0 0 Ġelse Ġ 1 ĊĠĠĠ Ġval Ġsell Side Modifier Ġ= Ġif Ġ( holding . side () Ġ== ĠTrade Side . SE LL ) Ġ- 1 Ġelse Ġ 1 ĊĊĠĠĠ Ġval Ġis No Position Ġ= Ġpositions . isEmpty () ĊĠĠĠ Ġval Ġcost Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( is No Position ) Ġ 0 . 0 Ġelse Ġpositions . sum Of Ġ{ Ġit . price (). value () Ġ* Ġit . share Count (). value () Ġ} ĊĠĠĠ Ġval Ġtotal Shares Number Ġ= Ġif Ġ( is No Position ) Ġ 0 . 0 Ġelse Ġpositions . sum Of Ġ{ Ġit . share Count (). value () Ġ} ĊĊĠĠĠ Ġ// ĠAvoid Ġ- 0 . 0 Ġas Ġa Ġtotal Ġchange Ġnumber ĊĠĠĠ Ġval Ġtemp Today Change : ĠDouble ĊĠĠĠ Ġval Ġtemp Today Number : ĠDouble ĊĠĠĠ Ġif Ġ( is No Position ) Ġ{ ĊĠĠĠĠĠ Ġtemp Today Change Ġ= Ġ 0 . 0 ĊĠĠĠĠĠ Ġtemp Today Number Ġ= Ġ 0 . 0 ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġval Ġq Ġ= Ġticker ?. quote ĊĠĠĠĠĠ Ġif Ġ( q Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtemp Today Change Ġ= Ġ 0 . 0 ĊĠĠĠĠĠĠĠ Ġtemp Today Number Ġ= Ġ 0 . 0 ĊĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġtemp Today Change Ġ= Ġq . regular (). amount (). value () Ġ* Ġtotal Shares Number ĊĠĠĠĠĠĠĠ Ġtemp Today Number Ġ= Ġq . regular (). price (). value () Ġ* Ġtotal Shares Number ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġtotal Gain Loss Number Ġ= Ġtemp Today Number Ġ- Ġcost ĊĠĠĠ Ġval Ġis No Total Change Ġ= Ġtotal Gain Loss Number . is Zero () ĊĠĠĠ Ġval Ġis No Today Change Ġ= Ġtemp Today Change . is Zero () ĊĊĠĠĠ Ġtoday Change Number Ġ= Ġtemp Today Change Ġ* Ġoptions Modifier ĊĠĠĠ Ġtoday Number Ġ= Ġtemp Today Number Ġ* Ġoptions Modifier ĊĊĠĠĠ Ġval Ġtotal Gain Loss : ĠStock Money Value ĊĠĠĠ Ġval Ġtotal Gain Loss Percent : ĠStock Percent ĊĠĠĠ Ġif Ġ( is No Position ) Ġ{ ĊĠĠĠĠĠ Ġcurrent Ġ= ĠStock Money Value . none () ĊĠĠĠĠĠ Ġcost Number Ġ= Ġ 0 . 0 ĊĠĠĠĠĠ Ġtotal Shares Ġ= Ġ 0 . 0 . as Shares () ĊĠĠĠĠĠ Ġtotal Direction Ġ= ĠStock Direction . none () ĊĠĠĠĠĠ Ġtoday Direction Ġ= ĠStock Direction . none () ĊĠĠĠĠĠ Ġtotal Gain Loss Ġ= ĠStock Money Value . none () ĊĠĠĠĠĠ Ġtotal Gain Loss Percent Ġ= ĠStock Percent . none () ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠ Ġtotal Gain Loss Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( is No Total Change ) ĠStock Money Value . none () ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ( total Gain Loss Number Ġ* Ġoptions Modifier Ġ* Ġsell Side Modifier ). as Money () ĊĠĠĠĠĠ Ġtotal Direction Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( is No Total Change ) ĠStock Direction . none () ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ( total Gain Loss Number Ġ* Ġsell Side Modifier ). as Direction () ĊĠĠĠĠĠ Ġtoday Direction Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( is No Today Change ) ĠStock Direction . none () ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ( temp Today Change Ġ* Ġsell Side Modifier ). as Direction () ĊĠĠĠĠĠ Ġcurrent Ġ= Ġ( temp Today Number Ġ* Ġsell Side Modifier Ġ* Ġoptions Modifier ). as Money () ĊĠĠĠĠĠ Ġcost Number Ġ= Ġcost ĊĠĠĠĠĠ Ġtotal Shares Ġ= Ġ( total Shares Number Ġ* Ġsell Side Modifier ). as Shares () ĊĊĠĠĠĠĠ Ġval Ġtotal Gain Loss Percent Number Ġ= ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( is No Total Change ) Ġ 0 . 0 Ġelse Ġtotal Gain Loss Number Ġ/ Ġcost Ġ* Ġ 1 0 0 ĊĠĠĠĠĠ Ġtotal Gain Loss Percent Ġ= Ġ( total Gain Loss Percent Number Ġ* Ġsell Side Modifier ). as Percent () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġsign Ġ= Ġtotal Direction . sign () ĊĠĠĠ Ġgain Loss Display String Ġ= ĊĠĠĠĠĠĠĠ Ġ"${ sign }${ total Gain Loss . as Money Value ()} Ġ(${ sign }${ total Gain Loss Percent . as Percent Value () })" ĊĊĠĠĠ Ġval Ġtoday Change Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( is No Today Change ) ĠStock Money Value . none () ĊĠĠĠĠĠĠĠ Ġelse Ġ( temp Today Change Ġ* Ġsell Side Modifier Ġ* Ġoptions Modifier ). as Money () ĊĠĠĠ Ġchange Today Display String Ġ= Ġ"${ today Direction . sign ()} ${ today Change . as Money Value () }" ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval ĠCOMP AR ATOR Ġ= ĊĠĠĠĠĠĠĠ ĠComparator < Portfolio Stock > Ġ{ Ġs 1 , Ġs 2 Ġ-> ĊĠĠĠĠĠĠĠĠĠ Ġval Ġt 1 Ġ= Ġs 1 . ticker ĊĠĠĠĠĠĠĠĠĠ Ġval Ġt 2 Ġ= Ġs 2 . ticker ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( t 1 Ġ!== Ġnull Ġ&& Ġt 2 Ġ!== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Comparator ĠT icker . COMP AR ATOR . compare ( t 1 , Ġt 2 ) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( t 1 Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Comparator Ġ- 1 ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( t 2 Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ Comparator Ġ 1 ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠ Ġreturn @ Comparator Ġs 1 . holding ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. symbol () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. symbol () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. compareTo ( s 2 . holding . symbol (). symbol (), Ġignore Case Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ