Natrag   Forum.hr > Društvo > Gospodarstvo > Kriptovalute

Odgovor
 
Tematski alati Opcije prikaza
Old 20.03.2021., 18:29   #21
Quote:
wand_1 kaže: Pogledaj post
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?
alphabet is offline  
Odgovori s citatom
Old 20.03.2021., 18:48   #22
Quote:
alphabet kaže: Pogledaj post
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
wand_1 is online now  
Odgovori s citatom
Old 21.03.2021., 08:56   #23
Quote:
wand_1 kaže: Pogledaj post
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”.
feenian is offline  
Odgovori s citatom
Old 21.03.2021., 09:30   #24
@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.
Carlos is offline  
Odgovori s citatom
Old 21.03.2021., 09:49   #25
Zadnja dva posta prebačena u prvi/uvodni post
__________________
408 Request Time-out 503 service unavailable
wand_1 is online now  
Odgovori s citatom
Old 21.03.2021., 09:49   #26
Quote:
Carlos kaže: Pogledaj post
@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”.
feenian is offline  
Odgovori s citatom
Old 21.03.2021., 10:00   #27
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.
Carlos is offline  
Odgovori s citatom
Old 21.03.2021., 10:04   #28
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
wand_1 is online now  
Odgovori s citatom
Old 21.03.2021., 10:43   #29
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.

Kod:
df
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..


Kod:
df1
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

Kod:
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
wand_1 is online now  
Odgovori s citatom
Old 21.03.2021., 10:45   #30
Quote:
wand_1 kaže: Pogledaj post
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?
konrad is offline  
Odgovori s citatom
Old 21.03.2021., 11:39   #31
Quote:
konrad kaže: Pogledaj post
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
wand_1 is online now  
Odgovori s citatom
Old 21.03.2021., 12:35   #32
Quote:
wand_1 kaže: Pogledaj post
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.
konrad is offline  
Odgovori s citatom
Old 21.03.2021., 13:21   #33
Quote:
konrad kaže: Pogledaj post
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.
alphabet is offline  
Odgovori s citatom
Old 21.03.2021., 13:53   #34
Quote:
alphabet kaže: Pogledaj post
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.
konrad is offline  
Odgovori s citatom
Old 21.03.2021., 14:03   #35
Quote:
konrad kaže: Pogledaj post
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.
alphabet is offline  
Odgovori s citatom
Old 21.03.2021., 14:36   #36
@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.
stjepan21 is offline  
Odgovori s citatom
Old 21.03.2021., 14:37   #37
Quote:
alphabet kaže: Pogledaj post
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.
konrad is offline  
Odgovori s citatom
Old 21.03.2021., 15:06   #38
Quote:
stjepan21 kaže: Pogledaj post
@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
Gilda99 is offline  
Odgovori s citatom
Old 21.03.2021., 15:32   #39
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.
alphabet is offline  
Odgovori s citatom
Old 21.03.2021., 15:40   #40
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.
stjepan21 is offline  
Odgovori s citatom
Odgovor



Kreni na podforum




Sva vremena su GMT +2. Trenutno vrijeme je: 23:03.