FiMi - Financial Instrument Management Interface

Table of Content

1. Introduction
2. Installation
2.1 Database
2.1.1 Prerequirements
2.1.2 How To
2.2 Daemon
2.2.1 Prerequirements
2.1.1 How To
2.1.1 Configure the Daemon
3. libfimi (qt4)
3.1 Prerequirements
3.2 How To
3.3 libfimi Programs
4. Binding FiMi to your Application
4.1 SQL
4.2 libfimi (qt4)
5. Developing a Provider
5.1 Deploying a Provider
5.2 Installing a Provider
5.3 FiMi XML DDL
6. Developing a FiMi Indicator


FiMi Digest




You need Postgres >= 8.0, Perl >=5.8.0 installed and the Perlmodules: Getopt::Std installed.

How To




You need Perl >=5.8.0 installed and the Perlmodules:*checkout*/fimi/perlfimi/fimid/modules.lst

How To


Configure the Deamon

Before you configure the Deamon it is good to know the logic how the set up works.

In fimid.conf you define the database connection, debug level log files and so on. See the comments in this file. In providers/~your provider~.conf you configure the scheduled script, parameters, historic support and the time in cron style. Historic support means that this script can load data from past events. For exaplme historic yahoo end of day data supports history, but the intraday quotes from yahoo does not. You can not load the tick from yesterday 10:30 from the yahoo page. See some examples in provider/yahoo.conf. In the file provider/~your provider~/~the script~.xml you have define in a FiMi-DDL (Data Description Language), which parameters your provider script needs. Some examples are Fi Symbols or last quote date. See FiMi XML DDL section in "Developing a Provider" for detailed info on this.

libfimi (qt4)


You need build-essentials, libqt4-sql and libqt4-dev.

How To


libfimi Programs


Binding FiMi to your Application


To use all FiMi Indicators, the easiest way at the moment is you access FiMi via SQL (lipq++, ODBC, DBI, JDBC, …). To get plot able Data you can read the indicator Table to view which indicators are possible and what the needed parameters are (eodbar is standard bar data date/time/open/high/low/close/volume/open interest). To know the return type of each function you can read indicator_retype table. The primary and foreign keys are always tablename_id. So I think you can fugure out how to get the fi_id and market_id to receive quote data.

libfimi (qt4)

Take a look at qt4stalker in the CVS. (Note that the lib supports not all FiMi indicators yet - commin soon).

Developing a Provider

What is a Provider in FiMi terms. A provider looks for Financial Data (static Data, quote Date, ...), formats the Data into FiMi XML DDL and prints to stdout. Usually a provider gets some parameters ex. A stock symbol and loads quote data from the internet. So there are two things you have to do with xml.

1.) Define which parameters your script needs and
2.) what it returns

A provider can be written in the language you like, it simple must be executeable. Usually for a new provider some static Data is needed. The provider itself (stype table), markets oder market symbols, fis, underlyngs and so on. For this is a script needed but this script must be in Perl.

Deploying a Provider

Providers have to be deployed as .tgz. Lets say we make a provider named yahoo. The archive conatins the following files:


The archiv must contain at least a and a File. See CVS for the real yahoo provider
NOTE: For the moment you must provide a .xml file. In future there will be no need for the .xml if your script does not need any call parameters.

Installing a Provider

1.) Copy your provider.tgz to the folder fimid/providerstgz/
2.) ./ yourprovider

The initProvider needs the provider name as the parameter (do not use the .tgz suffix as parameter!). The script extracts the archive to /tmp/ copies the provider files to their destination (/fimid/providers/) and calls a Handler which invokes the script.


The XML DDL is some kind of relational to object mapping. First we need a root node - we call it - surprise - fimi. The second node must be row. This defines one transaction (commit) and the end of an object description.

Lets make an Example


Root node


Transaction node 1

<fi action="select"

Object of trasaction 1 there are some possible Attributes:

- action: select, insert, delete (default is select)

- fields: default object_id

NOTE: after a insert the Object still returns the _id or the fields you specified from this new instance.

<caption preoperator="lower"
operator = "like"



Attribute of Object, there are these possible Attributes:

- preoperator (default: null)

- operaror (default: =)

- postoperator (default: null)

This will result in a query like this:

... Where preoperator() operator postoperator() ...

ex: ... Where lower(caption) like lower(caption) ...


The Object Attribute ftype_id can be defined by value (ex. 3) or by a referencing object like this

<ftype action="select">



enquiry a ftype object with the caption Index. If the "subobject" is not existent yet you could use action="insert" to reference a new yet creating object. Note, that this transaction do not commit undtil </row> is reached.




Commits transaction 1


Start transaction 2




NOTE: If you need a new table for your provider (for some reason), you can use the XML DDL as normaly no changes needed. Simply create the table under the schema fimi and the parser will recognize your new table as a possible object tag.

Developing a FiMi Indicator

A FiMi indicator is something special beside these indicators you know from ta-lib and other financial tools. A FiMi indicator can simply return bar data or do some complex calculations. This indicators can combine Fi data or combine different quote data (eod with layer2 for example). It is not a tool where you should make things like moving averages or bolinger bands or what ever. As I said it is a tool where you can combine different data. There are some indicators available now:

The Componend Counter (ccsimple): This indicator counts all positive underlyings from an instrument like a Index. 75 means that 75% of the index stocks had a positive trade day. This indicator is a good example for what you should use FiMi indicators. It is a tool to combine data from different Fis into one indicator.

The Scrambler: This is a simulation tool. Every time you call this function you get random bars made from real bars. If your trading strategy for example is based on the MA200 you can test the maximum drawdown on a random market situation. Your trading system should pass this test to be a good system.

So how to develop a FiMi indicator?
There is only one way: Prostgres Procedural Language (maybe plpqsql, plperl, ...). Deploy your Indicators as .sql file. You can install these files from terminal with psql -d database -U user < yourfunction.sql

Note these Naming and Coding conventions:
- Your indicators name must start with the prefix "my_"
- Your Indicator must have one of the return types defined in pg_type under the schema fimi (there are: bar, line, histogram, ...).