Algorithmic Trading Wardley Map

I have been drawing this map as part of a conversation on slack with other user (Tom) where I was trying to figure out what map and needs are required.

So I started with the user: the algorithmic trader. This person wants to implement an algorithm for executing trades automatically without human intervention. So, the design of a system, the back-test of the algorithm and the execution of the final tested code are its main needs.

Then, you could decide if to do it by yourself or using one of the existing platforms. I know Quantopian a little bit, so I have used this one as reference for the map (you can use others).

I have drawn the lines in different colors to differentiate the selection of a user that wants to take one route or other: user that builds its own environment (green) or that uses a platform (orange).

I have doubts with the practice, in the few knowledge I have, practices depends more on the models and technique that an author writes about.

The Wardley Map

The typical steps that an algorithmic trader do are:

  1. Design the system starting defining the trading rules that wants to put in place. Once done it’s moved into an algorithm.
  2. The algorithm is tested on a data set, and results are evaluated through a set of indicators and standard values that traders use to work with.
  3. Once a tested algorithm is considered as valid, the code is executed in production with real money.

Key aspects of the map:

  • Real time data is key for the execution of the code, specially if the algorithm works well in small spaces of time. There is a big space of work here and the competition with high frequency traders is tough.
  • The connection with the broker is key, a platform as Quantopian that used to have it, removed it. The brokers uses to enable APIs for connections from external computers. Here again the time response is key.
  • One of the advantages of Quantopian is that they offer a prepared datasets that in the past had high quality. This makes you save a lot of time because the preparation and maintenance of data is something that is very time consuming.
  • I have not represented concepts as risk management, as this is something conceptual that the algorithm trader has to implement in the code following the principles, rules and systems that is more valid for him/her.

Quantopian Business model

This Bostonian company has two main lines of business are:

  1. Developer members, who develop and test algorithms for free, focusing on specific factors that, in case they are winning algorithms, can be added to Quantopian’s offerings to institutional investors. In this case they can have some royalties or commissions.
  2. Institutional investors, have their investments managed by the winning algorithms.

There were a moment where they took a decision

In 2017, Quantopian decided not support the connection with live trading brokers

I have read this note, where it’s announced that Quantopian no longer supports live trading through Interactive Brokers (or Robinhood). Here, the users are moving to other environments, some of the ones mentioned are:

Reading the comments of the forums, it seems that the solutions are not perfect, but the users are surviving using other environments. The users having their own environment must be laughing.

The point is, Quantopian wanted to have a free environment to promote winning scripts and then use them with their institutional investors. To have real winning algorithms you need real competition that forces people to find higher profits, not just a mediocre profit that an individual could use to earn some dollars. They probably identified that real competition was invaded by average brokers that wanted to take advantage of a free environment, and they cut the umbilical cord for these average brokers.

Announcement on October 29th

Quantopian’s Community Services are Closing, this is the title of the note published to announce the closing of the Research and Backtesting are no longer available.

Gameplays

We can identify two sets of gameplays used by Quantopian:

  • Education: they have had a clear approach to educate people and the amount of educational content is really extense and high quality.
  • Open approaches: the use of python as programing language enabled them to attract a lot of researches that are used to work with it, and to take the advantage of libraries as Zipline.
  • Differentiation: they were offering the institutional investors a set of algorithms that were tested and they had real winning percentage and profits. The market is very extense, and to have an “army of researchers” looking for weird correlations that leverage profits for “free” is something definitely different.
  • Creating constraints : the removal of access to live brokers was an invitation to some set of users to leave the environment. I can imagine that they took the number of users connected to brokers, and they easily calculated the amount of resources that they were consuming.

Which other gameplays do you identify?

Which other platforms exist?

I found this picture in https://tradingtuitions.com/  that is very useful to understand some of them:

 

Monthly POMO evolution

I was digging into the Permanent open market operations (POMO) this August, trying to understand the impact of the FED in the stock market.

Now that some months after the turmoil have passed, I have looked into the numbers in a monthly basis.

The amount injected by the Fed in the market during these 9 first months of 2020 is:

To see the evolution of the last 4 months in a better way, I have removed March and April. This is how data looks like:

What about the 2.3T$ promised by the FED?

In March the FED announced a stimulus program of 2.3T$ for the market through POMO. Right now they have spent 1.84T$ which is around 80% of the program.

What’s coming during next 6 weeks?

Well the main events are:

  • US President election.
  • Q3 results of the majority of the main companies of the indexes.

 

 

tradingview pine limit

I am trying to write a script on Pine (related to a Tradingview strategy) where I want to use the series and take the previous value or past values to make a set of operations.

Something as:

a = if(Alerta1[-1] == 5, 10,0)

the pine script is saved without error, but during the execution, an error is shown:

Index can’t be a negative value (-1)

Is there anybody that could let me know how to solve it?

I would like to use “[-1]” and other “minus” such “[-20]” for a script.

many thanks in advance

The answer

The answer is as simple that I’m embarrassed of not being able to see it:

https://www.tradingview.com/pine-script-docs/en/v4/language/Operators.html#history-reference-operator

Value Line Geometric Index

The american market (I focus on S&P 500) has recuperated 40% of the value since March where it touch the minimum value.

It’s an impressive “come back” while the macro economy data is showing terrible numbers about unemployment, consumption, industrial production….

The economy and the market are driving themselves in the opposite direction. So, so many questions come to my mind:

  • Is the market crazy?
  • is the market completely disconnected from the economy?
  • are we looking at the right numbers?

Well, Mr. Market does what he wants, and we cannot do anything about it. Disconnected from the economy? I do not think so, maybe there is a bubble, but sooner or later it will adjust. Well, my answers are poor, and it’s basically because I have not a concrete answer to these questions.

The last question: “are we looking at the right numbers?” makes me to go to Value Line Geometric Index

Value Line Geometric Index

This index includes all the american market. For more information the Wikipedia.

“All companies in the Value Line Composite Index are publicly listed on one of the major exchanges listed below. The number of companies in the Value Line Composite Index fluctuates based on factors including: the addition or delisting of the companies on the exchanges themselves, mergers, acquisitions, bankruptcies, and the coverage decisions made by Value Line for the Value Line Composite Index. Value Line’s decisions as to which companies to include are undertaken with the intention to create a broad representation of the North American equity market.

Exchanges in The Value Line Composite Index are:

  • American Stock Exchange
  • NASDAQ
  • New York Stock Exchange
  • Toronto Stock Exchange

Well, comparing the VALUG (blue) with SPX (red), you can see that Value Line Geometric Index is more closed to the reality that I had in mind that is that we still have not recuperated.

If we look the comparison of the indexes from February 12th, the result is that draw-down is bigger for VALUG, and that the recuperation is below than S&P:

Update on 07/August/2020

  1. The Value line has crossed over the 200 days SMA for the second time. This is an interesting point of intersection.
  2. This event happened in June and the market reacted for few days. These days the FED did not use big amount of money on POMO.

To do: I will add this index to my reviews, I have first to learn from it.

Spanish market issue: script dividend as extended policy

One of the big issues of the stock market in Spain is the one represented in this picture.

Dividends? No, “papers”

Some of the popular investment methods is based on dividends, some others at least recognize that dividends is an incentive to invest on a company.

The main companies in the IBEX-35 market, so many times, instead of cutting the dividend or ask for money to the market, they have created a mechanism to do two things at the same time: script dividend.

They define a process with different steps that you have to follow. Mainly there are 2 options:

  • you grab the dividends and run.
  • you grab a set of new stocks (a new amount of stocks published to inject extra money into the company).

The process to do it

Once that is declared the “script dividend” you have to learn how to go through the process of claiming the new stocks or to take the dividend itself. This process is not straight forward, it’s a very complex process that requires you time to understand it, and then you have to pay attention the key days where you have to make a decision.

In a nutshell, so many small investors fall in the trap and they capture more stocks that they really do not want, diluting the value of the company.

My opinion

is that an incentive turns into an obligation to the investor, making him to decide on something that is not initially their responsibility. The result in the long term is not working well for the companies that are following this policy.

 

 

 

Fundsmith annual shareholder meeting 2020

I discovered this shareholders meeting last year and I was willing to review it in detail. Below some notes.

First 33 minutes is the formal presentation, after that Q&A.

The link to the letter to shareholders: https://www.fundsmith.co.uk/docs/default-source/analysis—annual-letters/annual-letter-to-shareholders-2019.pdf?sfvrsn=6

Minute #10:

Why they sold 3M on the one hand, 3M sold its ceramic bulletproof business unit at a price of 1.1x sales and acquired Acelity, which was a private company, for 11x EBITDA. Acelitywas actually going public and according to the prospectus, the opening price was was going to be 15x EBITDA. When asked about the difference between 11 and 15, they claimed that they announced the multiple of 11 EBITDA for the expected synergies. Fundsmith interpreted this as a lie.

In the shareholder letter: “we were acting on growing doubts about the current management’s capital allocation decision”.

minute #37:

Sub-estimate the impact of Covid-19.

minute #48:

Replying about why they don’t buy Apple or Alphabet.

About Google: ROE in 2019 is about 17%, which is average. Capital allocation is poor: they acquire small potential companies that could become competence in some niche and they dissolve these projects.

About Apple: sales and cash flow are flat in the last 4 years and the stock price has tripled. They saw the same behavior in companies as Nokia.

Comment about Sortino Ratio Versus Sharpe Ratio

The Sortino ratio is an adaption of the Sharpe ratio, and in my view an improvement. Whereas the Sharpe ratio estimates risk by the variability of returns, the Sortino ratio takes into account only downside variability as it is not clear why we should be concerned about upside volatility (i.e. when our Fund goes up a lot) which mostly
seems to be a cause for celebration.

Market Opening checklist

This is a checklist of things to review once just before and after the market is opened.

Before market opens (9:15 ET)

  • Check S&P and Nasdaq futures indexes.
  • Previous day closing, Market breadth check , McClellan indicator.
  • How is Europe going on? Check DAX.
  • Check DIX and GEX Index in squeeemeetrics, from previous day.
  • EUR/USD trend.
  • Any major news to take into account?

After market opens (9:35 ET)

  • Check S&P trend in comparison with the futures.
  • Check the swing portfolio.
  • Check the potential new longs I have in the list.

Out of hours

  • Read quarterly files.
  • Review list of candidates
  • Read the next chapter of a book.
  • Set target purchase price on notebook.
  • Check swing screen on swing stocks.

 

System: Carter MA 8 – 21

Abstract

In his book “Mastering the trade”, John Carter proposes a simple system based on the moving averages of 8 and 21.

I have implemented the basis of this system and I have changed some behaviors:

I have build this system on Tradingview and I have done some back-testing in 3 periods to see how it works.

The system

The system code is this one:

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © joapen

//@version=4
strategy("Carter EMA(8/21)", overlay=true)

// === BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1)
FromDay   = input(defval = 1, title = "From Day", minval = 1)
FromYear  = input(defval = 2020, title = "From Year", minval = 2000)
ToMonth   = input(defval = 12, title = "To Month", maxval = 12)
ToDay     = input(defval = 31, title = "To Day", maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", maxval = 2020)

//
// SQZMOM
//
length = input(14, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC=input(20, title="KC Length")
multKC = input(1.5, title="KC MultFactor")

useTrueRange = input(true, title="Use TrueRange (KC)", type=input.bool)

// Calculate BB
source = close
basis = sma(source, length)
dev = multKC * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev

// Calculate KC
ma = sma(source, lengthKC)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC)
upperKC = ma + rangema * multKC
lowerKC = ma - rangema * multKC

sqzOn  = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz  = (sqzOn == false) and (sqzOff == false)

val = linreg(source  -  avg(avg(highest(high, lengthKC), lowest(low, lengthKC)),sma(close,lengthKC)), lengthKC,0)

// lime green  red marron
sqzLong = iff( val > 0, iff( val > nz(val[1]), true, false), iff( val < nz(val[1]), false, true))
// Plots
plot(upperBB, title="BB", color=color.green)
plot(ema(close,8), title="EMA(8)", color=color.orange)
plot(ema(close,21), title="EMA(21)", color=color.red)

longCondition = (ema(close, 8)> sma(close, 21)) and (close < ema(close, 8) and sqzLong) and time > timestamp(FromYear, FromMonth, FromDay, 00, 00) and time < timestamp(ToYear, ToMonth, ToDay, 23, 59)
alertcondition(longCondition, title='Long', message='long!!!')
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = (close > upperBB ) or (ema(close, 8)< sma(close, 21) or val<0) and time < timestamp(ToYear, ToMonth, ToDay, 23, 59)
alertcondition(shortCondition, title='Short', message='short!!!')
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

Back-testing conditions

  • Amount = 100.000$
  • Commission = 0$
  • List of companies: fix list of companies I know with different behaviors, volatility and industries: BEN, TROW, CTVA, AEMD, GMRE, WBA, CVS, MO, DT, GE.

Quality of the samples:

  • Minimum around 200 trades to consider a good amount of cases.
  • Share Ratio > 1
  • Profit Factor > 2

Back-testing results for first date range

  • Date range = 1/1/2020 – 13/05/2020
  • Time frame = 5 minutes

Volatility during this period have been so high:

Back-testing results for second date range

  • Date range = 1/1/2019 – 13/05/2019
  • Time frame = 15 minutes (Tradingview does not enable me to do it in 5 minutes)

Back-testing results for bio companies in 2020

  • Date range = 1/1/2020 – 13/05/2020
  • Time frame = 5 minutes

Conclusions

15/05/2020

  • I have to improve or discard this system.
  • Check when the market trend is better.
  • Check when volatility is lower.