Welcome to NexusFi: the best trading community on the planet, with over 150,000 members Sign Up Now for Free
Genuine reviews from real traders, not fake reviews from stealth vendors
Quality education from leading professional traders
We are a friendly, helpful, and positive community
We do not tolerate rude behavior, trolling, or vendors advertising in posts
We are here to help, just let us know what you need
You'll need to register in order to view the content of the threads and start contributing to our community. It's free for basic access, or support us by becoming an Elite Member -- see if you qualify for a discount below.
-- Big Mike, Site Administrator
(If you already have an account, login at the top of the page)
Learning Python vs a specific platform lang like EasyLang or Amibroker AFL?
Hey guys, I'm a busy man with no programming knowledge and I'm trying to decide if I should learn Python for backtesting and coding algos versus a platform specific language like Amibroker's AFL for their fast backtesting or Multicharts' Easylanguage.
I wanted to ask the python users here how fast is backtesting in python say compared to Amibroker or Multicharts, and if the learning curve it worth it. My half formed opinion is that learning python would serve me well in other things like machine learning or coding algos and as a nice skill to have outside of trading in other aspects of my career. How hard is getting an detailed intraday multiyear backtest and some monte carlo simulations going in python as compared to the ready made functions in Amibroker?
Broker: NT Brokerage, Kinetick, IQFeed, Interactive Brokers
Trading: ES
Posts: 159 since Dec 2014
Thanks Given: 40
Thanks Received: 166
Hello crystalball,
I'll take a stab at answering your question. Bottom line up front, if you do not have a programming background, you will not be able to replicate the fidelity of off the shelf packages like Multicharts, NinjaTrader, or AmiBroker.
I say this specifically to address one key statement you made, "intraday multi year." Intraday means that you will be needing to deal with NBBO tick level level 1 or possibly even full order book level 2 data. These can be daunting tasks even for seasoned professional programmers.
The other aspect is multi year. I'll go with the lesser extreme example and say you're only dealing with NBBO level 1 data. Even for one instrument (ES for example), you're talking in the order of 100GB+ for a years worth of tick data. Accurate historical tick data is also very expensive for the one man show retail trader. With this amount of data, you'll need a true understanding of multithreading, asynchronous programming (enjoy race conditions), atomic programming, just to name a few. I'm not even going to touch on database approaches for storing tick level data. There are multiple threads on here addressing just that issue (NoSQL vs relational) alone. While these can be achieved in python, you'll need a full blown strongly typed language like c#, Java, c++, etc for a production pipeline to make a living with it. The caveat would be if you had a longer term strategy in which you could absorb a multi hour overnight scheduled task. Intraday, maybe an extremely proficient python developer could do it but they'd be using some advanced concepts undoubtedl(cython, offloading to c++, native memory calls, etc).
I'll close with a word of caution. There is a way to do multi year backtest much faster by cutting some corners and using 1m bar data. I'll say that you'll virtually never see anyone or any company put an automated strategy into production based on 1m bar data.
I am in the throws of doing all of the above and have an extremely talented team working for me and we're a year past our initial goal deadline. This stuff is extremely complicated to get truly right.
Coming from almost exactly the same situation as yours myself, I suggest you start with platform specific language. Easylang and NinjaScript are the best bet. You won’t waste your effort because the skill you build in learning it will not go to waste. You will pick up Python relatively fast if you end up deciding you want to persue it further.
It’s just more time efficient and resource efficient to start off with EasyLanguage or NT especially you are a busy man.
But if you also wish to learn Python as a skillset to aid ur career, def go for it.
I personally went through the route of Excel, to CQG, to NT, to MATLAB and now Python. I made each transition because I realised their limitations but I still use most of them nowadays because on the other side, each tool/language has their own strengths.
I don’t think there is right or wrong answer here. So I suggest you to pick one and get cracking, you will quickly learn whether it suits you or not.
Opportunity cost is a major concern for me. I'm already learning Python and have done a few data manipulation and automation programs with it, nothing major just hacking around, Googling for answers and I made a few things work for my main job.
I want to eventually get into running Algo and it seems like most pro platforms that have well documented APIs have all their examples in C++. I might learn just enough C++ to I guess interop? with my main language python.
I actually want to get into machine learning and using my personal data of how/when I win/lose to create an algo that can learn from my trading and create some best practices that won't just help me with my algo but with my manual trading.
I also want to create some chartless scalp based indicators as well.
Another consideration is Sierra automated trading.
It has good backtesting and automated spreadsheet trading with entry and exit rules.
There is also an optimization backtester software for a small fee.
Also Sierra has great advanced trade management techniques (moving to BE, trailing stop, splitting contracts on different exit strategies)
This combination might be an easier way to run auto trading
of course i dont have the experience .. i am just a newbie at this.. but want to throw it out there in case there is someone who does and can comment
One addendum in addition to the useful information that has already been posted is that if you use python on windows, you can use the visual studio environment and mix python with other languages such as C# and C++ transparently using dot net interoperability.