You've developed an algorithmic stock trading bot to strike it rich :money_mouth:, but you want to backtest it before putting it into production. You have price data on 10 stocks, each tracked at 8 regular time intervals.
import numpy as np
rng = np.random.default_rng( 1234 )
prices = [rng.normal(rng.lognormal( 3 , 1 ), size = 8 ).round( 2 ) for i in range ( 10 )]
prices = np.vstack(prices)
print (prices)
# [[ 4.1 4.78 4.19 4.9 6.95 2.56 4.99 2.37]
# [ 27.81 29.65 27.46 28.84 27.06 26.17 28.76 30.06]
# [ 32.79 34.06 34.56 34.98 32.63 34.49 34.14 33.76]
# [ 19.67 19.73 21.68 20.61 19.87 17.86 19.48 19.85]
# [ 4.24 6.39 5.32 3.87 4.23 5.27 6.68 4.06]
# [ 98.02 96.79 99.02 99.94 98.28 99.15 98.19 98.49]
# [107.11 105.01 109.01 105.19 107.06 106.71 106.13 106.41]
# [ 17.89 16.34 15.88 17.53 18.79 16.91 18.75 16.96]
# [ 96.28 95.84 96.26 94.48 95.42 93.75 93.54 96.24]
# [ 18.31 17.43 16.53 20.2 18.68 17.48 17.33 18.96]]
Element (i ,j ) represents the price of stock i at time j .
For each stock, your algorithm suggests the best time to buy the stock and the best time to sell the stock.
trade_idxs = [np.sort(rng.choice( 8 , size = 2 , replace = False )) for i in range ( 10 )]
trade_idxs = np.vstack(trade_idxs)
print (trade_idxs)
# [[0 1]
# [3 6]
# [2 4]
# [1 5]
# [0 3]
# [2 7]
# [2 3]
# [1 3]
# [3 6]
# [1 4]]
Element (i ,0) represents the time to buy stock i . Element (i ,1) represents the time to sell stock i .
trade_idxs
identifies the index of the buy price and sell price for each stock. So, the holding periods look like this.
| trade_idxs | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
|:-----------|------:|------:|------:|-------:|------:|------:|------:|------:|
| [0 1] | 4.1 | 4.78 | ----- | ----- | ----- | ----- | ----- | ----- |
| [3 6] | ----- | ----- | ----- | 28.84 | 27.06 | 26.17 | 28.76 | ----- |
| [2 4] | ----- | ----- | 34.56 | 34.98 | 32.63 | ----- | ----- | ----- |
| [1 5] | ----- | 19.73 | 21.68 | 20.61 | 19.87 | 17.86 | ----- | ----- |
| [0 3] | 4.24 | 6.39 | 5.32 | 3.87 | ----- | ----- | ----- | ----- |
| [2 7] | ----- | ----- | 99.02 | 99.94 | 98.28 | 99.15 | 98.19 | 98.49 |
| [2 3] | ----- | ----- | 09.01 | 105.19 | ----- | ----- | ----- | ----- |
| [1 3] | ----- | 16.34 | 15.88 | 17.53 | ----- | ----- | ----- | ----- |
| [3 6] | ----- | ----- | ----- | 94.48 | 95.42 | 93.75 | 93.54 | ----- |
| [1 4] | ----- | 17.43 | 16.53 | 20.2 | 18.68 | ----- | ----- | ----- |
Given prices
and trade_idxs
, calculate the average price of each holding period .
Solution 1¶
This content is gated
Subscribe to one of the products below to gain access
Solution 2¶
This content is gated
Subscribe to one of the products below to gain access