16
16
df .set_index ('Date' , inplace = True )
17
17
18
18
# Example trading strategy
19
+
20
+
19
21
def simple_moving_average_strategy (data , short_window , long_window ):
20
22
signals = pd .DataFrame (index = data .index )
21
23
signals ['Signal' ] = 0.0
22
-
23
- signals ['Short_MA' ] = data ['Close' ].rolling (window = short_window , min_periods = 1 , center = False ).mean ()
24
- signals ['Long_MA' ] = data ['Close' ].rolling (window = long_window , min_periods = 1 , center = False ).mean ()
25
-
26
- signals ['Signal' ][short_window :] = np .where (signals ['Short_MA' ][short_window :] > signals ['Long_MA' ][short_window :], 1.0 , 0.0 )
27
-
24
+
25
+ signals ['Short_MA' ] = data ['Close' ].rolling (
26
+ window = short_window , min_periods = 1 , center = False ).mean ()
27
+ signals ['Long_MA' ] = data ['Close' ].rolling (
28
+ window = long_window , min_periods = 1 , center = False ).mean ()
29
+
30
+ signals ['Signal' ][short_window :] = np .where (
31
+ signals ['Short_MA' ][short_window :] > signals ['Long_MA' ][short_window :], 1.0 , 0.0 )
32
+
28
33
signals ['Positions' ] = signals ['Signal' ].diff ()
29
-
34
+
30
35
return signals
31
36
37
+
32
38
# Define strategy parameters
33
39
short_window = 10
34
40
long_window = 50
@@ -45,8 +51,10 @@ def simple_moving_average_strategy(data, short_window, long_window):
45
51
portfolio_value = []
46
52
for index , row in signals .iterrows ():
47
53
if row ['Positions' ] == 1 :
48
- max_position_size = (risk_per_trade * initial_portfolio_value ) / (row ['Close' ] - row ['Low' ])
49
- position = min (max_position_size , initial_portfolio_value / row ['Close' ])
54
+ max_position_size = (
55
+ risk_per_trade * initial_portfolio_value ) / (row ['Close' ] - row ['Low' ])
56
+ position = min (max_position_size ,
57
+ initial_portfolio_value / row ['Close' ])
50
58
initial_portfolio_value -= position * row ['Close' ]
51
59
elif row ['Positions' ] == - 1 :
52
60
initial_portfolio_value += position * row ['Close' ]
@@ -66,7 +74,8 @@ def simple_moving_average_strategy(data, short_window, long_window):
66
74
plt .title ('Price Data and Moving Averages' )
67
75
68
76
plt .subplot (2 , 1 , 2 )
69
- plt .plot (signals .index , signals ['PortfolioValue' ], label = 'Portfolio Value' , linestyle = '--' , color = 'green' )
77
+ plt .plot (signals .index , signals ['PortfolioValue' ],
78
+ label = 'Portfolio Value' , linestyle = '--' , color = 'green' )
70
79
plt .legend ()
71
80
plt .title ('Portfolio Value' )
72
81
0 commit comments