関数型言語のHaskellというものに手を出してみました。
今回は、システムトレードで使っているSQLite3からHaskellで時系列データ(日足)を読んでみます。
備忘録として、コードを上げておきます。
今回は、システムトレードで使っているSQLite3からHaskellで時系列データ(日足)を読んでみます。
備忘録として、コードを上げておきます。
import Database.HDBC import Database.HDBC.Sqlite3 main = do conn <- connectSqlite3 "investment.dbf" closes <- getHistoricalPrices conn "2712" "CLOSE" print [zenjitsuhi |(x,y) <- (zip (init closes) (tail closes)),let zenjitsuhi = ((x-y)/y)*100] hist <- getHistoricals conn "8411" print hist disconnect conn return () getHistoricals :: IConnection c => c -> String -> IO [(String, String, String, Double, Double, Double, Double, Double)] getHistoricals conn code = do stmt <- prepare conn "SELECT S.DATE,S.CODE,S.MARKET,S.OPEN,S.HIGH,S.LOW,S.CLOSE,S.VOLUME FROM STOCK_DAILY S,MARKET_LISTINGS L WHERE L.CODE=? AND L.MAIN_MARKET='true' AND L.CODE=S.CODE ORDER BY S.DATE DESC" execute stmt [(toSql code)] rows <- fetchAllRows stmt return([((fromSql d)::String,(fromSql cd)::String,(fromSql m)::String,(fromSql o)::Double,(fromSql h)::Double,(fromSql l)::Double,(fromSql cl)::Double,(fromSql v)::Double) | [d,cd,m,o,h,l,cl,v] <- rows]) getHistoricalPrices :: IConnection c => c -> String -> String -> IO [Double] getHistoricalPrices conn code dataType = do stmt <- prepare conn ("SELECT S."++dataType++" FROM STOCK_DAILY S,MARKET_LISTINGS L WHERE L.CODE=? AND L.MAIN_MARKET='true' AND L.CODE=S.CODE ORDER BY S.DATE DESC") execute stmt [(toSql code)] rows <- fetchAllRows stmt return([(fromSql val)::Double|[val] <- rows])
コメント
コメントを投稿