packages feed

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 ]