package Ġorg . ro bo quant . orders Ċ Ċ import Ġorg . ro bo quant . bro kers . sim . Execution Ċ import Ġjava . time . Instant Ċ Ċ /** Ċ Ġ* ĠBr acket Ġorders Ġare Ġdesigned Ġto Ġhelp Ġlimit Ġthe Ġloss Ġand Ġlock Ġin Ġa Ġprofit Ġby Ġ" bracket ing " Ġan Ċ Ġ* Ġorder Ġwith Ġtwo Ġopposite - side Ġorders . Ċ Ġ* Ċ Ġ* Ġ- Ġa ĠBU Y Ġorder Ġis Ġbracket ed Ġby Ġa Ġhigh - side Ġsell Ġlimit Ġorder Ġand Ġa Ġlow - side Ġsell Ġstop (- limit ) Ġorder . Ċ Ġ* Ġ- Ġa ĠS ELL Ġorder Ġis Ġbracket ed Ġby Ġa Ġhigh - side Ġbuy Ġstop (- limit ) Ġorder Ġand Ġa Ġlow Ġside Ġbuy Ġlimit Ġorder . Ċ Ġ* Ċ Ġ* Ġ@ property Ġmain ĠThe Ġprimary Ġorder Ċ Ġ* Ġ@ property Ġprofit ĠThe Ġtake Ġprofit Ġorder Ċ Ġ* Ġ@ property Ġloss ĠThe Ġlimit Ġloss Ġorder Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreate Ġa Ġnew Ġbracket Ġorder Ċ Ġ* Ċ Ġ*/ Ċ class ĠBr acket Order ( ĊĠĠĠ Ġval Ġmain : ĠSingle Order , ĊĠĠĠ Ġval Ġprofit : ĠSingle Order , ĊĠĠĠ Ġval Ġloss : ĠSingle Order , Ċ ) Ġ: ĠOrder ( main . asset ) Ġ{ ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSome Ġbasic Ġsanity Ġchecks ĊĠĠĠĠĠĠĠ Ġrequire ( main . asset Ġ== Ġprofit . asset Ġ&& Ġprofit . asset Ġ== Ġloss . asset ) Ġ{ Ġ" Assets Ġneed Ġto Ġbe Ġidentical " Ġ} ĊĠĠĠĠĠĠĠ Ġrequire ( main . quantity Ġ== Ġ- profit . quantity Ġ&& Ġprofit . quantity Ġ== Ġloss . quantity ) Ġ{ Ġ" Quant ities Ġneed Ġto Ġmatch " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclone (): ĠBr acket Order Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠBr acket Order ( main . clone (), Ġprofit . clone (), Ġloss . clone ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetValue ( price : ĠDouble ): ĠDouble Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġmain . getValue ( price ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġexecute ( price : ĠDouble , Ġtime : ĠInstant ): ĠList < Execution > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf < Execution >() ĊĠĠĠĠĠĠĠ Ġplace ( price , Ġtime ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! main . status . closed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġmain . execute ( price , Ġtime ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . addAll ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( main . status . abort ed ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġmain . status ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( main . status Ġ== ĠOrder Status . COMPLETED ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( profit . remaining Ġ!= Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġprofit . execute ( price , Ġtime ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . addAll ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġloss . quantity Ġ= Ġmain . quantity Ġ- Ġprofit . fill ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( loss . remaining Ġ!= Ġ 0 . 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġe Ġ= Ġloss . execute ( price , Ġtime ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . addAll ( e ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprofit . quantity Ġ= Ġmain . quantity Ġ- Ġloss . fill ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( profit . status . closed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġprofit . status ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( loss . status . closed ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= Ġloss . status ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( loss . fill Ġ+ Ġprofit . fill Ġ== Ġmain . quantity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstatus Ġ= ĠOrder Status . COMPLETED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ }