module Test17 where import Graphics.Rendering.Chart import Data.Colour import Data.Colour.Names import Data.Accessor import System.Random import System.Environment(getArgs) import ExampleStocks -- demonstrate Candles chart :: Double -> Renderable () chart lwidth = toRenderable layout where layout = layout1_title ^="Stock Prices" $ layout1_background ^= solidFillStyle (opaque white) $ layout1_left_axis ^: laxis_override ^= axisTicksHide $ layout1_plots ^= [ Right (toPlot msftArea) , Right (toPlot msftLine) , Right (toPlot msftCandle) , Left (toPlot aaplArea) , Left (toPlot aaplLine) , Left (toPlot aaplCandle) ] $ setLayout1Foreground (opaque black) $ defaultLayout1 aaplLine = plot_lines_style ^= lineStyle 2 green $ plot_lines_values ^= [[ (d, cl) | (d,(lo,op,cl,hi)) <- pricesAAPL]] $ plot_lines_title ^= "AAPL closing" $ defaultPlotLines msftLine = plot_lines_style ^= lineStyle 2 purple $ plot_lines_values ^= [[ (d, cl) | (d,(lo,op,cl,hi)) <- pricesMSFT]] $ plot_lines_title ^= "MSFT closing" $ defaultPlotLines aaplArea = plot_fillbetween_style ^= solidFillStyle (withOpacity green 0.4) $ plot_fillbetween_values ^= [ (d, (lo,hi)) | (d,(lo,op,cl,hi)) <- pricesAAPL] $ plot_fillbetween_title ^= "AAPL spread" $ defaultPlotFillBetween msftArea = plot_fillbetween_style ^= solidFillStyle (withOpacity purple 0.4) $ plot_fillbetween_values ^= [ (d, (lo,hi)) | (d,(lo,op,cl,hi)) <- pricesMSFT] $ plot_fillbetween_title ^= "MSFT spread" $ defaultPlotFillBetween aaplCandle = plot_candle_line_style ^= lineStyle 1 blue $ plot_candle_fill ^= True $ plot_candle_tick_length ^= 0 $ plot_candle_width ^= 2 $ plot_candle_values ^= [ Candle d lo op 0 cl hi | (d,(lo,op,cl,hi)) <- pricesAAPL] $ plot_candle_title ^= "AAPL candle" $ defaultPlotCandle msftCandle = plot_candle_line_style ^= lineStyle 1 red $ plot_candle_fill ^= True $ plot_candle_rise_fill_style ^= solidFillStyle (opaque pink) $ plot_candle_fall_fill_style ^= solidFillStyle (opaque red) $ plot_candle_tick_length ^= 0 $ plot_candle_width ^= 2 $ plot_candle_values ^= [ Candle d lo op 0 cl hi | (d,(lo,op,cl,hi)) <- pricesMSFT] $ plot_candle_title ^= "MSFT candle" $ defaultPlotCandle lineStyle n colour = line_width ^= n * lwidth $ line_color ^= opaque colour $ defaultPlotLines ^. plot_lines_style main1 :: [String] -> IO (PickFn ()) main1 ["small"] = renderableToPNGFile (chart 0.25) 320 240 "test1_small.png" main1 ["big"] = renderableToPNGFile (chart 0.25) 800 600 "test1_big.png" main = getArgs >>= main1