packages feed

plot-light-examples-0.3.0.0: app/timeseries/Main.hs

{-# language OverloadedStrings #-}
module Main where

-- import Control.Arrow ((***), (&&&))

import Graphics.Rendering.Plot.Light
-- import Graphics.Rendering.Plot.Light.PlotTypes
  
import qualified Data.Attoparsec.Text as A
import qualified Attoparsec.Time.Text as AT
import qualified Data.Text as T 
import qualified Data.Text.IO as T (readFile, writeFile)
import Data.Scientific (Scientific, toRealFloat)
import Text.Blaze.Svg.Renderer.String (renderSvg)
import qualified Data.Colour.Names as C

import Control.Applicative ((<|>))
import Data.Time (Day, TimeOfDay)

-- import Data.Parsers

fname = "data/forex"

xPlot = 400
yPlot = 300
fnameOut = "data/forex_plot_5.svg"

fdat = FigureData xPlot yPlot 0.1 0.9 0.1 0.85 10

main = print "timeseries example unavailable for now"


-- main = do
--   dat <- T.readFile fname
--   let pd = A.parseOnly parseFxDataset dat
--   case pd of Left e -> error e
--              Right d -> 
--                do
--                let
--                  lps =  tspToLP fhi (\_ x -> x) <$> d
--                  -- figure = tsAxis fdat fop fcl fhi flo 1 C.black (-45) Nothing Nothing lps       
--                  figure = tsAxis' fdat flo fhi C.magenta lps
--                  svg_t = svgHeader xPlot yPlot figure
--                -- putStrLn $ renderSvg svg_t
--                T.writeFile fnameOut $ T.pack $ renderSvg svg_t
--                  where
--                    fhi = toFloat . rateHigh
--                    flo = toFloat . rateLow
--                    fop = toFloat . rateOpen
--                    fcl = toFloat . rateClose




-- avgTs :: FxRow Scientific -> Float
-- avgTs x = 0.5 * (h + l) where
--   h = toFloat (rateHigh x)
--   l = toFloat (rateLow x)





-- -- Forex time series parsers - related









-- -- * Forex dataset

-- parseFxDataset :: A.Parser [TsPoint (FxRow Scientific)]
-- parseFxDataset = A.sepBy parseFxRow A.endOfLine

-- parseFxRow :: A.Parser (TsPoint (FxRow Scientific))
-- parseFxRow = do
--   (d, t) <- parseDateTime
--   _ <- comma
--   open <- A.scientific
--   _ <- comma
--   hi <- A.scientific
--   _ <- comma
--   lo <- A.scientific
--   _ <- comma
--   close <- A.scientific
--   pure $ Tsp (Tick d t) (FxRow open hi lo close)


-- parseDateTime :: A.Parser (Day, TimeOfDay)
-- parseDateTime = do
--   d <- AT.dayInISO8601
--   _ <- space
--   t <- AT.timeOfDayInISO8601
--   return (d, t)