|
|
20.03.2021., 18:29
|
#21
|
Okajava grijehe
Registracija: Mar 2021.
Postova: 5,514
|
Quote:
wand_1 kaže:
Odlično kolega alphabet!
Ja bi možda dva koraka natrag, pa jedan naprijed.
Kako je kolega feenian predložio:
benchmark ------> strategija 2 jednostavna pomična prosjeka -----> strategija 3 eksponencijalna vagana pomična prosjeka.
pri čemu je benchmark popularna HODL "strategija".
Možemo prikazati sve 3 strategije i njihove performanse na podacima od zadnjih par godina, recimo BTC-a.
Tako da točno možemo usporediti i prikazati koja je strategija bolja, napravit ćemo neki jednostavni vektorizirani backtest.
|
pa što se tiče 2 sma, ne razlikuje se puno, poanta je da se hvataju crossoveri.
jedino što je malo različito kaj se crossovera tiče je kad se radi MA crossover na cijenu, a ne na drugi MA, ali princip je isti zapravo.
U svakom slučaju, ja sam za sve napisano.
edit: možda bi bio ok i neki discord ili irc kanal?
|
|
|
20.03.2021., 18:48
|
#22
|
Moderator
Registracija: Jul 2011.
Postova: 22,467
|
Quote:
alphabet kaže:
pa što se tiče 2 sma, ne razlikuje se puno, poanta je da se hvataju crossoveri.
jedino što je malo različito kaj se crossovera tiče je kad se radi MA crossover na cijenu, a ne na drugi MA, ali princip je isti zapravo.
U svakom slučaju, ja sam za sve napisano.
|
Dobro. Za ova dva ranija koraka sam zbog toga da bude jasnije što uopće radimo i što uopće dobijemo sa tom strategijom kao razliku u odnosu na benchmark, odnosno buy&hold.
Isto tako kroz kod i grafove može se jasnije vidjeti kako se stvaraju i crtaju pomični prosjeci, te kako se određuje long/short pozicija u odnosu na prosjeke.
EWM je ista ta stvar, samo što je malo kompliciranija. De facto, sa ovom HODL i SMA strategijom ćemo dobiti logičku bazu gdje se mogu dodavati razni tehnički indikatori (RSI, MACD ....)
Prije toga savjetujem da se onaj isti kod upotrijebi za proučavanje drugih tickera dionica i kriptovaluta i drugih vremenskih razdoblja, npr. prvih 6 mjeseci 2020. godine, razdoblja od 1 sat (to samo treba dodati kod yf.download, piše u dokumentaciji uz njega).
__________________
408 Request Time-out 503 service unavailable
|
|
|
21.03.2021., 08:56
|
#23
|
Registrirani korisnik
Registracija: Aug 2012.
Postova: 22,855
|
Quote:
wand_1 kaže:
Dobar prijedlog, ali daj mi još feedbacka, gdje postoje veće nejasnoće, oko koncepta koji objašnjavam, oko koda ili čega drugog?
Odnosno jesu li rupe u razumijevanju u dijelu kvantitativnih financija ili je samo kod u pitanju?
|
Da, koncept je malo blury ako nisi u tome  . Znaš ono kad na MIT-u uče o machine learningu i kriptu pa onda krenu sa skroz basic stvarima, a na početku im predstave i poglavlja jer te to odmah po defaultu strukturira. Znači za svaki neki termin ili segment kojeg se uvodi u priču bi bilo dobro objasniti zašto i čemu služi te zbog čega ga sada predstavljamo i koja je njegova uloga u široj slici. Znam da sada oblikujem formu sukladno predavanjima, ali tako je meni kao laiku najlakše pratiti. Odnosno krenuti s pretpostavkom kako smo na prvoj godini i učimo prvo uvod u xy stvar jer ovako mi izgleda kao da se u više upisa izmiješaju stvari koje nisu jednake težine za pratiti..
Ali moram stvarno još jednom pohvaliti angažman i volju jer bi thread mogao izrasti u nešto od čega bi doista mnogi mogli imati dodanu vrijednost. Bravo 
__________________
“Oprošteno jest griešnima: Zulumčaru, ubojici,
Oprošteno svima, svima – Samo nije izdajici”.
|
|
|
21.03.2021., 09:30
|
#24
|
novi korisnik
Registracija: Dec 2002.
Lokacija: Na lancu
Postova: 15,019
|
@feenian, ima li nesto konkretno online od MIT-a, machine learning i kripto povezano? Sad sam malo guglao, ali reko da te pitam, nabaci link ako ima nesto dobro.
Inace Wand zahvaljujem na temi  
__________________
Not my problem.
|
|
|
21.03.2021., 09:49
|
#25
|
Moderator
Registracija: Jul 2011.
Postova: 22,467
|
Zadnja dva posta prebačena u prvi/uvodni post
__________________
408 Request Time-out 503 service unavailable
|
|
|
21.03.2021., 09:49
|
#26
|
Registrirani korisnik
Registracija: Aug 2012.
Postova: 22,855
|
Quote:
Carlos kaže:
@feenian, ima li nesto konkretno online od MIT-a, machine learning i kripto povezano? Sad sam malo guglao, ali reko da te pitam, nabaci link ako ima nesto dobro.
Inace Wand zahvaljujem na temi  
|
Ja sam naletio na predavanja današnjeg čelnika SEC-a, Gerya Genslera (15ak sati), a sve ti je na youtube-u. Ima i materijala na njihovoj online platformi gdje ti je dostupno jako puno materijala s predavanja.
Baci oko, zanimljivo je  . Ali da ne spammam ovdje jer je tema odlična
__________________
“Oprošteno jest griešnima: Zulumčaru, ubojici,
Oprošteno svima, svima – Samo nije izdajici”.
|
|
|
21.03.2021., 10:00
|
#27
|
novi korisnik
Registracija: Dec 2002.
Lokacija: Na lancu
Postova: 15,019
|
Hoću, hvala. Btw. vjerujem da su na temu dobrodošli linkovi na edukacijske materijale, dapače. Vezano uz temu, na edukacijskim online platformama ima poprilično 'Data science & Python' tečajeva, vjerujem da su svi kvalitetni, ali preporuke su uvijek dobrodošle.
__________________
Not my problem.
|
|
|
21.03.2021., 10:04
|
#28
|
Moderator
Registracija: Jul 2011.
Postova: 22,467
|
Prije nego nastavimo dalje s analizom i primjerima bazičnih strategija u odnosu na benchmark, htio bi naglastiti nešto.
Ovo što mi radimo još uvijek nije machine learning. Machine learning je neka vrsta statistike "na steroidima". Ove naše analize su još uvijek samo analize, a i sama tehnička analiza, odnosno strategije putem kodiranih indikatora TA isto tako nisu machine learning.
Machine learning ćemo koristiti onog trenutka kada počnemo korisiti ML tehnike klasifikacije i/ili regresije za predikciju "signala" ili cijena.
To je još jedan korak više, jer je tu poželjno razumjeti što i kako rade ti algoritmi, za što je potrebno "pohvatati" osnovne statističke koncepte.
Naglasio bih da to nije ništa teško za naučiti korisiti. Teško je izmisliti algoritam, nije ga teško koristiti
Za korištenje je samo dovoljno znati koji algoritam uzeti za koju vrstu problema i zašto baš taj. Mi nismo inženjeri koji su projektirali i proizveli alat, nego samo oni koji nagađaju koji će alat koristiti za nešto napraviti..
Da završim s tim jednom ilustracijom:
U ovoj šali ima dosta istine, iznenadili biste se kako je neke ML algoritme lako korisiti.
__________________
408 Request Time-out 503 service unavailable
|
|
|
21.03.2021., 10:43
|
#29
|
Moderator
Registracija: Jul 2011.
Postova: 22,467
|
Idemo dalje polako u segmentima, jer nikad ne znam koliko ću imati vremena...
Krećemo s HODL "strategijom" kao benchmarkom za dalje:
Kod:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
plt.style.use("seaborn-bright")
Ove zadnje dvije linije nisu nužne, to samo nudi različit stil grafikona, ostalo smo već objasnili, to su osnovni libraryi.
Kod:
import yfinance as yf
Ako Colab izbaci grešku, znači da treba ponovni pip-install yfinance, pa onda ovu liniju.
Kod:
df = yf.download("BTC-USD", start="2015-01-01", end="2020-12-31")
Povlačimo (dnevne) podatke o BTC-USD od 2015-2020.
Ovdje gledamo kako dataframe izgleda. Vidimo prvih i zadnjih 5 redaka i sve stupce.
Kod:
df["Close"].plot(figsize=(15,8), title="BTC cijena")
Zanima nas "Close" jer je to završna cijena dana, pa njega crtamo. Izgleda kao što smo već vidjeli, samo su "stara" razdoblja, prije 2017 bila "dosadnija".
Kod:
df1 = df.Close.to_frame()
Ovdje iz df uzimamo samo stupca Close i spremamo ga kao df1. Ovaj dodatak to_frame znači da ga pretvaramo u dataframe, jer kad imate samo jedan stupac, Python to smatra serijom, a ne frameom. A mi radimo s frameovima, uglavnom.
Kod:
df1["log_povrat"] = np.log(df1.div(df1.shift(1)))
Ovdje na df1 dodajemo još jedan stupac, logaritamski 'povrat'. Razlikuje se malo od običnog povrata. Ovdje ga koristimo jer ima više prednosti u odnosu na obični. Više o log return, odnosno zašto se koristi možete vidjeti ovdje
https://investmentcache.com/magic-of...oncept-part-1/
..a i drugdje..
Ponovno pozivamo df1 da vidimo je li dodao/izračunao novi stupac.
Kod:
df1.dropna(inplace=True)
Ovdje izbacujemo retke koji sadrže prazne vrijednosti. Ovdje je to prvi redak, zbog onog shifta koji je pomaknuo cijeli niz. Inplace = True znači da zadržavamo tu promjenu, da ona nije privremena.
Evo naredbe za histogram i histogram:
Vidite kako se kreću povrati oko nule? Uvijek je tako kod svih instrumenata kojima se trguje. Ako bacite oko na os x, vidjet ćete sitne male stupiće lijevo i desno, što znači da ima i ekstrema ponekad...
Idemo opet na df1
Bacite oko na Close prvu i zadnju vrijednost i izračun koliki je ukupni povrat na uloženo ako smo ušli na početku 2015 i izašli na kraju 2020.
Jednostavno smo podijelili zadnju i prvu vrijednost u stupcu Close.
Možemo to i rigoroznije pokazati:
Ovdje smo koristili funkciju cumsum() i primijenili formulu na svaki član stupca log_povrat i na kraju novog stuoca "kumulativni_povrat" imamo istu vrijednost koju smo dobili i gore onim jednostavnim izračunom.
Sad ćemo računati godišnji povrat i godišnju standardnu devijaciju:
Opet vidimo kako se rizik (std) i povrat prate...
Ovdje za novi stupac 'kumulativni maximum' koristimo funkciju cummax() koja pazi na to kada se dosegne maksimum....To nam je bitno da možemo vidjeti koji nam je najgori pad (maximum drawdown)
Idemo nacrtati ova dva stupca:
Vidite kako cummax "pazi" gdje je lokalni maksimum?
Idemo računati drawdown
Dobili smo točan datum kada je bio najveći pad 15/12/2018, pad od 51.74% u odnosu na dotadašnji lokalni maksimum.
To nam je jedna od mjera maksimalnog rizika....
E sad, da vidimo ima li nejasnoća oko ovog HODL-a ili idemo na pomične prosjeke?
__________________
408 Request Time-out 503 service unavailable
|
|
|
21.03.2021., 10:45
|
#30
|
Registrirani korisnik
Registracija: Feb 2021.
Postova: 198
|
Quote:
wand_1 kaže:
Za korištenje je samo dovoljno znati koji algoritam uzeti za koju vrstu problema i zašto baš taj.
|
u svakom segmentu je najvažnije definirati koju vrstu problema rješavamo i što želimo postići.
Koji točno problem rješavamo i što postižemo izgradnjom vlastitog bota, a kojeg ne mogu riješiti postojeći mnogobrojni kripto botovi? Koje probleme rješava python kojeg ne mogu riješiti java ili php?
|
|
|
21.03.2021., 11:39
|
#31
|
Moderator
Registracija: Jul 2011.
Postova: 22,467
|
Quote:
konrad kaže:
u svakom segmentu je najvažnije definirati koju vrstu problema rješavamo i što želimo postići.
Koji točno problem rješavamo i što postižemo izgradnjom vlastitog bota, a kojeg ne mogu riješiti postojeći mnogobrojni kripto botovi? Koje probleme rješava python kojeg ne mogu riješiti java ili php?
|
Ajde pođi na prvi post, editirao sam ga jutros, tamo definiramo ciljeve.
__________________
408 Request Time-out 503 service unavailable
|
|
|
21.03.2021., 12:35
|
#32
|
Registrirani korisnik
Registracija: Feb 2021.
Postova: 198
|
Quote:
wand_1 kaže:
Ajde pođi na prvi post, editirao sam ga jutros, tamo definiramo ciljeve.
|
pratim tvoj projekt zato pitam.
U načinu kako si postavio vidim problem. Tu se izlažu dva podjednako zahtjevna seta znanja - programiranje i trejdanje pa bi radi učinkovitosti trebalo posložit prioritete. Radi se o masu uloženog vremena. Koliko se to isplati?
Ako je cilj uspješno trejdanje, ja bi najprije krenuo od glavnih preduvjeta uspješnog trejdanja. Koji su rizici? Koji parametri itd.
Najbanalnija definicija uspješnog trejda je kupovati jeftino i prodavati skupo. Tu veliku ulogu igra vremenski interval u kojem trejder želi ostvariti profit. Da li je to day trading, swing trading, ili hodler koji povremeno ubire profit? Što od toga bi ovdje izložen bot točno radio?
O tome ovisi izbor analitičkih alata koji će se primjenjivati.
Recimo tradingview je ogroman analitički resurs gdje korisnici dodaju tone novih skripti. Ima botova koji su integrirani sa tradingview-om, samim time pružaju vrlo široku paletu mogućnosti.
Time dolazim na početno pitanje. Koji je točan cilj diy bota.
|
|
|
21.03.2021., 13:21
|
#33
|
Okajava grijehe
Registracija: Mar 2021.
Postova: 5,514
|
Quote:
konrad kaže:
Time dolazim na početno pitanje. Koji je točan cilj diy bota.
|
pa to bi zapravo ti trebao sebi odgovoriti, zašto želiš (algo) trejdati, koji su ti ciljevi? što se tiče ciljeva topica, čisto malo upoznavanje ljudi s programiranjem da si automatiziraju strategije, ili provjere imaju li uopće smisla.
konkretno, nema nikakve razlike napravio ti bota sam, ili uzeo već gotovog i izmjenio parametre. poanta ovog je (bar iz moje perspektive) učenje programiranja i kombiniranje sa trejdanjem.
najbanalnija definicija je buy low sell high, i zapravo nema druge definicije. poanta je naći entry i exit pointove, tj low-ove i high-ove. analizom povijesnih podataka putem indikatora možemo backtestati strategiju i vidjeti ima li ona ikakvog smisla. jednostavnije je to raditi s botom nego sam drndati izračune.
pitao si i za prednosti pythona nad javom i phpom, osim što je python ful popularan u data science krugovima pa stoga ima hrpu apija, libova, itd., nema nikakve. svejedno ti je u kojem jeziku programiraš dokle god znaš programirati. ako ti se ne sviđa python, probaj c#, javu, što god.
edit: ono što mogu reći sa 100% sigurnošću je da nećeš naći ovdje algoritam koji će te obogatiti, jer takvog nema, bar ne u slobodnom opticaju. 
|
|
|
21.03.2021., 13:53
|
#34
|
Registrirani korisnik
Registracija: Feb 2021.
Postova: 198
|
Quote:
alphabet kaže:
pa to bi zapravo ti trebao sebi odgovoriti, zašto želiš (algo) trejdati, koji su ti ciljevi?
|
nisam došao pitati što da ja radim nego prodiskutirati par elementarnih stvari koje mogu doprinijeti strukturi projekta i redoslijedu izlaganja - ako se ispravno shvati što sam htio reći, što očito nije slučaj.
|
|
|
21.03.2021., 14:03
|
#35
|
Okajava grijehe
Registracija: Mar 2021.
Postova: 5,514
|
Quote:
konrad kaže:
nisam došao pitati što da ja radim nego prodiskutirati par elementarnih stvari koje mogu doprinijeti strukturi projekta i redoslijedu izlaganja - ako se ispravno shvati što sam htio reći, što očito nije slučaj.
|
mislim da si me krivo shvatio/sam krivo shvatio tvoje pitanje, odgovor je više bio u smislu da vidiš treba li ti bot uopće.
|
|
|
21.03.2021., 14:36
|
#36
|
Registrirani korisnik
Registracija: Jan 2009.
Lokacija: Zagreb
Postova: 15,847
|
@wand mislim da je u ovom postu krivi redosljed slika:
https://www.forum.hr/showpost.php?p=85309303&postcount=6
ili fali na samom vrhu definicija varijable "cijena". Za one koji nisu "doma" u programiranju, to bi mogao biti nezgodan dio.
Da bih dobio korelaciju cijene za vremenski period 1.1.2017 pa dalje, iskoristio definirao sam varijablu "cijena" ovako:
I onda tek dolazi onaj tvoj dio gdje kažeš: "sad to znamo, ajmo vidjet kakva je za 2020" gdje redefiniramo varijablu "cijena" da s ene odnosi na vremenski period od 1.1.2017, već samo na 2020. godinu:
cijena = df.loc['2020-01-01':'2020-12-31' ,'Close']
cijena.corr()
koji daje: 0.941336
Eto...samo da pojasnim onima koji su možda tu zapeli a nisu ništa napisali.
|
|
|
21.03.2021., 14:37
|
#37
|
Registrirani korisnik
Registracija: Feb 2021.
Postova: 198
|
Quote:
alphabet kaže:
mislim da si me krivo shvatio/sam krivo shvatio tvoje pitanje, odgovor je više bio u smislu da vidiš treba li ti bot uopće.
|
mislim da si ti mene krivo shvatio.
dao sam par korisnih sugestija u obliku pitanja. predugo sam u ovim vodama da bi tražio odgovore i botove po forumima.
|
|
|
21.03.2021., 15:06
|
#38
|
Registrirani korisnik
Registracija: Aug 2020.
Postova: 1,114
|
Quote:
stjepan21 kaže:
@wand mislim da je u ovom postu krivi redosljed slika:
https://www.forum.hr/showpost.php?p=85309303&postcount=6
ili fali na samom vrhu definicija varijable "cijena". Za one koji nisu "doma" u programiranju, to bi mogao biti nezgodan dio.
Da bih dobio korelaciju cijene za vremenski period 1.1.2017 pa dalje, iskoristio definirao sam varijablu "cijena" ovako:
I onda tek dolazi onaj tvoj dio gdje kažeš: "sad to znamo, ajmo vidjet kakva je za 2020" gdje redefiniramo varijablu "cijena" da s ene odnosi na vremenski period od 1.1.2017, već samo na 2020. godinu:
cijena = df.loc['2020-01-01':'2020-12-31' ,'Close']
cijena.corr()
koji daje: 0.941336
Eto...samo da pojasnim onima koji su možda tu zapeli a nisu ništa napisali.
|
kasnite kolega  , al drago mi je da nisam jedina kojoj je upao u oko taj detalj. Wand sorry na cjepidlačenju, keep up with good work.
https://www.forum.hr/showpost.php?p=8...3&postcount=12
|
|
|
21.03.2021., 15:32
|
#39
|
Okajava grijehe
Registracija: Mar 2021.
Postova: 5,514
|
evo i mog konkretnijeg doprinosa,
dakle 2 SMA crossover strategija, postupke sam više-manje objasnio u komentarima koda. Vjerojatno sam zaboravio nešto, pa slobodno pitajte
Kod:
"""
forum.hr tutorial
2 SMA crossover strategija
alphabet
"""
import pandas as pd
import yfinance as yf
import numpy as np
import mplfinance as mpf
# odaberemo financijski instrument
# može i kripto, format je COIN-VALUTA
# npr. BTC-USD, ETH-EUR
dionica = yf.Ticker("F")
# popunimo dataframe s podacima
# druga varijanta je korištenje yf.download i
# pd.read_csv() funkcija za učitavanje
df = pd.DataFrame(data=dionica.history(interval='1d', start='2020-01-01'))
# definiramo jednostavni pomični prosjek
# i dodajemo ga u dataframe
sma10 = df['Close'].rolling(10).mean()
sma20 = df['Close'].rolling(20).mean()
df['SMA 10'] = sma10
df['SMA 20'] = sma20
# izrada strategije
def strategija(x):
# radimo liste gdje ćemo spremiti signale
buy_lista = []
sell_lista = []
# signali koji nam govore jesmo li u tradeu
buy_signal = False
sell_signal = False
for i in range(0, len(x)):
# kada manja pređe veću, kupujemo
# palimo signal da smo u trejdu
if x['SMA 10'][i] > x['SMA 20'][i] and not buy_signal and not sell_signal:
buy_lista.append(x['Close'][i])
sell_lista.append(np.nan)
sell_signal = True
# kada veća pređe manju, prodajemo
# resetiramo signal, nismo u trejdu
elif sell_signal is True and x['SMA 10'][i] < x['SMA 20'][i]:
sell_lista.append(x['Close'][i])
buy_lista.append(np.nan)
sell_signal = False
# ako nijedan od uvjeta nije zadovoljen,
# punimo liste sa 'not a number'
else:
buy_lista.append(np.nan)
sell_lista.append(np.nan)
return (buy_lista, sell_lista)
# punimo kolumne dataframea sa signalima
# signali = cijene pri kojima smo kupili/prodali
df['Buy'] = strategija(df)[0]
df['Sell'] = strategija(df)[1]
# koristimo mplfinance jer se mogu crtati svjećice
# možete kaj god, matplotlib, plotly
# meni je ovo najjednostavnije
# pip install mplfinance
df.index.name = 'Date'
# definiramo pomične prosjeke za crtanje
ap_sma10 = mpf.make_addplot(df['SMA 10'])
ap_sma20 = mpf.make_addplot(df['SMA 20'])
# definiramo signale za crtanje
ap_buy = mpf.make_addplot(df['Buy'], type='scatter', marker='^', markersize=50, color='green')
ap_sell = mpf.make_addplot(df['Sell'], type='scatter', marker='v', markersize=50, color='red')
# crtamo svjećice, sma-ove i signale
# ako odaberete prevelik timeframe (vidi liniju 21)
# svjećice vam i nisu od neke koristi jer će ionako
# izgledati kao line chart
mpf.plot(df, type='candle', style='yahoo', addplot=[ap_sma10, ap_sma20, ap_buy, ap_sell])
rezultat bi trebao biti ovaj graf:
ono što bi se još dalo napraviti je prikazati na grafu usporedbu s običnim holdanjem recimo i sam izračun profita strategije vs hold. probajte tak malo proširiti.
edit: aha, da, zaboravio sam objasnit sam graf
znači, na mom konkretno grafu i primjeru ima hrpa buy/sell indikatora, to je zbog duljine mojih SMA linija, slobodno promijenite timeframe i duljine na nešto standardnije. Tipa zadnjih 5 godina i 50/200 sma.
u svakom slučaju, zeleni trokuti pokazuju entrye, tj. kada kraći sma sječe dulji, a exiti su crveni i pokazuju, očito, kada dulji sječe kraći sma i signalizira promjenu u trendu, tj. vrijeme za izlazak iz pozicije.
a i kao što se da vidjet, ima dosta lažnih signala.
|
|
|
21.03.2021., 15:40
|
#40
|
Registrirani korisnik
Registracija: Jan 2009.
Lokacija: Zagreb
Postova: 15,847
|
Eh tek sad vidim da je već to spomenuto...jbg. išo po redu i pisao...drugi puta pripremim post al ga ne submitam dok ne dođem do kraja.
|
|
|
 |
|
Sva vremena su GMT +2. Trenutno vrijeme je: 23:03.
|
|
|
|