Idea Generation Skills
Aspiring algotraders have to assume something from the very beginning: "the ideas for a trading strategy are average at best". And in most cases those ideas will be probably median or well below par.
The notion of generating passive income by applying that sensational trading idea is very attractive, but if achieving such a goal happened to be so easy, everybody would do it. And that is not simply the case.
In general it will take (back)testing and then (live)testing many, and then many more, before a success is achieved, if ever.
With difference the most underestimated set of skills by most aspiring algotraders. And this because buzzwords such as "Machine Learning" are there to replace the trading skills.
There are for sure teams of real professional data scientists capable of generating a complex set of statistics by processing the data and making an algorithm out of it, but this is not going to be in general the case of plain old aspiring algotraders
And frankly, those professional data scientists, most likely than not, have very experienced traders and/or long trading experience, in order to decide in which direction the processing of huge data sets have to be processed.
If the aspiring algotrader lacks this fundamental experience, a lot of time has to be dedicated to learning how markets work, asset types, order types, margins, leverage, usual statistics, indicators, trading times, trading volume and its meaning and many more.
And just like in life, one can tell a child not to do something one thousand times, but there is no actual substitute for real experience, gained when actually doing that something.
This is a must. If the aspiring algotrader has limited programming experience, it is going to take time to get to a point where anything with a minimum level of quality and robustness can be programmed. No matter how easy a framework can pack it for the algotrader.
As simple as it sounds, this is really hard to swallow for many aspiring algotraders, who do naturally believe that the programming part of algotrading is the easiest. No, if the aspiring algotrader does not know how to keep a reference to a value as an attribute of an object in the target language (consider C++/Python/Java), the algotrader is far, but very very very, far from being able to engage in algotrading.
Even when general programming experience is there, but not specific for the target language, it is going to take time. Including the time of learning and getting the most out of the chosen framework for developing trading strategies. Because each framework packs the way to work with the data and markets in a different way.
Some aspiring algotraders call for a visual platform in which by simply placing boxes in a diagram, a winning algorithm can be designed. From a formal point of view this can be equivalent to programming something but without having to learn to program. Although it may look great at first, the following things have to be considered
At the end of the day the boxes in the diagram need logical conditions, variables and other things. This is programming
To be able to cope with the different parts of a trading strategy (events, performance analysis, logic evaluation, order management), more than one diagram is going to be needed
Some of the complexities cannot be fully modeled
Bottomline: Take time to master programming, the target language and the target framework. There is simply no way around it.
Although this may sound like a primer to aspiring algotrader, one should see as part of the programming skills. But in many cases you will find people capable of creating huge and complex designs, who fail to meet some basis engineering skills and rules to make sure success can be achieved or failures/bugs can be easily identified.
As much information as needed has to be logged and then a lot more:
When looking again at that algotrading run which was a lot more successful than the current one, one needs to be able to identify even the smallest of details to understand where the differences are.
Hence, things like the following need to be logged:
Version and execution time and execution targets
Timestamps (and if you use intraday data, log intraday timestamps)
Reasons for a trade (indicator values, outcome of a complex logic)
Order issuing (what the algotrader wanted) with target, size, execution type and any other details
Order notifications such as cancellation, rejection, execution (actual price, size, time)
Performance, be it during backtesting or at the end of it
Version numbers have to be logged: ALWAYS, but most importantly: a version control system has to be used. Let us repeat the mantra: A VERSION CONTROL SYSTEM HAS TO BE USED.
There is no way around it. With early sommits early and frequent commits. Version, branches and commits need proper logic and naming, to make sure that understanding what was being done when things were being done is possible.
Yes, this is something to also master although using a GUI in this case is a lot more feasible than using a GUI to develop the trading.
There are several version control systems, but the world has already decided the winner for the algotrader:
GitLabor something else with
gitsupport) is a no brainer. Private repositories are availabe for free.
Although it may seem that when a system trades in an automated manner, there should be no psychology involved, there always is. Even during development.
An algotrader has to design a system which can be psychologically accepted. One has to consider things like the following:
There is no system which always wins
A system can have long losing streaks
Losses can be huge
The drawdown can be extreme before the system makes money
With simply those four things, one has to consider if:
Losing trades can be accepted
Long streaks of losing trades can be taken
Huge losses can be chewed
A single huge loss which produces an enormous drawdown does not drive one crazy
Not each and every algotrader likes losing streaks. Patience and confidence in what was backtested may not be in the arsenal of the backtrader. Some algotraders do actually have those skills to keep the system on running until it delivers the expected results.
When the behavior of the system does not match what the algotrader can take (like long losing streaks), the temptation to stop the system and restart will be great and this may lead to the deactivation and missing the winning streaks.
It may not seem obvious at the beginning but the algotrader, when looking at the system can have targets when designing a system such as:
Aim for low volatility: small wins/losses
Have tight stop-losses in place to control the money lost in losing trades and let winning trades run.
Use enter setups to reduce the number of trades and reduce the length of losing streaks
This will aid in developing a system which fits the psychological pattern of the algotrader and avoid having stomach cramps when the bad times are around.