netrium-0.6.0: examples/JulienExample.hs
import Contract
import Common
import Options
import Data.List (transpose)
commoditySpreadOption :: ChoiceId
-> [( Market
, Volume
, Price, Currency, CashFlowType
, SegmentedSchedule
, FeeCalc )]
-> DiffDateTime
-> OptionDirection
-> StrikePrice
-> Contract
commoditySpreadOption cid legs optionDiffTime opDir strikePrice =
allOf
[ legOption groupedLeg $ \strikePrice ->
-- do something here with strikePrice, else it's never used!
allOf [ forward fee m pr cur cft vol seg
| (m, pr, cur, cft, vol, seg, fee) <- groupedLeg ]
| groupedLeg <- groupedLegs ]
where
groupedLegs =
transpose
[ [ (m, pr, cur, cft, vol, seg, fee) | seg <- sch ]
| (m, pr, cur, cft, vol, sch, fee) <- legs ]
legOption groupedLeg =
option cid (europeanExercise (optionTime groupedLeg) strikePrice) opDir
optionTime groupedLeg =
adjustDateTime earliestDeliveryTime optionDiffTime
where
earliestDeliveryTime =
minimum [ t | (_, _, _, _, _, (t:_), _) <- groupedLeg ]