Buy when current price exceeds 5-period moving average.
| Parameters: |
-
portfolio_obj
(portfolio)
–
-
data_obj
(DataAPI)
–
DataAPI instance for price data.
-
time_step
(int)
–
|
| Returns: |
-
List[Tuple[str, int, int, float]]
–
List of trade tuples (stock, shares, flag, price).
|
Source code in Backtesting/strategy.py
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70 | @staticmethod
def strategy(portfolio_obj: portfolio, data_obj: DataAPI, time_step: int) -> List[Tuple[str, int, int, float]]:
"""Buy when current price exceeds 5-period moving average.
Args:
portfolio_obj: Current portfolio state.
data_obj: DataAPI instance for price data.
time_step: Current time step.
Returns:
List of trade tuples (stock, shares, flag, price).
"""
#simple moving average window
cash = portfolio_obj.cash
output = [] #[(stock, num shares to buy/sell, buy/sell flag, price per share)]
for stock in portfolio_obj.positions:
average_price = 0
if cash < 0:
break
window_size = min(5, time_step)
if window_size == 0:
continue
average_price = 0.0
start_step = time_step - window_size
for t in range(start_step, time_step):
average_price += data_obj.get_price(stock, t)
average_price /= window_size
curr_price = data_obj.get_price(stock, time_step)
if average_price < curr_price and curr_price <= cash:
output.append((stock, 1, 1, curr_price))
cash -= curr_price
print(output)
return output
|