REQUIREMENTS ============== 1. ZeroMQ Low-level library to build a messaging framework or client/server. Install it from source and install some pre-reqs: $ sudo apt-get install libtool uuid-dev autoconf automake $ curl http://download.zeromq.org/zeromq-3.1.0-beta.tar.gz > zeromq.tar.gz $ tar -xzf zeromq.tar.gz $ cd zeromq-3.1.0 $ ./configure $ make $ make install On OSX, you just need to install ossp-uuid with brew. 2. Haskell Runs the server Just get the latest version which comes bundled with cabal. Afaik version doesnt matter. $ sudo apt-get update $ sudo apt-get install ghc 3. Redis Will be used to store quotes in. $ sudo apt-get update $ sudo apt-get install redis RUNNING THE CODE ====================== 0. Get and the data (a sample is found in the data folder). 1. Run qoute publisher server $ easy_install virtualenv $ cd FourierFx/cfg/ && virtualenv fourierfx --no-site-packages Save yourself a lot of time and trouble, find your bash profile script and add this alias which activates the virtualenv for you: alias cd_fourierfx="cd ~/Projects/FourierFx/src/py/quotes && . ../../../cfg/fourierfx/bin/activate" $ cd_fourierfx $ pip -E fourierfx install -r pip.requirements.txt $ cd FourierFx/src/py/ $ python quotes publisher --file=../../data/EURUSD_sample.csv --symbol=EURUSD --limit=100 2. Run quote analyzer client Make sure you upgrade to GHC >== 7.2, it should come with Cabal. $ cd FourierFx/src/hs/ $ cabal install There will be a binary created in the dist folder; its usually like this: $ FourierFx/src/hs/dist/build/fourierfx/fourierfx tcp://127.0.0.1:6000 3. Verifying that it worked: You can use any redis client to verify that it works. $ cd_fourierfx $ python -c "from quotes.utils.redisdb import RedisDB as R; r = R(); print r.llen('symbol_EURUSD')" $ python -c "from quotes.utils.redisdb import RedisDB as R; r = R(); print r.lrange('symbol_EURUSD', 0, 10)" 4. Deleting the quotes: $ python -c "from quotes.utils.redisdb import RedisDB as R; r = R(); r.delete('symbol_EURUSD')" NEXT STEPS ============ - Code that splits up Daily, hourly, and per minute data streams and initiates the corresponding computations. I wrote the DatePart data structure with this in mind.