/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠNeural ĠLayer Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttps :// 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 Ġorg . ro bo quant . orders Ċ Ċ import Ġorg . ro bo quant . common . Asset ĊĊ Ċ /** Ċ Ġ* ĠSingle Order Ġtypes Ġare Ġplain Ġnon - combined Ġorders Ġwith Ġa Ġpre - defined Ġquantity Ġand ĠTime Ġin ĠForce Ġpolicy . ĠMany Ġwell - known Ċ Ġ* Ġorder Ġtypes Ġfall Ġunder Ġthis Ġcategory , Ġlike ĠMarket - , ĠLimit - Ġand ĠTr ail - orders . Ċ Ġ*/ Ċ abstract Ġclass ĠSingle Order ( asset : ĠAsset , Ġval Ġquantity : ĠDouble , Ġval Ġt if : ĠTime In Force , Ġid : ĠInt , Ġtag : ĠString Ġ= Ġ"") Ġ: ĠOrder ( asset , Ġid , Ġtag ) Ġ{ ĊĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( quantity Ġ!= Ġ 0 . 0 ) Ġ{ Ġ" Orders Ġrequire Ġa Ġnon Ġzero Ġquantity " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIs Ġthis Ġa Ġsell Ġorder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġsell ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġquantity Ġ< Ġ 0 . 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠIs Ġthis Ġa Ġbuy Ġorder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġbuy ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġquantity Ġ> Ġ 0 . 0 ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDirection Ġof Ġthe Ġorder , Ġ 1 Ġbeing ĠBU Y Ġand Ġ- 1 Ġbeing ĠS ELL ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġdirection ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( quantity Ġ> Ġ 0 . 0 ) Ġ 1 Ġelse Ġ- 1 Ċ Ċ } ĊĊ Ċ /** Ċ Ġ* ĠBu y Ġor Ġsell Ġan Ġasset Ġat Ġthe Ġmarket âĢĻ s Ġcurrent Ġbest Ġavailable Ġprice . ĠA Ġmarket Ġorder Ġtypically Ġensures Ċ Ġ* Ġan Ġexecution , Ġbut Ġit Ġdoes Ġnot Ġguarantee Ġa Ġspecified Ġprice . Ċ Ġ* Ċ Ġ* Ġ@ property Ġasset Ċ Ġ* Ġ@ property Ġquantity Ċ Ġ* Ġ@ property Ġt if Ċ Ġ* Ġ@ property Ġid Ċ Ġ* Ġ@ constructor ĠCreate Ġnew ĠMarket Ġorder Ċ Ġ*/ Ċ class ĠMarket Order ( ĊĠĠĠ Ġasset : ĠAsset , ĊĠĠĠ Ġquantity : ĠDouble , ĊĠĠĠ Ġt if : ĠTime In Force Ġ= ĠG TC (), ĊĠĠĠ Ġid : ĠInt Ġ= Ġnext Id (), ĊĠĠĠ Ġtag : ĠString Ġ= Ġ"" Ċ ) Ġ: ĠSingle Order ( asset , Ġquantity , Ġt if , Ġid , Ġtag ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinfo () Ġ= Ġsorted Map Of (" quantity " Ġto Ġquantity , Ġ" tif " Ġto Ġt if ) Ċ Ċ } Ċ Ċ /** Ċ Ġ* Ġ ĠBu y Ġor Ġsell Ġan Ġasset Ġwith Ġa Ġrestriction Ġon Ġthe Ġmaximum Ġprice Ġto Ġbe Ġpaid Ġor Ġthe Ġminimum Ġprice Ċ Ġ* Ġ Ġto Ġbe Ġreceived . ĠIf Ġthe Ġorder Ġis Ġfilled , Ġit Ġwill Ġonly Ġbe Ġat Ġthe Ġspecified Ġlimit Ġprice Ġor Ġbetter . Ċ Ġ* Ġ ĠHowever , Ġthere Ġis Ġno Ġass urance Ġof Ġexecution . Ċ Ġ* Ċ Ġ* Ġ@ property Ġasset Ċ Ġ* Ġ@ property Ġquantity Ċ Ġ* Ġ@ property Ġlimit Ċ Ġ* Ġ@ property Ġt if Ċ Ġ* Ġ@ property Ġid Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠLimit Ġorder Ċ Ġ*/ Ċ class ĠLimit Order ( ĊĠĠĠ Ġasset : ĠAsset , ĊĠĠĠ Ġquantity : ĠDouble , ĊĠĠĠ Ġval Ġlimit : ĠDouble , ĊĠĠĠ Ġt if : ĠTime In Force Ġ= ĠG TC (), ĊĠĠĠ Ġid : ĠInt Ġ= Ġnext Id (), ĊĠĠĠ Ġtag : ĠString Ġ= Ġ"" Ċ ) Ġ: ĠSingle Order ( asset , Ġquantity , Ġt if , Ġid , Ġtag ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinfo () Ġ= Ġsorted Map Of (" quantity " Ġto Ġquantity , Ġ" limit " Ġto Ġlimit , Ġ" tif " Ġto Ġt if ) Ċ Ċ } ĊĊ Ċ /** Ċ Ġ* ĠStop Ġorder Ċ Ġ* Ċ Ġ* Ġ@ property Ġasset Ċ Ġ* Ġ@ property Ġquantity Ċ Ġ* Ġ@ property Ġstop Ċ Ġ* Ġ@ property Ġt if Ċ Ġ* Ġ@ property Ġid Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠStop Ġorder Ċ Ġ*/ Ċ class ĠStop Order ( ĊĠĠĠ Ġasset : ĠAsset , ĊĠĠĠ Ġquantity : ĠDouble , ĊĠĠĠ Ġval Ġstop : ĠDouble , ĊĠĠĠ Ġt if : ĠTime In Force Ġ= ĠG TC (), ĊĠĠĠ Ġid : ĠInt Ġ= Ġnext Id (), ĊĠĠĠ Ġtag : ĠString Ġ= Ġ"" Ċ ) Ġ: ĠSingle Order ( asset , Ġquantity , Ġt if , Ġid , Ġtag ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinfo () Ġ= Ġsorted Map Of (" quantity " Ġto Ġquantity , Ġ" stop " Ġto Ġstop , Ġ" tif " Ġto Ġt if ) Ċ } ĊĊ Ċ /** Ċ Ġ* ĠStop Ġlimit Ġorder Ċ Ġ* Ċ Ġ* Ġ@ property Ġasset Ċ Ġ* Ġ@ property Ġquantity Ċ Ġ* Ġ@ property Ġstop Ċ Ġ* Ġ@ property Ġlimit Ċ Ġ* Ġ@ property Ġt if Ċ Ġ* Ġ@ property Ġid Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠStop Ġlimit Ġorder Ċ Ġ*/ Ċ class ĠStop Limit Order ( ĊĠĠĠ Ġasset : ĠAsset , ĊĠĠĠ Ġquantity : ĠDouble , ĊĠĠĠ Ġval Ġstop : ĠDouble , ĊĠĠĠ Ġval Ġlimit : ĠDouble , ĊĠĠĠ Ġt if : ĠTime In Force Ġ= ĠG TC (), ĊĠĠĠ Ġid : ĠInt Ġ= Ġnext Id (), ĊĠĠĠ Ġtag : ĠString Ġ= Ġ"" Ċ ) Ġ: ĠSingle Order ( asset , Ġquantity , Ġt if , Ġid , Ġtag ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinfo () Ġ= Ġsorted Map Of (" quantity " Ġto Ġquantity , Ġ" stop " Ġto Ġstop , Ġ" limit " Ġto Ġlimit , Ġ" tif " Ġto Ġt if ) Ċ } Ċ Ċ /** Ċ Ġ* ĠTr ail Ġorder Ċ Ġ* Ċ Ġ* Ġ@ property Ġasset Ċ Ġ* Ġ@ property Ġquantity Ċ Ġ* Ġ@ property Ġtrail Percentage Ċ Ġ* Ġ@ property Ġt if Ċ Ġ* Ġ@ property Ġid Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠTr ail Ġorder Ċ Ġ*/ Ċ open Ġclass ĠTr ail Order ( ĊĠĠĠ Ġasset : ĠAsset , ĊĠĠĠ Ġquantity : ĠDouble , ĊĠĠĠ Ġval Ġtrail Percentage : ĠDouble , ĊĠĠĠ Ġt if : ĠTime In Force Ġ= ĠG TC (), ĊĠĠĠ Ġid : ĠInt Ġ= Ġnext Id (), ĊĠĠĠ Ġtag : ĠString Ġ= Ġ"" Ċ ) Ġ: ĠSingle Order ( asset , Ġquantity , Ġt if , Ġid , Ġtag ) Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( trail Percentage Ġ> Ġ 0 . 0 ) Ġ{ Ġ" trail Pre centage Ġshould Ġbe Ġa Ġpositive Ġvalue " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinfo () Ġ= Ġsorted Map Of (" quantity " Ġto Ġquantity , Ġ" trail Percentage " Ġto Ġtrail Percentage , Ġ" tif " Ġto Ġt if ) Ċ Ċ } Ċ Ċ /** Ċ Ġ* ĠTr ail Ġlimit Ġorder Ċ Ġ* Ċ Ġ* Ġexample : ĠWe Ġwant Ġto Ġsell Ġ 2 5 Ġstock s Ġof ĠX YZ Ġwhen Ġit Ġreaches Ġ 5 % Ġbelow Ġits Ġhigh Ġwith Ġa Ġlimit Ġprice Ġof Ġ- 1 Ġbelow Ġthat Ġhigh . Ċ Ġ* Ċ Ġ* Ġval Ġorder Ġ= ĠTr ail Limit Order ( Asset (" XYZ "), Ġ- 2 5 , Ġ 0 . 0 5 , Ġ- 1 . 0 ) Ċ Ġ* Ċ Ġ* Ġ@ property Ġasset Ċ Ġ* Ġ@ property Ġquantity Ċ Ġ* Ġ@ property Ġtrail Percentage Ġtrailing Ġpercentage Ġto Ġbe Ġused Ġto Ġcalculate Ġthe Ġstop Ġvalue Ċ Ġ* Ġ@ property Ġlimit Offset Ġoffset Ġfor Ġthe Ġlimit Ġcompared Ġto Ġthe Ġstop Ġvalue , Ġnegative Ġvalue Ġbeing Ġa Ġlower Ġlimit Ċ Ġ* Ġ@ property Ġt if Ċ Ġ* Ġ@ property Ġid Ċ Ġ* Ġ@ constructor ĠCreate Ġnew ĠTr ail Ġlimit ĠOrder Ċ Ġ*/ Ċ class ĠTr ail Limit Order ( ĊĠĠĠ Ġasset : ĠAsset , ĊĠĠĠ Ġquantity : ĠDouble , ĊĠĠĠ Ġtrail Percentage : ĠDouble , ĊĠĠĠ Ġval Ġlimit Offset : ĠDouble , ĊĠĠĠ Ġt if : ĠTime In Force Ġ= ĠG TC (), ĊĠĠĠ Ġid : ĠInt Ġ= Ġnext Id (), ĊĠĠĠ Ġtag : ĠString Ġ= Ġ"" Ċ ) Ġ: ĠTr ail Order ( asset , Ġquantity , Ġtrail Percentage , Ġt if , Ġid , Ġtag ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinfo () Ġ= Ġsorted Map Of ( ĊĠĠĠĠĠĠĠ Ġ" quantity " Ġto Ġquantity , ĊĠĠĠĠĠĠĠ Ġ" trail Percentage " Ġto Ġtrail Percentage , ĊĠĠĠĠĠĠĠ Ġ" limit Offset " Ġto Ġlimit Offset , ĊĠĠĠĠĠĠĠ Ġ" tif " Ġto Ġt if ĊĠĠĠ Ġ) Ċ } Ċ