Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

L6 #245

Open
wants to merge 10 commits into
base: main
Choose a base branch
from
Open

L6 #245

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
136 changes: 136 additions & 0 deletions gui.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,136 @@
from tkinter import *
import json


def file_to_read():
print("Podaj nazwe pliku do odczytu, lub wpisz 0 jesli chcesz skorzystac z domyslnego pliku:")
entered_name = str(input())
if entered_name == '0':
entered_name = 'buyjson.json'

text_file = open('name_of_file.txt', 'w')
text_file.write(entered_name)
text_file.close()
return entered_name


def collecting_data():
buying_price = 0
total_amount = 0
which_crypto = variable1.get()
buy_sell = variable2.get()
how_much = float(how_much_entry.get())
price = float(price_entry.get())

print(which_crypto, buy_sell, how_much, price)

if buy_sell == "Buy":
file = open(FILE_NAME, 'r')
json_data = json.load(file)
print(json_data)
file.close()

json_data[which_crypto].append([how_much, price])
file = open(FILE_NAME, 'w')
json.dump(json_data, file)
file.close()

if buy_sell == "Sell":
file = open(FILE_NAME, 'r')
json_data = json.load(file)
file.close()
crypto_amount = json_data[which_crypto]
for i in range(len(crypto_amount)):
total_amount += crypto_amount[i][0]

if how_much > total_amount:
print("Nie masz tylu dostepnych kryptowalut")

else:
profit = (how_much * price)
while how_much:
if how_much < crypto_amount[0][0]:
crypto_amount[0][0] -= how_much
profit -= how_much * crypto_amount[0][1]
how_much = 0
elif how_much == crypto_amount[0][0]:
crypto_amount[0][0] -= how_much
profit -= how_much * crypto_amount[0][1]
how_much = 0
crypto_amount.pop(0)
else:
how_much -= crypto_amount[0][0]
profit -= how_much * crypto_amount[0][1]
crypto_amount[0][0] = 0
crypto_amount.pop(0)

json_data[which_crypto] = crypto_amount
file = open(FILE_NAME, 'w')
json.dump(json_data, file)
file.close()

file_profit = open('selljson.json', 'r')
profit_data = json.load(file_profit)
file_profit.close()
profit_data[which_crypto].append(profit)

file_profit = open('selljson.json', 'w')
json.dump(profit_data, file_profit)
file_profit.close()


def gui_window():
global variable1, variable2, how_much_entry, price_entry
window = Tk()

window.configure(background='white')
window.title('Gui')
window.geometry("300x600")

chose_crypto = Label(window, text='Chose crypto id:', font=('arialbold', 17))
chose_crypto.pack(expand=True)
chose_crypto.configure(background='white')

variable1 = StringVar(window)
options = OptionMenu(window, variable1, "LTC", 'ETH', "DASH")
variable1.set("-----")
options.config(width=32, background='#6B6969', font=('arialbold', 17))
options.pack(expand=True)
options.configure(background='gray', width=20)

chose_sell_buy = Label(window, text='Do you want to sell or buy?:', font=('arialbold', 17))
chose_sell_buy.pack(expand=True)
chose_sell_buy.configure(background='white')

variable2 = StringVar(window)
options = OptionMenu(window, variable2, 'Sell', 'Buy')
variable2.set("-----")
options.config(width=32, background='#6B6969', font=('arialbold', 17))
options.pack(expand=True)
options.configure(background='gray', width=20)

how_much = Label(window, text='How much of crypto?:', font=('arialbold', 17))
how_much.pack(expand=True)
how_much.configure(background='white')

how_much_entry = Entry(window, font=('arialbold', 17))
how_much_entry.configure(background='gray', width=20)
how_much_entry.pack(expand=True)

price = Label(window, text='What is the price?:', font=('arialbold', 17))
price.pack(expand=True)
price.configure(background='white')

price_entry = Entry(window, font=('arialbold', 17))
price_entry.configure(background='gray', width=20)
price_entry.pack(expand=True)

confirmation = Button(window, text='Confirm', font=('arialbold', 17), command=collecting_data)
confirmation.pack(expand=True)
confirmation.configure(background='green')

window.mainloop()


FILE_NAME = file_to_read()
gui_window()
14 changes: 14 additions & 0 deletions l4
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Wskaźniki trendu sygnału.

Bazując na poprzednim zadaniu wybrać parę walutową, która będzie cechowała się większą zmiennością.
Przykładowo para BTCUSD na Bitbay jest zbyt stabilna, żebyście coś zobaczyli, lepiej unikać par o bazie USD na rynku Bitbay, bo tam rynek prawie nie żyje.

1. Wykresy trzech zasobów z poprzedniego zadania wyświetlać na trzech osobnych wykresach.
a) na wykresie lub pod wykresem dodać wolumen transakcji (przykład https://www.bankier.pl/inwestowanie/profile/quote.html?symbol=PGE ) 4pkt
b) na wykres oprócz linii wartości osiąganych przez zasób dodać innym kolorem średnią ruchomą z wybranego przedziału próbek. Przedział do ustalenia przez użytkownika, można ograniczyć zakres. 3pkt
c) dodać oscylator RSI (relative strength index / wskaźnik siły względnej) ( https://pl.wikipedia.org/wiki/Wska%C5%BAnik_si%C5%82y_wzgl%C4%99dnej ). Przedział y do ustalenia przez użytkownika. 3pkt

Jeśli punkty a) i c) kolidują u Was ze sobą na widoku wykresu - dajcie użytkownikowi możliwość wyboru czy życzy sobie wyświetlić volumen czy RSI.

Maksymalny termin oddania zadania: 5 lub 10 maja, w zależności od grupy
© 2021 GitHub, Inc.
25 changes: 25 additions & 0 deletions l6
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
Przetwarzanie informacji w czasie rzeczywistym, w sposób reaktywny:

1. Dajemy możliwość naniesienia na wykres punktu odniesienia - ceny kupna zasobów.
- Wykres jest odświeżany w czasie rzeczywistym i reprezentuje strumienie danych dotyczące trzech zasobów giełdowych, jak w poprzedniej liście.
- Podczas działania programu użytkownik ma mieć możliwość wielokrotnego wprowadzenia informacji co, w jakiej ilości i za ile kupił. Może to robić w odstępach czasowych i dla różnych zasobów, w nieokreślonej kolejności.
- Na podstawie wprowadzonych przez użytkownika danych wyliczamy dotychczasową średnią zakupu danego waloru i nanosimy poziomą, przerywaną linią na wykres wartości zasobu.
- Zwrócić uwagę na zakresy wartości na osi y, wszystko ma się mieścić w zakresie wartości.
4pkt

2. Dodajemy możliwość wprowadzenia sprzedaży zasobów analogicznie do kupna.
- Po sprzedaży aktualizujemy obecną średnią cenę zakupu (nie uwzględniającą już tych jednostek, które zostały sprzedane. Zasada FIFO - first in first out)
przykład: jeśli kupiliśmy 10 jednostek po 4000$, następnie 20 jednostek po 6000$, a na końcu 20 jednostek po 10000$, a następnie sprzedaliśmy 10 jednostek za 50000$ to nasz zysk wynosi 460000$ a obecna średnia cena zakupu to 8000$.
- Przy sprzedaży obliczamy osiągnięty zysk/stratę i nanosimy informację o zysku/stracie w okolicy wykresu danego zasobu.
4pkt

3. Program ma umożliwiać zapis (i odczyt) wprowadzonych danych w formacie .json tak, by po ponownym uruchomieniu można było wprowadzić nazwę pliku przechowującego dane i nie gromadzić danych od nowa.
4pkt

4. Live wprowadzenie zmian w kodzie, dopisanie bardzo drobnej funkcjonalności w czasie 1-5 minut.
Zadanie ma na celu sprawdzenie samodzielności wykonywania zadań (lub chociaż dogłębnego ich zrozumienia)
8pkt

Ze względu na punkt 4 wyjątkowo nie dopuszczam zdalnego oddawania tej listy.

Deadline: 7 / 9 czerwca, w zależności od grupy. Zachęcam do wcześniejszego oddawania listy, ze względu na ciut dłuższy czas jej sprawdzania per student (patrz pkt 3).
Loading