Yra neblogas kursas apie data analysis is pytono, paziurekit:

Python for Financial Analysis and Algorithmic Trading

http://raudys.com/kursas/pratybos/Python%20for%20Financial%20Analysis%20and%20Algorithmic%20Trading.zip

Video namų darbai

Video paskaitos

Klausimus galima užduoti saulius.blaziunas@mif.vu.lt

Neblogas video kursas apie pytona, rekomenduoju pažiūrėti čia

magnet:?xt=urn:btih:475aed23ca180a2e800dc7f8ca8b7ba8edaa597e&dn=Lynda.com%20-%20Python%203%20Essential%20Training&tr=udp%3a%2f%2ftracker.openbittorrent.com%3a80&tr=udp%3a%2f%2ftracker.publicbt.com%3a80&tr=udp%3a%2f%2ftracker.ccc.de%3a80

Dar geresnis video apie laiko eilučių analizę pytone:

magnet:?xt=urn:btih:a2ed6b78c3d4e40fc7545e94b662487de36f30a9&dn=%5b%20FreeCourseWeb.com%20%5d%20Udemy%20-%20Python%20for%20Time%20Series%20Data%20Analysis.rar&tr=udp%3a%2f%2ftracker.coppersurfer.tk%3a6969%2fannounce&tr=udp%3a%2f%2ftracker.torrent.eu.org%3a451%2fannounce&tr=udp%3a%2f%2fthetracker.org%3a80%2fannounce&tr=udp%3a%2f%2fretracker.lanta-net.ru%3a2710%2fannounce&tr=udp%3a%2f%2fdenis.stalker.upeer.me%3a6969%2fannounce&tr=udp%3a%2f%2fexplodie.org%3a6969%2fannounce&tr=udp%3a%2f%2ftracker.filemail.com%3a6969%2fannounce&tr=udp%3a%2f%2ftracker.iamhansen.xyz%3a2000%2fannounce&tr=udp%3a%2f%2fretracker.netbynet.ru%3a2710%2fannounce&tr=udp%3a%2f%2ftracker.nyaa.uk%3a6969%2fannounce&tr=udp%3a%2f%2ftorrentclub.tech%3a6969%2fannounce&tr=udp%3a%2f%2ftracker.supertracker.net%3a1337%2fannounce&tr=udp%3a%2f%2fopen.demonii.si%3a1337%2fannounce&tr=udp%3a%2f%2ftracker.moeking.me%3a6969%2fannounce&tr=udp%3a%2f%2ftracker.zer0day.to%3a1337%2fannounce&tr=udp%3a%2f%2ftracker.leechers-paradise.org%3a6969%2fannounce&tr=udp%3a%2f%2fcoppersurfer.tk%3a6969%2fannounce

Kad pasileisti Jupyter is U:\python

C:\ProgramData\Anaconda3\python.exe C:\ProgramData\Anaconda3\cwp.py C:\ProgramData\Anaconda3 C:\ProgramData\Anaconda3\python.exe C:\ProgramData\Anaconda3\Scripts\jupyter-notebook-script.py u:\python

Namų darbą sudaro programa, pristatymas ir parodymas dėstytojui, .py failų nusiuntimas dėstytojui per virtualią mokymosi aplinką (emokymai.vu.lt).

Kilus klausimams galite rašyti saulius.blaziunas@mif.vu.lt.

Tvarkaraštis

Kursas

Šiame kurse yra nagrinėjami kompiuterių taikymai prekyboje vertybiniais popieriais. Pirmoje kurso dalyje bus supažindinama su dalykais, reikalingais norint sėkmingai kurti ir naudoti kompiuterizuotas prekybos sistemas: rinkomis, biržomis bei jų tipais, vertybinių popierių tipais, prekybos kaštais, rinkos dalyviais, likvidumu ir kita. Vėliau pereinama prie prekyboje naudojamų technologijų, realaus laiko duomenų, prekybos algoritmų, prekybos simuliavimo ir prekybos sistemų. Lygiagrečiai paskaitoms vyksta praktiniai užsiėmimai, kurių metu studentai bandys naudoti realaus laiko duomenis, kurti prekybos bei prekybos simuliavimo sistemas, taikyti algoritmus.

Literatūra

  • Trading and Exchanges: Market Microstructure for Practitioners by Larry Harris link1link2
  • Inside the Black Box: The Simple Truth About Quantitative Trading by Rishi K Narang .
  • New Trading Systems and Methods by Perry J. Kaufman .
  • Options, Futures & Other Derivatives by John C Hull link

Naudingos internetinės nuorodos

Paskaitų skaidrės

Duomenys

Pratybos

  • Per pratybas aš parodau kelis pavyzdukus, padedu studentams, galima atsiskaityti už namų darbus.
  • Pratybų medžiaga paprastai dedu čia: http://raudys.com/kursas/pratybos/
  • Prisijungimo metodologija is namu prie terminalu MIF galima rasti čia. Žiūrėti “Prisijungimas prie MIF Windows serverių iš Windows OS (iš namų

naudokit ne terminal1 o queen, kiss, nirvana

Tradestation

Galite naudotis Tradestation programine įranga. Atsisiurbti ją galite iš čia: TradeStation 9.5 Setup.exe

Yra 12 loginų skirtų prisijungimui. Loginas ir slaptažodis yra tokie patys. Jeigu vienas naudotojas jau yra prisijungęs tai kitas jį atjungs jeigu jungsis su tuo pačiu vardu.

Namų darbai

Paskaitų ir namų darbų tvarkaraštis yra pateiktas žemiau:

  • Paskutinė ND data (raudona) yra atsiskaitymo data.
  • Už kiekvieną anksčiau atsiskaitytą namų darbą gausit 0,1 papildomo balo.

Namų darbų aprašymas

Namų darbą sudaro programa, pristatymas ir parodymas dėstytojui, .py failų nusiuntimas dėstytojui per virtualią mokymosi aplinką (emokymai.vu.lt). Bus atliekama namų darbų kodo analizė ir jeigu didelė dalis kodo sutampa - pažymys anuliuojamas (abiems studentams). Prisijungę prie virtualios mokymo aplinkos https://emokymai.vu.lt/ atsidarykite kursą “Praktiniai investavimo pagrindai”. Ten, pasirinkus atitinkamą užduotį, įkelkite užduoties failus.

  • Programa turi būti tvarkinga gražiai apipavidalinta: grafikai su pavadinimu (title) ir ašių pavadinimais, spausdintas tektas su paaiškinimais (jeigu to nėra -1 balas).
  • Programa turi būti su komentarais, kurie aprašo kieno ir koks tai darbas, paaiškina mažiau suprantamas vietas (jeigu to nėra -1 balas).
  • Programa turi būti su studento parašytomis funkcijomis, nekaroti to pačio kodo daug kartų, o kviesti funkciją daug kartų su skirtingais parametrais (jeigu to nėra -1 balas)..

Namų darbus studentai susigalvoja patys pagal mano pateikta aprašymą. Jeigu manote kad darbas bus per silpnas, tai pasikonsultuokite su manimi. Tikiuosi kad namų darbe padarysit daugiau negu aš esu parodęs per pratybas. Primenu - darbo vėlavimas mažina pažymį: 1 sav -25%, 2 sav -50%, >2 sav -100%

1. Susipažinimas su rinkos duomenimis

Studentas turėtų pademonstruoti kad supranta ir moka užkrauti duomenis į Python aplinką ir juos atvaizduoti ir atlikti elementarias manipuliacijas su jais bei atvaizduoti rezultatus.

  1. Smulkių 20 užduočių atlikimas naudojant numpy ir pandas (3 balai)
  2. Savarankiška duomenų paieška ir užkrovimas į Python: (2 balai) (negalima TradeStation duomenų)
    1. Tikinius
    2. Minutinius
    3. Dieninius
  3. Atvaizduoti duomenis (visus tris) (2 balai)
  4. Atsitiktinių duomenų generavimas ir atvaizdavimas (1 balas) - generuoti ir atvaizduoti duomenys kurie vizuliai butu panasus i rinkos kainu kitimo duomenis
  5. Papildomai du (10-ukui): (po 1 balą, max 2 balai)
  6. Sudaryti sesijas iš minutinių, tikiniu duomenų http://raudys.com/kursas/doku.php?id=1uzd_sesijos
  7. Sujungti ateities sandorių duomenis į vieną eilutę http://raudys.com/kursas/doku.php?id=1uzd_futures_sujungimas
  8. Dviejų skirtingų (akcijos ir forex) laiko eilučių sulyginimas papildant tuščias dienas arba jas ištrinant (pvz: sukonvertuoti JAV akcijos kainas į EUR). http://raudys.com/kursas/doku.php?id=1uzd_sulyginimas
  9. Surasti 10 didžiausių pertraukų duomenyse ir jas atspausdinti (kokio ilgio kada buvo) http://raudys.com/kursas/doku.php?id=1uzd_pertraukos
  10. Iš tikinių duomenų suformuoti valandinius barus arba minutinius http://raudys.com/kursas/doku.php?id=1uzd_tick_to_minute
  11. Iš kviečių/kukurūzų ar pan. kainų suskaičiuoti kaip keičias kainos metų bėgyje (pvz) (paimti 10 metu duomenis, uždėti kas metus viena ant kito ir suskaičiuoti vidutinišką kainų pokyti per metus skirtingom dienom)

/ Ten, kur yra prasminga, turi būti rašomos funkcijos. Pavyzdžiui 2 punkte parašote funkciją, kurios įvesties parametrai yra duomenų failo nuoroda (pvz. 'C:\Users\Desktop\duomenys.csv'), o funkcija grąžina struktūrą, kurioje yra tvarkingai sudėta duomenų failo nuskaityta informacija. Pavyzdžiui 3 punkte parašote funkciją, kurios įvesties parametrai yra data, kaina, grafiko pavadinimas (title), o funkcija nupaišo grafiką.

2. Indikatorių programavimas

Studentas turėtų pademonstruoti kad supranta ir moka manipuliuoti duomenimis sudėtingesniais metodais ir gali suprogramuoti žinomus duomenų analizės algoritmus/indikatorius

  • Dalis A – Pasibandyti metatrader (galima bet kokia) platforma ir pasipaišyti indikatorius
  • Dalis B – susiprogramuoti tris (3) indikatorius Python
    • Galima vieną market indikatorių
    • Indikatorius negali kartotis per studenta - pasirinkti pas destytoja is anksto
  • Palyginti savo indikatoriu su kažkieno kito indikatoriais (pvz. metatrader, Tradestation). Atsiskaitant reikės pateikti įrodymą, kad Jūsų suprogramuotas indikatorius sutampa su pvz. metatrader ar Tradestation indikatoriais. Tinka screenshot.
  • ant keliu duomenu paleisti savo indikatorių
  • Mokėti paaiškinti, ką rodo Jūsų suprogramuoti indikatoriai ir žodžiu pateikti prekybos strategijos pavyzdžių, kurie naudotų Jūsų pasirinktus indikatorius. (Pvz: jei suprogramuotumėte SMA indikatorių, tai galėtumėte sakyti, jog jeigu dabartinė kaina stipriai nutolusi nuo SMA reikės, tai rodo, jog kaina per daug nutolo nuo slenkančio vidurkio (SMA) ir tikėtina, jog grįš į vidurkį. Jei kaina per daug pakilo nuo vidurkio, tai parduosiu į skolą (short sell) tikintis uždirbti iš kainos kritimo - grįžimo link SMA reikšmės. Jei kaina per daug nukrito, tai pirksiu (buy) tikintis uždirbti iš kainos kylimo - grįžimo link SMA reikšmės).

Negalimi indikatoriai: RSI, SMA, EMA, VWAP, TrueRange, AverageTrueRange

Ten, kur yra prasminga, turi būti rašomos funkcijos. Pavyzdžiui parašote funkciją, kurios įvesties parametrai yra reikiami duomenys apskaičiuoti indikatoriui (pvz open,high,low,close kainos, indikatoriaus parametrai), o funkcija grąžina indikatoriaus reikšmes.

Gana geri įvairių indikatorių paaiškinimai (galite susirasti ir kitur): https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/list-of-technical-indicators/

3. Prekybinės strategijos parašymas Python aplinkoje

Studentas turėtų pademonstruoti, kad supranta ir moka sukurti prekybos sistemą bei simuliaciją įtraukiant visus prekybos kaštus, taip pat atlikti optimizacija

Naudojantis egzistuojančia platforma kaip kad MetaTrader, Ninjatrader, OpenQuant (trial), multicharts(trial), (surasti kokią naują). Optimizavimas, suradimas geriausių parametrų rinkinių

  1. Strategijos parašymas Python:
    1. realizuoti vieną (arba kelis, jei yra noras) principą: (3 balai)
      1. kryptinė strategija (trend following)
      2. prieškryptinė strategija (mean reversion)
    2. suprogramuoti take profit ir/arba stop loss posistemes. Skaičiuoti kiekvienam sandoriui atskirai (1 balas)
    3. į pelno skaičiavimus įtraukti prekybos kaštus (1 balas)
    4. ant grafiko pažymėti strategijos (a. dalis) pirkimus ir pardavimus. Pažymėti, kodėl jie įvyko (pvz. kai 2 slenkantys vidurkiai susikerta) (1 balas)
    5. ant grafiko pažymėti take profit/stop loss (b. dalis) pirkimus ir pardavimus. Pažymėti, kodėl jie įvyko (pvz. kai aktyvavosi stop loss) (1 balas)
    6. atspausdinti pelno kitimo grafiką (1 balas)
  2. Parašytos strategijos parametrų optimizavimas (užtenka brute force arba random)
    1. nustatyti optimalius parametrus (pageidautina pagal Sharpe) (1.5 balo)
    2. atspausdinti pelno kitimo grafiką ir palyginti su neoptimizuotais parametrais (0.5 balo)

Būtų labai gerai, jeigu naudotumėte didelį duomenų kiekį, kad įvyktų daug pirkimų/pardavimų (pvz. dieniniams duomenims 10 metų, 10 minučių duomenims 2 mėnesius, 60 minučių duomenims 1 metus)

Ten, kur yra prasminga, turi būti rašomos funkcijos. Pavyzdžiui parašote funkciją, kurios įvesties parametrai yra tikslo funkcija (pvz sharpe funkcija), testuojamų parametrų masyvas, prekybos strategijai suskaičiuoti reikalingi parametrai (pvz. close kaina), o funkcija grąžina rastus optimalius parametrus.

Pagalba užduočiai: http://raudys.com/kursas/doku.php?id=namu_darbas_3

4. Prisijungimas prie brokerio API ir darbas su ja

Galima vietoje 4-to namų darbo padaryti papildomą 5-tą.

Studentas turėtų pademonstruoti kad supranta ir moka prisijungti prie brokerio API ir gali gauti realaus ir istorinius rinkos duomenis, taip pat moka nusiusti limit/market sandorius ir nutraukti juos, gauti patvirtinimus kad sandoris įvyko arba kad sandoris gautas/nutrauktas. Galima realizuoti Python, JAVA, c++ ir kitomis kalbomis.

    1. Dėmesio, ib demo duoda tik paskutinių 2 dienų istorinius duomenis - IB TWS duoda tik FOREX istorinius duomenis
  1. Google
  2. Gal yra kokia kita?
  3. Nenukopijuoti aklai nuo pavyzdžio
  4. Mokėti paaiškinti kas kodėl yra daroma
  5. Kokia nori kalba (JAVA, C++, c sharp ) ar kuo nori tik kad veiktu
  6. Galit rasti kitų padarytu bibliotekų prisijungimui prie API
  • Negalima atsiskaityti pavyzdžio
  • Nemoka panaudoti NextOrder id -1 balas
  • Jeigu parametrus hardkodina į kodą -1 balas
  • Jeigu netvarkingas darbas -1 balas

Pagalba užduočiai: http://raudys.com/kursas/doku.php?id=namu_darbas_4

5. Papildomas darbas - Portfelio kūrimas iš kelių instrumentų

Studentas turėtų pademonstruoti, kad moka sukurti portfeli iš įvairų šaltinių ir supranta faktorius įtakojančius portfelio kokybę.

  1. Sukurti kelias skirtingas strategijas su skirtingais indikatoriais ir/arba logika, arba tą pačią strategiją panaudoti su keliais skirtingais finansiniais instrumentais (pvz. su 10 skirtingų akcijų)) (2 balai)
  2. Strategijas paoptimizuoti (brute force arba random), kad surasti geriausią parametrų rinkinį kiekvienam instrumentui/strategijai. (3 balai)
  3. Strategijų rezultatus sudėti į portfelį ir parodyti sujungtą pelno(ne viso turto) kreivę 1 grafike. (2 balai)
  4. Paskaičiuoti koreliacijos matricą tarp skirtingų strategijų prekybos rezultatų/komponentų. (2 balai)
  5. Viską gražiai apipavidalinti, pateikti kodą su komentarais. (1 balas)

Ši užduotis bus paprasta, jeigu 1,2 ir 3-čioje užduotyje tvarkingai pasirašėte funkcijas, kurias šioje užduotyje belieka tik panaudoti ir atlikti keletą papildomų skaičiavimų.

Jeigu nemokate naudotis ciklais ir po viena laudinat ir optimizuojat tai -1 balas

Alternatyvios užduotys vietoj 3,4,5

Pratybos

  • Mokomės Python pagrindus
  • Atsiskaitinėjam namų darbus

2018 ruduo - mokomės python duomenų analizei

  • instaliuojam anaconda pytona
  • paprasom pycharm mokomosios versijos - labai geras editorius
  • Pirma paskaita bas apie pitono ir pandas ir numpy pradmenis.
  • QuantConnect
  • Quantopian / zipline
  • Smulkios užduotys su pytonu
    • Užkrauti duomenis į numpy iš failo
    • Užkrauti duomenis į pandas iš failo
    • Užkrauti duomenis į pandas iš url
    • Nupiešti linijos grafika su pyplot
    • Nupiešti scatter diagramas su pyplot
    • Nupiešti du grafikus viename grafika vienas virš kito ir x ašis surišti kad judinant judėtų abu
    • Suskaičiuoti slenkanti vidurkį ir nupiešti
    • Naudojant pandas suskaičiuoti kiek kokios akcijos pasikartojo duomenyse

http://raudys.com/kursas/doku.php?id=pratybos01

http://raudys.com/kursas/doku.php?id=pratybos02

http://raudys.com/kursas/doku.php?id=pratybos04

2020 - mokomės python duomenų analizei

Mažos užduotys per paskaitas/pratybas

Duoda 0.1 papildomo balo:

formatas:

  
  4 baitai int turi buti lygus 1111111111
  4 baitai int turi buti lygus 1
  4 baitai float - data tokiu formatu: 37561.61200   sveika dalis yra dienos nuo kazkada , o frakcine yra dienos dalis
  4 baitai float - pnl
  4 baitai float - pos
  4 baitai float - trade_number
  datos konversija: d.date = np.array(np.floor(data['date'] - 25569).astype(np.int64) * 24 * 60 * 60 * 1000000000, dtype='datetime64[ns]')
  • 2020-05-07 Išbandyti auto regresija ant rinkos duomenų - prognozuoti viena diena į priekį