|
|
19.03.2021., 14:49
|
#1
|
Moderator
Registracija: Jul 2011.
Postova: 22,472
|
Kvantitativna analiza i algoritamsko trgovanje
Dakle, čemu uopće služi kvantitativna analiza i zašto algoritamsko trgovanje?
Kvantitativna analiza primjenom matematike, fizike i kompjuterske znanosti na financije (posebno tržišta kapitala, ovdje posebno zanimljivih kriptovaluta) pokušava steći određenu prednost pri odlučivanju, na način da pokušava pronaći i primijeniti pravilnosti i eliminirati pristranosti.
Uobičajen pristup kod malih (retail) trgovaca je da čitaju ili slušaju razne informacije kojima onda pokušavaju doći do odluka kako, gdje i kada investirati, ta kada ući u određene pozicije (kupiti/prodati). Ovaj pristup se bazira na kvalitativnoj osobnoj ocjeni tih informacija i u osnovi je subjektivan,
Radi se o nepouzdanom načinu, sličnom slijepom kockanju bez ikakvog jasnog i logičnog sistema. A takvi su u pravilu i rezultati. Ljudi su po defaultu podložni raznim biasima uzrokovanim emocijama i to je slabost kada se radi o tržištu, posebno zbog ispoljavanja pohlepe i/ili straha.
Poznato je da na tržištu po stilu trgovanja postoje "bikovi" (strategija na rast cijene), "medvjedi" (strategija na pad cijene) koji su 'igrači'. Međutim, postoje i "kokoši" (strah) i "svinje" (pohlepni) koji nemaju logičnu i jasnu strategiju i koncepciju, nego podliježu emocijama. Za takve se kaže da budu "zaklani", odnosno da na kraju izgube novac i to bez naučene lekcije.
Kvantitativna analiza i algoritamsko trgovanje omogućuju prije svega dubinsku analizu predmeta i strategije trgovanja, a zatim i automatizaciju cijele strategije, kako bi se izbjegle emocije pri odlučivanju.
Kod kriptovaluta, osobito BTC postoji specifičnost da je relativno malo onih koji su držali long poziciju duže vrijeme u minusu, prije svega zbog dva velika rasta, 2017. i 2020. godine.
Zato ćemo ovdje pokušati ocijeniti poznatu HODL poziciju (buy&hold) u odnosu na neke bazične kvantitativne strategije, ovaj put iz osnovne tehničke analize. HODL pozicija je benchmark i o odnosu na nju gledamo druge strategije koje testiramo.
Ovo je vrlo važno zato što sama tehnička analiza (TA) ima puno pobornika, a i protivnika ovdje kod nas na pdf-u, koji se često prepiru po raznim temama koje za to nisu predviđene.
To se može testirati na dva načina, prvi je gore navedeni subjektivni način 'praćenja' (s kojim zasigurno nećemo steći nikakve uvide), a druga je testiranje tih strategija na prošlim (i/ili budućim) podacima.
Algoritamsko trgovanje putem parametara tehničke analize je često, postoje razna gotova rješenja, kao što su "prodaje" raznih botova ili korišenje open source botova (npr. freqtrade , quantopian i sl).
Međutim, mi smo ovdje odabrali drugi, teži pristup. Mislim da on nosi više vrijednosti kada je u pitanju edukacija - a to je na što jednostavniji način pokušati sami kodirati neke osnovne principe vezane za analizu i testiranje strategija.
Nije cilj prepisati kod i pustiti ga da radi - to ne preporučujem nikome. Radio on neko vrijeme ili ne, nikad nećemo znati kako i zašto (ne)radi.
Isto tako, nije cilj stvoriti funkcionalnog trading bota ovdje na forumu, osim što je to prilično teško i vremenski zahtjevno, bilo bi to i neetično.
Ja nisam ni programer ni investiticijski savjetnik, nego samo osoba koja za rješavanje nekih vrsta problema ponekad koristi kvantitativnu analizu i ponešto kodiranja.
Ovo nije poticaj na algoritamsko trgovanje samo po sebi, nego na učenje novih koncepata kada su u pitanju kriptovalute.
Reći ćemo par riječi o tehničkom aspektu ove priče. Mnoge ovdje će prije svega zbunjivati ovaj dio s kodiranjem.
Za kvantitativne financije i algoritamsko trgovanje (a osobito machine learning) danas je zlatni standard programski jezik Python. Python je jezik visoke razine, vrlo čiste i jasne sintakse koji se vrlo brzo uči.
Ja ovdje ne mogu držati neki crash kurs Pythona, za to nemam vremena, a ni znanja.
Ja nisam programer da mogu nastupati s edukacijske razine o tome, nego samo netko tko povremeno koristi programiranje za neke specifične analize, najčešće se radi o analizama podataka, nekim statističkim i machine learning problemima. Ako povremeno koristiš čekić, ne znači da si stručnjak za alat niti majstor.
Ali ako ima netko tko bi otvorio temu za učenje Pythona, dobrodošao je - bila bi to dobra suplementarna tema.
Neki kolege rade i u drugim programiskim jezicima i to se može, ali je to puno teže jer su to low level jezici koji traže puno više znanja, razumijevanja i vremena, što mi ovdje nemamo.
Mnogi libraryi kojima se Python služi su pisani u drugim jezicima (C/C++ i sl), a sam Python služi kao "ljepilo" za sve te stvari koje su "ispod poklopca motora" i koje se ne vide.
Python se direktno koristi kod algoritamskog trgovanja, s tim da treba naglasiti da to vrijedi samo za tzv viskoke latencije - odnosno kada se radi o relativno "sporom" trgovanju - što znači da sekunde ili djelići sekunde nisu bitni za te strategije. Opet, to je daleko brže i lakše od osobnog postavljanja naloga, posebno što kripto tržište radi 24/7, za razilku od klasičnog tržišta kapitala ili FX, gdje imamo radno vrijeme i radne dane.
Druga stvar su niske latencije, tzv high frequency trading (HFT) gdje se koriste drugi, brži programski jezici, tu je vrlo bitna i fizička blizina samoj burzi i radi se o milisekundama. To koriste neki kvantitativni hedge fondovi, međutim, retail traderima je to vrlo skupo, nedostupno, resursno zahtjevno i nepraktično - tako da ćemo taj aspekt ovdje zanemariti.
__________________
408 Request Time-out 503 service unavailable
|
|
|
19.03.2021., 14:58
|
#2
|
Moderator
Registracija: Jul 2011.
Postova: 22,472
|
Kod:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
Ovdje uvodimo librarye koje trebamo. Numpy je za brojeve, pandas za analizu i transformaciju podataka, matplotlib za crtanje, a seaborn mi nije ni trebao ovdje, ali eto, bar se od njega vuče stil. Ovo 'as np' ili 'as pd' je alias koji služi kasnije zbog jednostavnijeg tipkanja koda. Mogu biti i drugačiji, ali ovo su standardni.
Kod:
pip install yfinance
Kod:
import yfinance as yf
Ovdje su uveli yfinance koji će nam pomoći da kolega ne mora raditi mukotrpni web scraping za doći do podataka
Kod:
df = yf.download(["BTC-USD", "ETH-USD"], start_date="2017-01-01", end_date="2020-12-31")
Koristimo yf za dohvat podataka o BTC i ETH od 2017 do 2020 te ga odmah spremamo u dataframe koji se zove df.
s ovom naredbom ispituje se kako izgleda prvih 5 redaka df-a. Možete staviti npr head(20) i prikazat će prvih 20, ili koji već stavite broj. Umjesto head može se koristiti i tail koji radi isto samo kreće od kraja dataframea.
__________________
408 Request Time-out 503 service unavailable
|
|
|
19.03.2021., 15:07
|
#3
|
Moderator
Registracija: Jul 2011.
Postova: 22,472
|
Kada se pozove head, df izgleda ovako:
Vući ćemo ovaj "Close" jer je to završna cijena dana. Nema smisla ići na Adjusted kad su u pitanju kriptovalute, odnosno identičan je.
Sad ga možemo plotirati da vidimo kako izgleda:
Izgleda neugledno pa ćemo ga ispeglati sa prosjekom od 8 dana i namjestiti veličinu grafikona.
Podaci su ok, ali vidljivost nije. Zbog velike dominacije BTC sa iznosima, ne vidi se ništa pa ćemo ubaciti log skalu na osi y
Sad se malo boje vidi.
Nastavit ćemo s analizom ....
__________________
408 Request Time-out 503 service unavailable
|
|
|
19.03.2021., 16:45
|
#4
|
Registrirani korisnik
Registracija: Aug 2020.
Postova: 1,114
|
Super početak, hvala Wand_1
Mali savjet za one koji možda nisu nikad radili u Google Colabu, svaki ovaj fragmenat koda stavite u svoj zaseban code cell i pokrećite. I nemojte samo kopi pejstat nego stvarno napišite jer se tako najbolje uči programirat. Ako vam neka funkcija nije skroz jasna, odmah guglajte, sve one su jako dobro pokrivene i objašnjene jer su ti libraryji dosta popularni.
|
|
|
19.03.2021., 16:58
|
#5
|
Moderator
Registracija: Jul 2011.
Postova: 22,472
|
Quote:
Gilda99 kaže:
Super početak, hvala Wand_1
Mali savjet za one koji možda nisu nikad radili u Google Colabu, svaki ovaj fragmenat koda stavite u svoj zaseban code cell i pokrećite. I nemojte samo kopi pejstat nego stvarno napišite jer se tako najbolje uči programirat. Ako vam neka funkcija nije skroz jasna, odmah guglajte, sve one su jako dobro pokrivene i objašnjene jer su ti libraryji dosta popularni.
|
Slobodno se uključi kolegice  Treba netko debugirati moje 10 minutne 'kodove'.
__________________
408 Request Time-out 503 service unavailable
|
|
|
19.03.2021., 17:08
|
#6
|
Moderator
Registracija: Jul 2011.
Postova: 22,472
|
Dakle, vidjeli smo da se BTC i ETH prate, u visokoj su korelaciji. Da vidimo kolikoj:
94%.
A da vidimo kako bi to bilo na razini 2020 godine:

__________________
408 Request Time-out 503 service unavailable
|
|
|
19.03.2021., 18:08
|
#7
|
Registrirani korisnik
Registracija: Aug 2020.
Postova: 1,114
|
Quote:
wand_1 kaže:
Dakle, vidjeli smo da se BTC i ETH prate, u visokoj su korelaciji. Da vidimo kolikoj:
94%.
|
Koja je definicija ove varijable cijena? (Ne vidi se na slici, a možda i ja krivo gledam)
Za ovaj dole odsječak korelacija ispada 88.7361% pa pretpostavljam da nije ta definicija.
Kod:
cijena=df["Close"]
cijena.corr()
edit: ako ste smotani kao ja, prvo napravite 2. sliku
Kod:
cijena=df.loc["2020-01-01":"2020-12-31","Close"]
cijena.corr()
to je ta 94% korelacija, tnx wand 
|
|
|
19.03.2021., 19:04
|
#8
|
Moderator
Registracija: Jul 2011.
Postova: 22,472
|
cijena nije varijabla, nego dataframe koji je spremljen kao slice svih redaka koji se odnose na 2020. godinu i stupaca "Close" koji se odnose na BTC i ETH, znači 362 retka i 2 stupca.
corr() cijelog dataframea vraća korelacijsku matricu, računa korelaciju ta dva stupca, jer je defaultni axis=0 i mislim Pearson...
Možemo korelaciju/korelacijsku matricu tog dataframea provjeriti u R-u, Excelu..
__________________
408 Request Time-out 503 service unavailable
|
|
|
19.03.2021., 17:12
|
#9
|
Okajava grijehe
Registracija: Mar 2021.
Postova: 5,514
|
Za Windowse podržavam condu, ali na Linuxu mislim da je najbolje napraviti svoj setup s venvovima jer instalacija paketa tipa yfinance, itd nije system-wide nego vezana samo uz projekt, što je bar meni osobno bolje i preglednije.
Za editor, VS Code je odličan, a ako ste više terminal onda vjerojatno vim/emacs, ovisi kojoj sekti pripadate.
Kaj se samog algo trejdanja tiče, najosnovniji bi bio neki trend trading tipa izvršenje trejda na presjecanju moving average-ova, tj. kad kraći krene iznad dužeg uzeti long i obrnuto. Mislim da čak pandas ima integrirano iscrtavanje EMA linija pa bi se vjerojatno dalo na temelju toga nešto jednostavno iskodirati. Kad uhvatim vremena, mogu u detalje. Ili ako netko ima neko specifično pitanje, slobodno nek stavi.
edit: čisto jedan disclaimer, ja stvarno ne znam puno/ništa o kriptu tako da ovo što pričam se više referiram na dionice i nemam pojma je li primjenjivo na kripto tržište, ni koji su uobičajeni buy/Sell signali kod kripta.
|
|
|
19.03.2021., 17:39
|
#10
|
Moderator
Registracija: Jul 2011.
Postova: 22,472
|
Quote:
alphabet kaže:
Za Windowse podržavam condu, ali na Linuxu mislim da je najbolje napraviti svoj setup s venvovima jer instalacija paketa tipa yfinance, itd nije system-wide nego vezana samo uz projekt, što je bar meni osobno bolje i preglednije.
|
Quote:
Za editor, VS Code je odličan, a ako ste više terminal onda vjerojatno vim/emacs, ovisi kojoj sekti pripadate.
|
Podržavam oboje. Colab sam odabrao zbog toga što ne treba instalacija a svi imaju Gmail.
Quote:
Kaj se samog algo trejdanja tiče, najosnovniji bi bio neki trend trading tipa izvršenje trejda na presjecanju moving average-ova, tj. kad kraći krene iznad dužeg uzeti long i obrnuto. Mislim da čak pandas ima integrirano iscrtavanje EMA linija pa bi se vjerojatno dalo na temelju toga nešto jednostavno iskodirati. Kad uhvatim vremena, mogu u detalje. Ili ako netko ima neko specifično pitanje, slobodno nek stavi.
|
Nismo još došli do toga...Nadam se da hoćemo.
Quote:
edit: čisto jedan disclaimer, ja stvarno ne znam puno/ništa o kriptu tako da ovo što pričam se više referiram na dionice i nemam pojma je li primjenjivo na kripto tržište, ni koji su uobičajeni buy/Sell signali kod kripta.
|
Primjenjivo je, samo ti pucaj. Napravit ćemo paraleno i s dionicama, da kolege vide risk/return razliku između tržišta kapitala i kripta.
__________________
408 Request Time-out 503 service unavailable
|
|
|
19.03.2021., 17:57
|
#11
|
Okajava grijehe
Registracija: Mar 2021.
Postova: 5,514
|
Quote:
wand_1 kaže:
Podržavam oboje. Colab sam odabrao zbog toga što ne treba instalacija a svi imaju Gmail.
Nismo još došli do toga...Nadam se da hoćemo.
Primjenjivo je, samo ti pucaj. Napravit ćemo paraleno i s dionicama, da kolege vide risk/return razliku između tržišta kapitala i kripta.
|
može, budem se više uključio kad finaliziraš bar uvodni dio, čisto da su svi postovi vezani uz samo programiranje na jednom mjestu, tj. da ne treba preskakati stranice da se nađe.
|
|
|
19.03.2021., 17:58
|
#12
|
Moderator
Registracija: Jul 2011.
Postova: 22,472
|
Da bismo mogli usporediti BTC i ETH trebali bismo prvo napraviti normalizaciju, odnosno svođenje na istu točku na početku godine. To se može napraviti na način da se dataframe podijeli sa prvim retkom i pomnoži za 100:
Sada da vidimo grafikon:
Ovo je već zanimljivije, kada startaju iz iste točke...
__________________
408 Request Time-out 503 service unavailable
|
|
|
19.03.2021., 18:03
|
#13
|
Moderator
Registracija: Jul 2011.
Postova: 22,472
|
Kod kriptovaluta je uvijek dobro pogledati risk/return čisto da bi se moglo povezati sa tržištem kapitala.
Prvo računamo 'dnevni povrat' odnosno postotnu promjenu u odnosu na prethodni dan:
sa dropna() smo izbacili prazan redak, odnosno onaj prvi koji je podijeljen sam sa sobom.
__________________
408 Request Time-out 503 service unavailable
|
|
|
20.03.2021., 10:04
|
#14
|
Registrirani korisnik
Registracija: Jan 2009.
Lokacija: Zagreb
Postova: 15,861
|
Tu sam, citam i sve to, samo mi petkovi i vikendi nisu bas naklonjeni....
|
|
|
21.03.2021., 10:00
|
#15
|
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.
|
|
|
26.04.2021., 08:10
|
#16
|
novi korisnik
Registracija: Dec 2002.
Lokacija: Na lancu
Postova: 15,019
|
Kolege, jedno konkretno pitanje, kako i gdje drzite scriptu da bude ativna 24/7?
Ja imam neko osnovno minimalno poznavanje djanga i flaska, pretpostavljam da bih mogao nesto izvesti na cloudu (nemam svoj server naravno), ali isto tako pretpostavljam da to nije pravi nacin, jel moze mala pomoc?
Inace nakon prvog odustajanja, ulovio sam se ponovo i spojio na Huobi koristeci njihov sluzbeni SDK, sto je mozda i bila greska jer kada sam otvorio prvi puta taj paket pogubio sam se, bolje da sam se sam ulovio sam slaganja svog jednostavnog API-ja.
Slazem jednostavnu scriptu za swing trading, nikakva kvantitativna analiza nije ukljucena za sada, za coin koji svejedno drzim, i koji sam swing trejdao prije u bearu dok je konstantno ponavljao isti obrazac.
Inace, nisam trejder i ovo mi je vise interesantno kao dodatna edukacija.
__________________
Not my problem.
|
|
|
26.04.2021., 10:43
|
#17
|
Registrirani korisnik
Registracija: Jan 2009.
Lokacija: Zagreb
Postova: 15,861
|
Ako nemaš svoj neki server, onda je jedino pravo rješenje vrtiti to na svom računalu koje nećeš gasiti. Nisam siguran da bi to bilo pametno držati to na nekim free servisima koji ti ništa ne garantiraju.
U slučaju da ima Raspberry PI, ni to ne bi bilo loša opcija. Ne bruji, ne zuji, troši malo struje i bez problema može raditi 24/7
|
|
|
26.04.2021., 14:04
|
#18
|
Moderator
Registracija: Jul 2011.
Postova: 22,472
|
Za bilo kakvo live trgovanje mora biti cloud rješenje. Ne znam, npr AWS. Ne treba ti raditi ni flaskom ni djangom, ima rješenja kada možeš direktno tamo instalirati cijeli setup.
__________________
408 Request Time-out 503 service unavailable
|
|
|
26.04.2021., 17:56
|
#19
|
novi korisnik
Registracija: Dec 2002.
Lokacija: Na lancu
Postova: 15,019
|
Quote:
stjepan21 kaže:
Ako nemaš svoj neki server, onda je jedino pravo rješenje vrtiti to na svom računalu koje nećeš gasiti. Nisam siguran da bi to bilo pametno držati to na nekim free servisima koji ti ništa ne garantiraju.
U slučaju da ima Raspberry PI, ni to ne bi bilo loša opcija. Ne bruji, ne zuji, troši malo struje i bez problema može raditi 24/7
|
Quote:
wand_1 kaže:
Za bilo kakvo live trgovanje mora biti cloud rješenje. Ne znam, npr AWS. Ne treba ti raditi ni flaskom ni djangom, ima rješenja kada možeš direktno tamo instalirati cijeli setup.
|
Morat cu malo proguglati onda nesto na cloudu, ne treba nuzno biti besplatno, ionako se mislim jos nesto raditi. A do tada na kompu, nema druge.
Upogonio sam je danas, sa takvim iznosima da mi fee skoro pojede 'zaradu' 
__________________
Not my problem.
|
|
|
26.04.2021., 18:27
|
#20
|
Registrirani korisnik
Registracija: Jan 2009.
Lokacija: Zagreb
Postova: 15,861
|
Kad vrtiš nešto od doma, zavisiš podosta od stabilnosti internet veze. Čak i onaj 24h reset IP-a te može koštati glavena kripto tržištu. Ali kad nemaš šta drugo, i to je dobro. Ako imaš nešto kvalitetno doma (po pitanju interneta), onda je i kućni server dobar. Ja vrtim Raspberry Pi godinama i nikada nisam imao problema no ne bih držao neki mikro trading bot na njemu. To bih definitivno držao na nečemu što ima veći up time ilitiga kako kolega wand kaže, cloud.
|
|
|
 |
|
Sva vremena su GMT +2. Trenutno vrijeme je: 16:43.
|
|
|
|