Program för att hålla koll på aktier

Permalänk
Medlem

Program för att hålla koll på aktier

hejsan,

Jag har tillsammans med hjälp av andra här på sweclockers (https://www.sweclockers.com/forum/trad/1738393-python-och-mat...) utvecklat ett litet program som hjälper dig hålla koll på era symboler gjorde detta program för det fanns inga program som kunde visa upp flera grafer på - i mitt fall aktier - samtidigt.

Min fråga är nu, finns det något liknande program någon här använder sig utav som är gratis som kanske gör samma sak?

här är koden till programmet ha så kul! och om ni gör modifikationer dela gärna med er här på tråden.

här är den på github för folk som gillar github : https://github.com/Vetulus-De-Suecicus/stockplot

använde mig utav MIT Licensen för sakens skull.

HA I ÅTANKE ATT DEN ENDAST FÅR ANVÄNDAS I PRIVAT BRUK.

Permalänk
Medlem

Ny liten uppdatering låter användaren att hålla koll på total värdet per symbol och sammanlagda värdet av alla symboler tillsammans.

Permalänk
Medlem

Uppdaterat programmet lite mer, lagt till att man kan lägga in hur mycket man handlat och för vilket pris och sedan från det få en värdering av sin portfölj, per ticker samt totalt.

det inte blir så snyggt med över 10 aktier på en liten skärm som min, så det åker upp på todo listan.

För er som inte gillar github finns koden nedan:

import matplotlib.pyplot as plt import yfinance as yf from matplotlib.animation import FuncAnimation ### insert your holdings here ### ############ {"TICKER": [AMOUNT, BUYING PRICE]} ############# holdings = {"MSFT": [1, 500], "AAPL": [1, 59.99], "^OMX": [0, 0]} def update_graphs(_): total_value = 0 total_valchange = 0 for idx, ticker in enumerate(holdings.keys()): stock = yf.Ticker(ticker) history = stock.history(period="1d", interval="1m") datetime_index = history.index closing = history['Close'] opening = history['Open'] high = history['High'] low = history['Low'] volume = history['Volume'] current_ax = axes[idx] current_ax.clear() current_ax.plot(datetime_index, opening, label="Open", color="red") current_ax.plot(datetime_index, closing, label="Close", color="green") current_ax.fill_between(datetime_index, low, high, color="orange", alpha=0.3, label="High-Low interval") current_ax.fill_between(datetime_index, closing, opening, color="red", alpha=0.3, label="Close-Open interval") amountholding, price = holdings[ticker] total_value += closing.iloc[-1] * amountholding current_total = closing.iloc[-1] * amountholding purchased_difference = current_total - (amountholding * price) total_valchange += purchased_difference previous_close = history['Close'].iloc[0] difference = closing.iloc[-1] - previous_close percentage_change = (difference / previous_close) * 100 current_ax.set_title(f"{ticker} : Close: {closing.iloc[-1]:.2f} : {current_total:.2f} : Diff: {difference:.2f} ({percentage_change:.2f}%) : {purchased_difference:.2f}", fontsize=10) current_ax.grid(True) ax2 = current_ax.twinx() ax2.bar(datetime_index, volume, color="grey", alpha=0.5, label="Volume", width=0.001) ax2.set_ylabel("Volume") fig.suptitle(f"Total Value: {total_value:.2f} : Change: {total_valchange:.2f}", fontsize=12) if __name__ == "__main__": if len(holdings) == 1: fig, axes_obj = plt.subplots(1, 1) axes = [axes_obj] else: fig, axes = plt.subplots(len(holdings), 1, squeeze=False) axes = axes.flatten() fig.canvas.manager.set_window_title("Symbol Watcher") ani = FuncAnimation(fig, update_graphs, interval=120000, cache_frame_data=False) plt.tight_layout(h_pad=1, w_pad=1, rect=[0, 0.05, 0.95, 0.9]) plt.show()

Permalänk
Medlem

Uppdaterat koden ytterliggare, är nu möjligt att lägga till en extra kolumn med grafer/symboler, så nu kan jag på min lilla skärm ha cirka 8 symboler, försöka göra så att det går att ha fler än två kolumner i nästa uppdatering.

har även gjort det enklare att modifiera graferna och uppdaterings frekvensen som man vill.

för er som inte gillar github:

import matplotlib.pyplot as plt import yfinance as yf from matplotlib.animation import FuncAnimation import math ### display settings ### screendivision = 4 # if more than X stocks, divide graphs into 2 columns ### update interval ### updateinterval=120000 # 60seconds = 60000 ### plot colours ### opencolour="red" closecolour="green" hilointcolour="orange" closeopenintcolour="red" volumecolour="grey" ### add your holdings. amount and price of specific symbols ### holdings = {"SAAB-B.ST": [1, 500], "SSAB-B.ST": [1, 500], "^OMX": [0, 0], "MSFT": [1,500], "AAPL": [5,100], "AMZN": [1, 100]} def update_graphs(_): total_value = 0 total_valchange = 0 for idx, ticker in enumerate(holdings.keys()): stock = yf.Ticker(ticker) history = stock.history(period="1d", interval="1m") datetime_index = history.index closing = history['Close'] opening = history['Open'] high = history['High'] low = history['Low'] volume = history['Volume'] current_ax = axes[idx] current_ax.clear() current_ax.plot(datetime_index, closing, label="Close", color=closecolour) current_ax.plot(datetime_index, opening, label="Open", color=opencolour) current_ax.fill_between(datetime_index, low, high, color=hilointcolour, alpha=0.3, label="High-Low interval") current_ax.fill_between(datetime_index, closing, opening, color=closeopenintcolour, alpha=0.3, label="Close-Open interval") amountholding, price = holdings[ticker] total_value += closing.iloc[-1] * amountholding current_total = closing.iloc[-1] * amountholding purchased_difference = current_total - (amountholding * price) total_valchange += purchased_difference previous_close = history['Close'].iloc[0] difference = closing.iloc[-1] - previous_close percentage_change = (difference / previous_close) * 100 current_ax.set_title(f"{ticker} : Close: {closing.iloc[-1]:.2f} : {current_total:.2f} : Diff: {difference:.2f} ({percentage_change:.2f}%) : Purch. Diff. {purchased_difference:.2f}", fontsize=10) current_ax.grid(True) ax2 = current_ax.twinx() ax2.bar(datetime_index, volume, color=volumecolour, alpha=0.5, label="Volume", width=0.001) ax2.set_ylabel("Volume") fig.suptitle(f"Total Value: {total_value:.2f} : Change: {total_valchange:.2f}", fontsize=12) if __name__ == "__main__": print(f""" Open Colour: {opencolour} Close Colour: {closecolour} High-Low Interval Colour: {hilointcolour} Close-Open Interval Colour: {closeopenintcolour} Volume Colour: {volumecolour} """) if len(holdings) == 1: fig, axes_obj = plt.subplots(1, 1) axes = [axes_obj] elif len(holdings) >screendivision: graphnrow = ((math.ceil(len(holdings)/2))) fig, axes = plt.subplots(graphnrow, 2, squeeze=False) axes = axes.flatten() else: fig, axes = plt.subplots(len(holdings), 1, squeeze=False) axes = axes.flatten() fig.canvas.manager.set_window_title("Symbol Watcher") ani = FuncAnimation(fig, update_graphs, interval=updateinterval, cache_frame_data=False) plt.tight_layout(h_pad=1, w_pad=1, rect=[0, 0.05, 0.95, 0.9]) plt.show()

Permalänk
Medlem

Tror du får slänga in lite screenshots här eller i repot om du vill ha lite engagement. Ingen kommer orka köra ditt program utan att veta vad det är för något.

Permalänk
Medlem

Betalar själv för infront, men kul med gratisprojekt 👍

Permalänk
Medlem
Skrivet av izzie:

Tror du får slänga in lite screenshots här eller i repot om du vill ha lite engagement. Ingen kommer orka köra ditt program utan att veta vad det är för något.

Fixade en bild men jag tycker man förstår väl vad programmet är om man läser koden? Ska börja kommentera koden ordentligt enligt konventionerna för python också så det blir mer läsbart också - personligen tycker jag inte om att kommentera för mycket med bakgrund till att det blir lite för rörigt för mig med så mycket text

Skrivet av Linus:

Betalar själv för infront, men kul med gratisprojekt 👍

Använder du deras API med ditt egna gränssnitt?

bild finns i repot men här är den för sweclockers:

Permalänk
Medlem
Skrivet av Vetulus:

Använder du deras API med ditt egna gränssnitt?

Nä, Kör deras mjukvara

Permalänk
Medlem

Uppdaterat lite och nu konverterar den automatiskt till förvald valuta i totala portfölj summan och förändringen. Koden är lite hjärndöd då den gör ett extra anrop men det blev lite snyggare såhär tills jag kommer på något bättre.

Permalänk
Medlem
Skrivet av Vetulus:

använde mig utav MIT Licensen för sakens skull.

HA I ÅTANKE ATT DEN ENDAST FÅR ANVÄNDAS I PRIVAT BRUK.

Sorry, detta kanske är lite off topic, men vill du att man endast ska använda koden på ett speciellt sätt så får du nog kolla över vilken licens du släpper den under. MIT betyder typ fritt fram att göra vad som helst, inklusive i kommersiellt bruk.

Visa signatur

DAN Cases A4-SFX | AMD Ryzen 7 9800X3D | Thermalright AXP90-X47 Full Copper |
INNO3D GeForce RTX 4070 Ti SUPER 16GB Twin X2 | Kingston 32GB (2x16GB) DDR5 6000MHz CL30 | ASUS ROG Strix B650E-I Gaming WIFI | Samsung 960 EVO 1TB | Corsair SF-600

Permalänk
Medlem
Skrivet av Nioreh83:

Sorry, detta kanske är lite off topic, men vill du att man endast ska använda koden på ett speciellt sätt så får du nog kolla över vilken licens du släpper den under. MIT betyder typ fritt fram att göra vad som helst, inklusive i kommersiellt bruk.

yes men man får tyvärr inte använda yfinance om man inte betalar - för kommersiellt bruk, så det är en bra sak att ha i åtanke sedan om man vill använda detta för kommersiellt bruk så bör man nog vilja ha mer än bara 1minuters uppdaterings intervaller och istället ha typ saker så nära i realtid som möjligt

med andra ord - min present till världen om du tycker jag har valt en dålig licens så rekommendera du en till mig istället så ska jag se över det

yahoo finance:
https://help.yahoo.com/kb/SLN36623.html

yfinance:
[!IMPORTANT]
Yahoo!, Y!Finance, and Yahoo! finance are registered trademarks of Yahoo, Inc.

yfinance is not affiliated, endorsed, or vetted by Yahoo, Inc. It's an open-source tool that uses Yahoo's publicly available APIs, and is intended for research and educational purposes.

You should refer to Yahoo!'s terms of use (here, here, and here) **for details on your rights to use the actual data downloaded.

Remember - the Yahoo! finance API is intended for personal use only.**

Permalänk
Medlem

uppdaterade licensen så att den är lite mer skräckinjagande eller nåt jag vet inte.

edit: ska faktiskt ta och försöka snacka med yahoo om yfinance i framtiden för att se vad de har att säga om detta

edit2: bytte namn på repot för att det finns tydligen ett program som heter stockplot redan. heter nu symbol watcher

https://github.com/Vetulus-De-Suecicus/Symbol-Watcher

Permalänk
Medlem

Har börjat med en ny version som körs i terminalen och med matplot för grafer utanför terminalen så det blir ett mindre program.

EDIT: Version 2 finns nu, den är inte lika färdig som tidigare version och jag har stött på ett problem

men den finns, ser lite snyggare ut osv, kommer bli snyggare också med tiden hoppas jag.

https://github.com/Vetulus-De-Suecicus/symbolwatcher2

Permalänk
Medlem

Lekt runt lite med hur layouten skall vara men kan inte bestämma mig, vore trevligt om man fick lite input på vad folket skulle vilja ha, av er som nu är intresserade.

Gillade ni första versionen bäst med alla grafer på en gång, eller vill ni ha det som andra versionen med allt i terminalen och få överblick med endast 1 graf med massa knappar som växlar sinsemellan graferna eller nedan koncept som visar alla symboler i en lista som man kan rulla igenom och sedan övergripande med all statistik ovanför (röd placeholder) - den har även att man kan zooma in/ut, dra runt osv i nedan.

Edit: Nu finns den ute, dock inte helt färdig ännu:

https://github.com/Vetulus-De-Suecicus/Symbol-Watcher-3