(Acest articol a fost publicat pentru prima dată pe Laboratorul software al lui Adamși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
Introducere
Prima parte a acestui blog din două părți a descris YfinanceService. Acesta este un serviciu de flacon care a apelat la Python yfinance biblioteca și care a servit o parte din date prin API -uri ( /intrinsesicValue, /TickerData și așa mai departe). Partea a II -a a blogului descrie modul de utilizare a API -urilor într -o foaie de calcul Excel, în special folosind conectorul Web Power Query pentru a prelua datele.
Consumând API -urile de la Excel
Unul dintre principalele obiective ale acestui proiect a fost să poată obține datele din yfinance prin YfinanceService și folosiți -l în Excel. Pentru aceasta, folosim foaia de calcul de evaluare a stocurilor.
Fișa de calcul folosește conectorul web al interogărilor de putere. Cu toate acestea, mai degrabă decât să folosești conectorul web direct pentru a ne apela YfinanceService API -uri, folosim Power Query pentru a crea întrebări necompletate și pentru a scrie codul de limbă a interogării puterii M pentru a obține parametrii din foile de lucru și pentru a prelucra rezultatele într -un tabel.
Fișa de calcul este formată din următoarele foi de lucru:
- Configurare – definește un tabel (
Parameters
) cu parametrii modelului global (randament mediu și randament curent). Acest tabel este trecut în interogările de interogare de putere atunci când este nevoie. - Screener – Această foaie obține prețurile curente pentru o serie de stocuri și calculează valoarea intrinsecă pentru fiecare, afișând o recomandare alături de marja de siguranță calculată. Marja de siguranță este discutată în articol despre cum să calculăm valoarea intrinsecă a unei companii precum Benjamin Graham.
- IntrinsicValues - Această foaie definește o listă de tickers și solicită valorile intrinseci pentru toate. Similar cu cele de mai sus, afișează o recomandare alături de marja de siguranță calculată.
- DATE TICKER – Această foaie solicită o serie de indicatori cheie pentru o listă de tichete de acțiuni și afișează rezultatele.
După deschiderea foii de calcul, selectați Fișa de lucru Setup și din meniul de date selectați întrebări și conexiuni. Aceasta va enumera întrebările utilizate în această foaie. Cele trei întrebări principale sunt:
KeyIndicators
(în foaia de lucru TickerData)IntrinsicValues
(în foaia de lucru intrinsesic))CalcIntrinsicValue
ceea ce depinde de funcțiefnCalcIntrinsicValue
(în fișa de lucru a ecranului)
Interogare Keyindicators
Tickerdata Fișa de lucru stabilește două tabele: TableSymbols
și TableFields
. Acestea sunt utilizate ca intrări la KeyIndicators
Interogare. Codul de interogare M Power M creează șirul de interogare API din aceste intrări și procesează rezultatul pentru a produce un tabel. Interogarea poate fi reîmprospătată folosind simbolul de actualizare din partea dreaptă a Întrebări și conexiuni panou.
IntrinsicValues Query
Valori intrinsecice Fișa de lucru stabilește un tabel numit TickerList
. În plus, interogarea obține valorile pentru randamentul mediu (avg_yield
) și randamentul curent (cur_yield
) Din tabelul parametrilor definiți în Înființat Foaie de lucru. Cu aceste valori, construiește șirul de interogare API și numește corespunzător YfinanceService. Dacă interogarea reușește, șirul rezultat este procesat într -un tabel cu două coloane: Ticker şi Valoare intrinsecă.
Interogare CalCintrinsicValue
CalcintrinsicValue Interogarea depinde de fnCalcIntrinsicValue
Interogare/funcție. La rândul său, acest lucru depinde de o interogare (IntrinsicValue
) care a avut un parametru (Ticker
) adăugat la ea. Parametrul este adăugat folosind meniul Gestionare Parametri de pe banda de meniu de acasă. Odată ce parametrul este adăugat, putem converti interogarea originală într -o funcție – fnCalcIntrinsicValue
. Funcția poate fi invocată fie făcând dublu clic pe acesta, fie prin introducerea unui parametru, simbolul ticker în acest caz și apăsând „Invoke”. Cu toate acestea, nu vom folosi această metodă de apelare a funcției.
În schimb, creăm o întrebare suplimentară CalcIntrinsicValue
. Acest lucru creează un nou tabel. Tabelul folosește căpușele definite în TableTickers
(Intrare) Tabel și adaugă o nouă coloană personalizată. Coloana personalizată invocă funcția de valoare intrinsecă pentru fiecare valoare a tickerului.
// Add custom IntrinsicValue column based on the function fnCalcIntrinsicValue parameterised with each of the Tickers InvokedCustomFunction = Table.AddColumn(TickerSource, "IntrinsicValue", each fnCalcIntrinsicValue((Tickers))),
Funcția fnCalcIntrinsicValue
Returnează o pereche cu valoare cheie { value: nnnn }
deci extindem rezultatul și folosim doar a doua componentă:
ExpandedIntrinsicValue = Table.ExpandRecordColumn(InvokedCustomFunction, "IntrinsicValue", {"value"}, {"IntrinsicValue.value"}),
Tabelul rezultat este procesat pentru a fi afișat pe coloana cu valoare intrinsecă (care este ceea ce apare în foaia de lucru).
Un cuvânt despre performanță
În general, performanța întrebărilor este lentă. Presupunând YfinanceService rulează deja, iar foaia de calcul Excel este deschisă. Apoi, apăsând butonul de actualizare pe oricare dintre întrebări trebuie să fie 1) să construiți un șir de interogare, 2) Apelați API -ul prin Web.Contents și 3) Procesați rezultatele. Apelul prin Web.Contents apelează la o API Flak care înfășoară codul Python și, în acest caz, apelează prin intermediul yfinance şi yahoo_fin. Atât acestea folosesc răzuire web, cât și ceea ce determină performanța lentă.
Învelire
În partea I am descris YfinanceService și API -ul apelează la Python yfinance bibliotecă. Partea a II -a a descris cum să folosești API -urile într -o foaie de calcul Excel, în special folosind conectorul web al interogărilor de putere pentru a prelua datele.
În general, aranjamentul pe care îl avem este:
- YfinanceService Interogarea API („Care este valoarea intrinsecă a acestui stoc folosind formula lui Graham?”) Își ia parametrii și intrările dintr -un tabel Excel și invocă funcția de evaluare a stocului prin intermediul conectorului Web de interogare.
- Calculul se face în Python folosind date din yfinance bibliotecă.
- Rezultatul este servit peste punctele flaconului (API -ul).
- Datele de rezultat sunt masate folosind conectorul web de interogare de putere și utilizate în foaia de lucru Excel pentru calcule suplimentare.
Avantaje și dezavantaje
Există avantaje și dezavantaje pentru această abordare. Principalele avantaje sunt:
- Este simplu de depanat (pe partea Python); Oarecum mai puțin, folosind limbajul de interogare de putere M.
- Este relativ simplu de extins: puteți adăuga mai multe funcționalități pe partea Python și/sau extindeți API -ul Flak pentru a susține puncte finale suplimentare care expun mai multe date din yfinance. Dezavantajele sunt preocupate în principal de performanță.
- Performanța este oarecum dezamăgitoare. Mai exact, în acest caz aveam nevoie de unele date de la un alt pachet financiar Yahoofinance. Mecanismul de bază necesită pagini de finanțare Yahoo de scrapsing specific (și tabele și elemente etc.), ceea ce duce la o performanță relativ lentă.