-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathstrategy.py
112 lines (96 loc) · 2.92 KB
/
strategy.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
from ta import add_all_ta_features
from ta import volatility as vlt
from ta import volume as vol
from ta import momentum as mom
from ta import trend as tr
from ta import others as oth
from functions import get_ohlc
import pandas as pd
def strategy(symbol, interval):
df=get_ohlc(symbol, interval)[::-1].copy()
'''
\\\\\\\\\\\\\\\\\\\\ POPULATE INDICATORS ||||||||||||||||||||
full indicators list: https://technical-analysis-library-in-python.readthedocs.io/en/latest/ta.html
'''
#MACD
macd = tr.MACD(close=df['close'],window_slow=26,window_fast=12,window_sign=9)
df['MACD_MAIN'] = macd.macd()
df['MACD_HIS'] = macd.macd_diff()
df['MACD_SIG'] = macd.macd_signal()
#BOLLINGER BANDS
indicator_bb = vlt.BollingerBands(close=df["close"], window=20, window_dev=2)
df['bb_bbm'] = indicator_bb.bollinger_mavg()
df['bb_bbh'] = indicator_bb.bollinger_hband()
df['bb_bbl'] = indicator_bb.bollinger_lband()
#RSI
rsi = mom.RSIIndicator(close=df['close'],window=14)
df['RSI'] = rsi.rsi()
#SMA
ma = tr.SMAIndicator(close=df['close'], window=200)
df['SMA'] = ma.sma_indicator()
'''
\\\\\\\\\\\\\\\\\\\\ POPULATE CONDITIONS ||||||||||||||||||||
'''
def volume_check(df):
df['volume_check'] = False
if( df['volume'][0] > 0 ):
#SET FLAGS
df['volume_check'] = True
else:
df['volume_check'] = False
return df
volume_check(df)
'''
\\\\\\\\\\\\\\\\\\\\ POPULATE BUY SIGNALS ||||||||||||||||||||
'''
'''
A Simple Bollinger bands strategy
'''
#BUY SIGNAL
def buy_signal(df):
"function to generate signal"
df.loc[
(
(df['volume_check'] == True) &
(df['RSI'][0] < 30) &
(df['close'][0] < df['bb_bbl'])
),
'buy'] = 1
return df
df = buy_signal(df)
#BUY MOVING STOPLOSS
def buy_close(df):
df.loc[
(
(df['volume_check'] == False)
),
'buy_close'] = 1
df['buy_close'] = pd.to_numeric(df['buy_close'])
return df
buy_close(df)
'''
\\\\\\\\\\\\\\\\\\\\ POPULATE SELL SIGNALS ||||||||||||||||||||
'''
#SELL SIGNAL
def sell_signal(df):
df.loc[
(
(df['volume_check'] == True) &
(df['RSI'][0] > 80) &
(df['close'][0] > df['bb_bbh'])
),
'sell'] = 1
df['sell'] = pd.to_numeric(df['sell'])
return df
sell_signal(df)
#SELL MOVING STOPLOSS
def sell_close(df):
df.loc[
(
(df['volume_check'] == False)
),
'sell_close'] = 1
df['sell_close'] = pd.to_numeric(df['sell_close'])
return df
sell_close(df)
return df