forked from OpenBB-finance/OpenBB
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathta_menu.py
135 lines (107 loc) · 5.55 KB
/
ta_menu.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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import FundamentalAnalysis as fa
from alpha_vantage.fundamentaldata import FundamentalData
import config_terminal as cfg
import argparse
import datetime
from datetime import datetime
from helper_funcs import *
import pandas as pd
import json
import requests
from pandas.io.json import json_normalize
from technical_analysis import overlap as ta_overlap
from technical_analysis import momentum as ta_momentum
from technical_analysis import trend as ta_trend
from technical_analysis import volatility as ta_volatility
from technical_analysis import volume as ta_volume
# -----------------------------------------------------------------------------------------------------------------------
def print_technical_analysis(s_ticker, s_start, s_interval):
""" Print help """
s_intraday = (f'Intraday {s_interval}', 'Daily')[s_interval == "1440min"]
if s_start:
print(f"\n{s_intraday} Stock: {s_ticker} (from {s_start.strftime('%Y-%m-%d')})")
else:
print(f"\n{s_intraday} Stock: {s_ticker}")
print("\nTechnical Analysis:") # https://github.com/twopirllc/pandas-ta
print(" help show this technical analysis menu again")
print(" q quit this menu, and shows back to main menu")
print(" quit quit to abandon program")
print("overlap:")
print(" ema exponential moving average")
print(" sma simple moving average")
print(" vwap volume weighted average price")
print("momentum:")
print(" cci commodity channel index")
print(" macd moving average convergence/divergence")
print(" rsi relative strength index")
print(" stoch stochastic oscillator")
print("trend:")
print(" adx average directional movement index")
print(" aroon aroon indicator")
print("volatility:")
print(" bbands bollinger bands")
print("volume:")
print(" ad chaikin accumulation/distribution line values")
print(" obv on balance volume")
print("")
# ---------------------------------------------------- MENU ----------------------------------------------------
def ta_menu(df_stock, s_ticker, s_start, s_interval):
# Add list of arguments that the technical analysis parser accepts
ta_parser = argparse.ArgumentParser(prog='ta', add_help=False)
ta_parser.add_argument('cmd', choices=['help', 'q', 'quit',
'ema', 'sma', 'vwap', # overlap
'cci', 'macd', 'rsi', 'stoch', # momentum
'adx', 'aroon', # trend
'bbands', # volatility
'ad', 'obv']) # volume
print_technical_analysis(s_ticker, s_start, s_interval)
# Loop forever and ever
while True:
# Get input command from user
as_input = input('> ')
# Parse fundamental analysis command of the list of possible commands
try:
(ns_known_args, l_args) = ta_parser.parse_known_args(as_input.split())
except SystemExit:
print("The command selected doesn't exist\n")
continue
if ns_known_args.cmd == 'help':
print_technical_analysis(s_ticker, s_start, s_interval)
elif ns_known_args.cmd == 'q':
# Just leave the FA menu
return False
elif ns_known_args.cmd == 'quit':
# Abandon the program
return True
# -------------------------------------------------- OVERLAP --------------------------------------------------
elif ns_known_args.cmd == 'ema':
ta_overlap.ema(l_args, s_ticker, s_interval, df_stock)
elif ns_known_args.cmd == 'sma':
ta_overlap.sma(l_args, s_ticker, s_interval, df_stock)
elif ns_known_args.cmd == 'vwap':
ta_overlap.vwap(l_args, s_ticker, s_interval, df_stock)
# --------------------------------------------------- MOMENTUM ---------------------------------------------------
elif ns_known_args.cmd == 'cci':
ta_momentum.cci(l_args, s_ticker, s_interval, df_stock)
elif ns_known_args.cmd == 'macd':
ta_momentum.macd(l_args, s_ticker, s_interval, df_stock)
elif ns_known_args.cmd == 'rsi':
ta_momentum.rsi(l_args, s_ticker, s_interval, df_stock)
elif ns_known_args.cmd == 'stoch':
ta_momentum.stoch(l_args, s_ticker, s_interval, df_stock)
# ---------------------------------------------------- TREND ----------------------------------------------------
elif ns_known_args.cmd == 'adx':
ta_trend.adx(l_args, s_ticker, s_interval, df_stock)
elif ns_known_args.cmd == 'aroon':
ta_trend.aroon(l_args, s_ticker, s_interval, df_stock)
# -------------------------------------------------- VOLATILITY --------------------------------------------------
elif ns_known_args.cmd == 'bbands':
ta_volatility.bbands(l_args, s_ticker, s_interval, df_stock)
# ---------------------------------------------------- VOLUME ----------------------------------------------------
elif ns_known_args.cmd == 'ad':
ta_volume.ad(l_args, s_ticker, s_interval, df_stock)
elif ns_known_args.cmd == 'obv':
ta_volume.obv(l_args, s_ticker, s_interval, df_stock)
# ------------------------------------------------------------------------------------------------------------
else:
print("Command not recognized!")