"Be careful about using the following code -- I've only proven that it works, I haven't tested it." -- Donald KnuthI have finally started my dynamic allocation of equity project. This is something I've stewed about for several weeks...okay...maybe months. But, after meeting with Jon for lunch this weekend...I finally got the motivation back to begin work on the project. Thanks Jon!
And seeing as how I hardly ever write anything of significance on this blog...I figure I'd start documenting some of the steps I'm taking to get this project on the road.
First thing was to find a better coding environment than what I was using. I have been using the PythonWin IDE for my trials and tribulations. I needed more oomph. Hopped over to Vim and have hunted and pecked my way around a bit. No flow joe yet.
Before moving on...does anybody know of a windows or even linux distro of the EVE$EDITOR? Somebody? Anybody? Hello?
Just a week ago, I found out about the new Pydev extension to Eclipse. Pretty nice. It's still not perfect...but much closer to what I'm looking for. So, now that I've found an IDE that allows me to play in the sandbox a bit...on to the database choice.
I downloaded pytables due to their "designed to efficiently and easily cope with extremely large amounts of data" claim to fame. And then did nothing with it. It's not the relational type of storage I'm used to...so maybe that's why. Thought maybe a viewer would help, so downloaded the vitables viewer. It was nice...but still did nothing with it.
Okay, maybe I'm making this too hard. One of the python programmers I know mentioned Sqlite. Downloaded it. Found the python extension for it here. Explored documentation for working with it here and here. Now, I'm getting somewhere. Wrote a few python modules to test create, insert, drop, and fetch. Here they are:
Create Table in Python/Sqlite:
******Begin of Code***********************
from pysqlite2 import dbapi2 as sqlite
conn = sqlite.connect("TaylorTree")
cursor = conn.cursor()
SQL = """
create table MarketDaily
(
Symbol text,
Bar SQL_DATE,
Open float,
High float,
Low float,
Close float,
Volume float,
AdjClose float,
primary key (Symbol, Bar)
);
"""
cursor.execute(SQL)
******End of Code***********************
Insert into Table:
******Begin of Code***********************Fetch from Table:
from pysqlite2 import dbapi2 as sqlite
conn = sqlite.connect("TaylorTree")
cursor = conn.cursor()
SQL = """
insert into MarketDaily
(Symbol, Bar, Open, High, Low, Close, Volume, AdjClose)
values
(
"YHOO",
20060801,
20.00,
25.00,
19.00,
22.00,
50000,
22.00
);
"""
cursor.execute(SQL)
conn.commit()
******End of Code***********************
******Begin of Code***********************
from pysqlite2 import dbapi2 as sqlite
conn = sqlite.connect("TaylorTree")
cursor = conn.cursor()
SQL = "select * from MarketDaily"
cursor.execute(SQL)
# Retrieve all rows as a sequence and print that sequence:
print cursor.fetchall()
cursor.close()
******End of Code***********************
Drop Table:
******Begin of Code***********************
from pysqlite2 import dbapi2 as sqlite
conn = sqlite.connect("TaylorTree")
cursor = conn.cursor()
SQL = "drop table MarketDaily"
cursor.execute(SQL)
******End of Code***********************
Not too bad. Not too hard. But, then I figured I'd make a module that would handle all this stuff for me. Some hard work began...all because I had no idea how to use symbolics in Python/SQL. Finally discovered the needle in a haystack...'%s'. Aha!
******Begin of Code***********************After spending a lot of time getting all that going...I then turn back to pytables. Maybe I need to dig deeper there. Found some very good documentation here. But, I'm still sitting here...nothing. Hey, someone give me some motivation on working with this bad boy! Anybody have any experience to share in regard to pytables? If so, bring it on! I need some mojo!
from pysqlite2 import dbapi2 as sqlite
conn = sqlite.connect("TaylorTree")
cursor = conn.cursor()
def UpdatePrice(sym, b, o, h, l, c, v, ac):
SQL = """
insert into MarketDaily
(Symbol, Bar, Open, High, Low, Close, Volume, AdjClose)
values
(
'%s',
%s,
%s,
%s,
%s,
%s,
%s,
%s
);
""" % (sym, b, o, h, l, c, v, ac)
cursor.execute(SQL)
conn.commit()
******End of Code***********************
And that's where I am now. Oh...and of course, will begin working on spinning through TC2005's databank and load historics into Sqlite. How do I do that? That involves working with COM objects and Python makes it very easy for you. In fact...I'm amazed at how complicated it is to call a COM object from Microsoft's own languages like C#. In python...all you have to do in order to get to the TC2005 COM object is...
******Begin of Code********2 lines. Now, I'm sure there is a much easier way to call a COM Object in C# that what I was trying to do. If anyone out there knows how...please leave a comment. I'm really interested to see how many lines it takes to connect.
import win32com.client
w=win32com.client.Dispatch("TC2000Dev.cTC2005")
******End of Code**********
One last thing...if C# is your thing...check out Microsoft's free version of Visual Studio, C#, and even SQL Server via the Express Editions. C# not your cup of tea? There is Visual Basic, Visual C++, and even Visual J++.
And that's it from here...where I'm hoping to catch up on some much needed sleep.
Later Trades,
MT