software and programming

Discussion in 'Automated Trading' started by propslave, Apr 29, 2009.

  1. Just curious what type of software you guys are using for backtesting and automating your strategies... are there several industry leaders worth looking at? What programming languages did you have to learn to build your automated system? Which one is the most relevant?
     
  2. Hi propslave,

    Lot of people uses Ninja-Trader. As far as I know (never tried it myself) it uses C# as programming language.
     
  3. EasyLanguage > WealthScript > Python > C# > C++ > F#(OCaml)
     
  4. You really use EL?

    I like EL, I really do; however, I think the position management in that language is a little weird, .. and by weird, I mean the way things work in the book "Professional Stock Trading" where he goes over all the ACME systems.

    That's a good book, btw. I never ran any of his stuff and didn't like the way he implemented some things, but it's still worth reading through.

    For me:

    R, Python, NinjaTrader's C#, then C++

    I haven't abandoned NT, but it's taking the time to get understand the quirks of NT I find problematic. I think their strategy trading model/paradigm is a little bit broken.
     
  5. Used to use:
    EasyLanguage > WealthScript > Python >

    Currently:
    C# > C++ > F#(OCaml)

    EasyLanguage. I started out with TS 4.0. Got 2000i and stopped there. Adandoned because I needed multiple symbol testing.

    WealthScript. I was playing around with it when it first came out. Abandoned because I needed to stop sending manual orders.

    Python. Developed my first tester with it. Abandoned because I was a programming newbie and the broker API samples were in C++, Java or .NET .

    C#. I wrote everything in this language.

    C++. I was required to abandon broker APIs and use FIX which lead me to use QuickFIX written in C++. I needed to tweak the source code so ended up learning it. Soon after, I had to deal with non-Windows environment so I ended up writing more stuff on C++. Though, I hate pointers, I don't understand them, and prolly never will. I hate writing headers and they're annoying.

    F# (OCaml). I just started learning this. I'm utterly confused with Functional Programming Conventions but I'm getting there.

    Java. Abandoned because their GC sucked. As mentioned, my memory management sucks, I hate pointers. After writing a datafeed app. in Java, the system would go all slow with unmanaged memory which I couldn't fix. Java is only good for coffee. Hot liquid and computers don't merge well. I hate Java because I suck at it.
     
  6. Pointers aren't too bad. The reason they confuse people is because they don't understand why anyone would really need that kind of indirection. In terms of human thinking, if you know an object is there, why would you have to dereference it? Of course, hardware "thinks" differently than a person.

    Pointers are mostly an artifact resulting from how hardware is designed. At the assembly level, you can't possibly[1] represent a complex structure or record in terms of something you load into a hardware register. In the most general sense, a hardware register only holds a number. Pointers are just numbers, but they're used as memory addresses.

    If you have a pointer to some object, that pointer is fundamentally just a memory address that gets saved as a means of knowing where to go to get the rest of the information in the structure. At the lowest level, it gets loaded into a hardware register, and then added to an offset to fetch the right contents from memory. In other words, the pointer is a number (address) that is then indirectly used as a means of getting at the data.

    In C# and Java, references are kind of like pointers in that they refer to objects at specific memory locations; however, the language designs don't force programmers to worry about managing what information is at what address because of the garbage collector. They aren't truly systems-software languages ... ( though I've seen people do things like build Java-based kernels -- they usually have some C code to bootstrap the system and have a VM written in C. After that the rest of the system is done in Java code written on top of the VM.)

    In C and C++, you can do things like use pointers to point at memory-mapped I/O structures, work with hardware directly, or roll your own heap-management functions to save yourself time in time-critical functions.


    [1] With the usual hardware, anyway
     
  7. I actually understand what pointers and ref are. The problem is how they are controlled. It's like an counter-intuitive regex. like control using '*'.

    Me don't like '*'....
     
  8. pre-backtest prototyping for simple stuff: wealth-lab

    everything else: custom c++

    most relevant: c++. almost everything i've seen API wise is written in or has a version written in this. if you do any serious automation, at some point, you'll probably have to learn it.
     
  9. * => dereference
    no-star => addressing, purely numerical

    It's Easier if you understand assembly language. :) Difference between [eax] and eax, in Intel-style assembly. [eax] use indirection on the contents of eax, versus using the value of eax itself.

    Only difference from assembly is that C is smart enough to manipulate the address numerically based on the sizeof() result of the type associated with the pointer.

    I learned to use pointers because, way back when, DOS programmers used to actually have to take a pointer to the video memory to draw images on the screen. Knowing how to manipulate the pointers allowed you to draw images. For CGA video cards, it used to be that you needed to know which memory bank was the odd memory bank and which one was the even memory bank. You had to keep a representation of the screen such that you had to work around the hardware, and that's where the pointers came in handy.

    (... and while I am young, I did have to learn how to use CGA because my parents didn't want to buy a better computer. I was a desperate teenager and wanted to make video games.)

    These days, I don't think application level programmers really need to understand pointers so much with C# and Java around.
     
  10. My career was in IT for 35 years before I retired to trade full time. I wrote some of my first trading programs in OS/390 Cobol in the 1980s. Then moved my data to DB2 in 1990s and added SQL. When PCs came out gradually convert the programs to Basic.

    When Omega Research came out with software in 1990s I was one of their first customers. I have been programming in Easy Language ever since. Now all my strategies are automated on Tradestation and support me. I’m trying to learn C# to convert them to NinjaTrader.
     
    #10     Apr 30, 2009