Código de Python - Stock Monitor

Imágen de perfil
Val: 712
Bronce
Ha aumentado 1 puesto en Python (en relación al último mes)
Gráfica de Python

Stock Monitorgráfica de visualizaciones


Python

Actualizado el 12 de Febrero del 2024 por Antonio (75 códigos) (Publicado el 22 de Octubre del 2023)
1.103 visualizaciones desde el 22 de Octubre del 2023
El siguiente script muestra en tiempo real las cotizaciones en bolsa, de acciones e índices bursátiles.
El programa utiliza un bucle en el que va realizando sucesivas peticiones de datos, usando 'yfinance'. Entre una petición y la siguiente, media un tiempo en segundos que viene determinado por la opción '-delay/--time_delay', teniendo un valor por defecto de 5 segundos y no pudiendo ser inferior a 0.5
Para detener la obtención de datos, pulsar la barra espaciadora. Al hacerlo, el programa mostrará el texto 'wait until application ends..' ya que tendrá que esperar el tiempo que quede restante del especificado por '-delay/--time_delay'. Finalizando definitivamente, transcurrido dicho tiempo restante.

ARGUMENTOS:
'-tick/--ticker' : Ticker o símbolo del valor cuya cotización se quiere obtener.
'-delay/--time_delay': Periodicidad, en segundos, entre una petición de datos y la siguiente.
'-clr/--color': Mostrar precio de cierre en color, en función de su fluctuación respecto del valor anterior.
'-uind/--use_index': Incluir esta opción para obtener cotizaciones de índices bursátiles (ej: ^IXIC, ^DJI..)

La petición de valores se interrumpe pulsando la barra espaciadora.
PARA CUALQUIER DUDA U OBSERVACIÓN, UTILICEN LA SECCIÓN DE COMENTARIOS.

sm1
sm2
sm3

Requerimientos

Librerias: yfinance, argparse, colorama, pynput, time

1.0

Actualizado el 27 de Octubre del 2023 (Publicado el 22 de Octubre del 2023)gráfica de visualizaciones de la versión: 1.0
347 visualizaciones desde el 22 de Octubre del 2023

1.1

Actualizado el 12 de Febrero del 2024 (Publicado el 31 de Octubre del 2023)gráfica de visualizaciones de la versión: 1.1
757 visualizaciones desde el 31 de Octubre del 2023
estrellaestrellaestrellaestrellaestrella
estrellaestrellaestrellaestrella
estrellaestrellaestrella
estrellaestrella
estrella

Visualización de la diferencia y porcentaje respecto a la sesión anterior.
sm4
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
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import argparse
import yfinance as yf
from pynput import keyboard
from colorama import init, Fore, Back, Style
import time
import warnings
warnings.filterwarnings("ignore")
 
init()
stop = False
 
def on_press(key):
    global stop
    if key == keyboard.Key.space:
        stop = True
        print('Wait until application ends...')
        return False
 
def quoter(args):
    listener = keyboard.Listener(on_press=on_press)
    listener.start()
    prev_value = ""
 
    if args.use_index:
        ticker_symbol = '^'+args.ticker
    else:
        ticker_symbol = args.ticker
    #prev_day = stock_data = yf.download(ticker_symbol, period="1d",interval="1d").tail(1)
    try:
        print(Fore.BLACK + Back.WHITE + f"\nREAL TIME {ticker_symbol} QUOTATION -[PRESS SPACE BAR TO EXIT]" + Fore.RESET + Back.RESET)
        prev_day = yf.download(ticker_symbol, period="2d", interval="1d")#["Close"].iloc[-2]
 
        last_day_open_price = prev_day["Open"].iloc[-2]
        last_day_high_price = prev_day["High"].iloc[-2]
        last_day_low_price = prev_day["Low"].iloc[-2]
        last_day_close_price = prev_day["Close"].iloc[-2]
        last_day_volume = prev_day["Volume"].iloc[-2]
 
        dec = args.decimals
 
        last_datetime = prev_day.index[-2]
 
        print(Fore.YELLOW + Style.BRIGHT + f"{last_datetime} | Ticker: {ticker_symbol} | Low: {last_day_low_price:.{dec}f} | High: {last_day_high_price:.{dec}f} |"
          f" Open: {last_day_open_price:.{dec}f} | Volume: {last_day_volume:.{dec}f} | Close: {last_day_close_price:.{dec}f}" + Fore.RESET + Style.RESET_ALL)
        while stop == False:
            stock_data = yf.download(ticker_symbol, period="1d",interval="1m").tail(1)
            #print(stock_data)
 
            last_open_price = stock_data["Open"].iloc[-1]
            last_high_price = stock_data["High"].iloc[-1]
            last_low_price = stock_data["Low"].iloc[-1]
            #last_adj_close = stock_data["Adj Close"].iloc[-1]
            last_close_price = stock_data["Close"].iloc[-1]
            last_volume = stock_data["Volume"].iloc[-1]
 
            current_datetime = stock_data.index[-1]
 
            if args.color:
                line_color = Fore.BLUE
                if last_close_price == prev_value or prev_value == "":
                    color = Fore.YELLOW
                elif last_close_price > prev_value:
                    color = Fore.GREEN
                else:
                    color = Fore.RED
            else:
                color = Fore.GREEN
                line_color = Fore.GREEN
 
 
            diference = last_close_price - last_day_close_price
            percentage = (diference / last_day_close_price) * 100
 
            if diference > 0:
                diference_color = Fore.GREEN + "+"
            elif diference < 0:
                diference_color = Fore.RED
            else:
                diference_color = Fore.YELLOW
 
 
            print(line_color + Style.BRIGHT + f"{current_datetime} | Ticker: {ticker_symbol} | Low: {last_low_price:.{dec}f} | High: {last_high_price:.{dec}f} | Open: {last_open_price:.{dec}f} |"
                  f" Volume: {last_volume:.{dec}f} | Close: " + color + f"{last_close_price:.{dec}f}    " + diference_color + f"{diference:.{dec}f} ({percentage:.{dec}f}%)" + Fore.RESET + Style.RESET_ALL)
 
            prev_value = last_close_price
            time.sleep(args.time_delay)
 
            if stop == True:
                print("\nProcess terminated by user.")
                break
 
    except Exception as e:
        print(Fore.RED + Style.BRIGHT + str(e) + Fore.RESET + Style.RESET_ALL)
 
def main():
    parser = argparse.ArgumentParser(prog="STOCK MONITOR 1.1",description="Show stock quotation in real time",
                                     epilog="REPO:https://github.com/antonioam82/Stock-Monitor")
    parser.add_argument('-tick', '--ticker', required=True, type=str, help='Ticker name')
    parser.add_argument('-clr', '--color', action='store_true', help='Use this action for color close values')
    parser.add_argument('-delay', '--time_delay', type=float, default=5, help='Call delay to the API, in seconds')
    parser.add_argument('-uind', '--use_index', action='store_true', default=None, help='Use index')
    parser.add_argument('-decim', '--decimals', type=int, default=2, help="Number of values decimals")
 
 
    args = parser.parse_args()
    if args.time_delay >= 0.5:
        quoter(args)
    else:
        parser.error(Fore.RED+Style.BRIGHT+"time delay value must be greater than or equal to 0.5"+Fore.RESET+Style.RESET_ALL)
 
if __name__ == '__main__':
    main()



Comentarios sobre la versión: 1.1 (0)


No hay comentarios
 

Comentar la versión: 1.1

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad

http://lwp-l.com/s7450