Abaawadde amagezi okukola empeereza y’eby’emiwendo mu kkampuni ya Tinkoff Investments be bano:
- ekiwandiiko ku Habré “Tinkoff Investments ky’etayogera”
- okwekenneenya bye baagala abakozesa omukutu
- ekiwandiiko ekikwata ku kubala akakiiko .
- Kiki ekigenda okuteesebwako?
- Okukola empeereza y’ebibalo mutendera ku mutendera:
- Okuyungibwa ku Tinkoff Invest API
- Okukuba data okuva mu Tinkoff Invest API mu browser
- Okufuna lipoota za brokerage n’okutunda ebintu
- FunaAlipoota ya Broker
- Enkola y’okufuna olunaku, ng’otunuulidde okuggyako okuva ku lunaku oluliwo
- Okusaba okukola lipoota
- Alizaati:
- FunaDividendsOmufulumya Omugwira
- GetEmirimuByCursor
- Okubala n’okufulumya amawulire agakwata ku nsonga
- Okukola n’emiwendo
- Ensimbi ezisaasaanyizibwa ku ndagaano z’ebiseera eby’omu maaso
- Akatale ka OTC
- Emirimu gy’okubala ku bikozesebwa
- Microservice yeetegese!
- Ebimalirizibwa n’enteekateeka z’ebiseera eby’omu maaso
- https://opexbot.info ku mukutu gwa yintaneeti
Kiki ekigenda okuteesebwako?
- Ekitundu ekikozesebwa kyokka ekikwata ku nkulaakulana.
- Okumanya n’obumanyirivu obw’amazima, ebikulu ennyo mu kukola n’ebikozesebwa mu by’ensimbi.
- Okulaba ensonga ezirina okukolebwako
Kale, njagala okubala ebibalo by’ebyobusuubuzi n’okukikola mu ngeri ennyangu.
Okukola empeereza y’ebibalo mutendera ku mutendera:
- Okuyungibwa ku Tinkoff Invest API
- Okukuba data okuva mu Tinkoff Invest API mu browser
- Okufuna lipoota za brokerage n’okutunda ebintu
- Okubala n’okufulumya amawulire agakwata ku nsonga
- Ebimalirizibwa n’enteekateeka z’ebiseera eby’omu maaso
Okuyungibwa ku Tinkoff Invest API
Okuyungibwa ku API, osobola okutwala sdk yonna okuva mu biwandiiko https://github.com/Tinkoff/investAPI#sdk . Oba ekipapula kya npm ` tinkoff-sdk-grpc-js `. Kikulu nti package eno etereezebwa okutuuka ku nkyusa eyasembyeyo okuva mu bakola. Okuzimba
npm nze nkuba-sdk-grpc-js
Okukebera
const { okutondaSdk } = kyetaagisa (‘tinkoff-sdk-grpc-js’); // Akabonero akayinza okufunibwa nga kano const TOKEN = ‘YOURAPI’; // Erinnya ly’enkola gy’osobola okusangibwa mu biwandiiko bya TCS. const Erinnya ly’enkola = ‘tcsstat’; const sdk = okukolaSdk (TOKEN, Erinnya ly’okukozesa); (async () => { console.log (linda sdk.abakozesa.funaAccounts ()); }) ();
Ekivaamu: olukalala lwa akawunti zo lujja kulagibwa mu console. Okugeza, ka twekenneenye ebigambo ebitonotono:
- Mu lukalala lwa akawunti mulimu “Investment bank”, gy’otosobola kukola nayo ng’okozesa API
- Nsaba omanye nti ennimiro zijja mu camelCase, ate mu biwandiiko ennimiro zino ziragiddwa mu under_score.
- Kijja kuba bwe kiti buli wamu, kale tosobola kumala gatwala n’okukoppa ennimiro okuva mu biwandiiko.
A mugaso:
- Koodi eno osobola okugisanga mu ttabi lya pulojekiti
https://github.com/pskucherov/tcsstat/omuti/omutendera1 https://github.com/pskucherov/tcsstat/geraageranya/omutendera1
Okukuba data okuva mu Tinkoff Invest API mu browser
Nakwata next.js ne socket.io. Kino si kuteesa kwa maanyi, londa nga bw’oyagala.
npx tonda-ekiddako-app@ekisembayo npm i socket.io socket.io-kasitoma
Amangu ago tweyongerayo ku mutendera gw’omukwano oguddako+socket+investapi, era laba ekitundu eky’Omugaso mu mutendera guno okumanya ebisingawo byonna. Nja kunnyonnyola ebisingawo:
- Ku ludda lwa nodejs (server), waliwo fayiro ya pages/api/investapi.js. Wano we tukola socket.io server ne tuyungibwa ku investapi.
- Ku ludda lwa browser (client), tuyungibwa ku server nga tuyita mu socket ne tusaba data ya account okuva ku broker.
- Tufuna data okuva ku broker ku server, olwo ne tugisindika eri client. Bwe zifunibwa ku kasitoma, ziragibwa mu browser.
Ekivaamu: mu browser console tusobola okulaba amawulire agakwata ku accounts. Kwe kugamba, mu mutendera ogusembayo, twalaba amawulire agakwata ku akawunti mu server console (nodejs), mu mutendera oguliwo kati, twakyusa amawulire gano eri kasitoma (browser).
Kati katukikole osobole okulonda akawunti okuva mu browser, era bwe waba tewali token, olwo ensobi esindikibwa ku console. Omulimu mwangu era tewali kipya, kale mpa links zokka ku commits
- https://github.com/pskucherov/tcsstat/commit/7e1ac57061e5e971588479015b06d8814d6609a9
- https://github.com/pskucherov/tcsstat/commit/b28ac973a57494f5232589b4cb6b9fb13b8af759
A mugaso:
- Engeri y’okukolamu emikwano ekiddako ne socket eyogerwako mu bujjuvu wano .
- Koodi y’omukwano eddako+socket+investapi:
https://github.com/pskucherov/tcsstat/commit/a443a4ac1bb4f0aa898f638128755fe7391ee381 Ku abo ebyo waggulu bizibu, olwo tusigala ku mutendera guno ne tukola ku koodi. Bwoba olina ebibuuzo – buuza. https://github.com/pskucherov/tcsstat/omuti/omutendera2 https://github.com/pskucherov/tcsstat/geraageranya/omutendera1…omutendera2
Okufuna lipoota za brokerage n’okutunda ebintu
Waliwo enkola ssatu ez’okufuna lipoota za brokerage n’okutunda ebintu
Okuva ku ntandikwa kikulu okumanya:
- Lipoota ya brokerage ekolebwa mu mbeera ya T-3, i.e. eby’obusuubuzi byolesebwa eyo oluvannyuma lw’okubituukiriza ddala.
- Okusinziira ku kino, singa osaba lipoota eno okumala ennaku bbiri ezisembyeyo, ejja kuba ewedde mu nnaku ssatu.
- Okukola ddiiru z’ennaku ezisembayo, tukozesa enkola y’okufuna emirimu, naye jjukira nti id yazo n’ebirimu biyinza okukyuka oluvannyuma lw’okutondebwawo kwa lipoota ya brokerage.
FunaAlipoota ya Broker
Okufuna lipoota ya brokerage, olina okutwala account id, olunaku lw’okutandika n’olunaku lw’okuggwaako lipoota, naye nga tezisukka nnaku 31. Tusindika okusaba okukola lipoota eri API mu kukola _broker_report_request , okufuna taskId mu kuddamu. Oluvannyuma lw’ekyo, nga tukozesa taskId eno, tufuna data okuva mu get _broker_report_response.
- Olina okutereka TaskID emirembe gyonna ddala ku nnaku zino.
- Okuva bwe kiri nti bw’ogifiirwa, olwo ku nnaku ezisabiddwa lipoota ejja kusooka kujja ng’eyanukula okusaba kw’omulembe, .
- Era awo tekijja kujja n’akatono.
Enkola y’okufuna olunaku, ng’otunuulidde okuggyako okuva ku lunaku oluliwo
const getDateSubDay = (Olunaku olutono = 5, okutandika = kituufu) => { const olunaku = Olunaku olupya (); olunaku.setUTCDate (olunaku.getUTCDate () – Olunaku olutono); bwe kiba (okutandika) { olunaku.setUTCHours (0, 0, 0, 0); } else { olunaku.setUTCHours (23, 59, 59, 999); } olunaku lw’okudda; };
Okusaba okukola lipoota
const brokerReport = linda (sdk.operations.getBrokerReport) ({ okukolaOkusabaAlipoota ya Broker: { accountId, okuva, okutuuka, }, });
Alizaati:
- Nga ekiva mu kukola ekiragiro ekisooka, tufuna taskId.
- Lipoota etandika okukolebwa ku ludda lwa broker. Bwe kiba nga kyetegefu tekimanyiddwa, tulinda era buli luvannyuma lwa kiseera tusika taskId nga tusuubira lipoota.
- Lwaaki? Kubanga lipoota bw’eba tetegekeddwa, esuula ensobi. Singa lipoota teba yeetegese ku ludda lwa broker, olwo eno nsobi mu code yo. Nsaba okole: 30058|INVALID_ARGUMENT|omulimu tegunnaggwa, nsaba ogezeeko nate oluvannyuma
Koodi y’okulinda n’okufuna lipoota eringa bweti.
const timer = async time => { return new Promise (okugonjoola => setTimeout (okugonjoola, obudde)); } const getBrokerResponseByTaskId = async (taskId, olupapula = 0) => { gezaako { okuddamu okulinda (sdk.operations.getBrokerReport) ({ getBrokerReportRequest: { taskId, olupapula, }, }); } okukwata (e) { console.log (‘linda’, e); linda ekiseera (10000); okuddayo linda getBrokerResponseByTaskId (taskId, olupapula); } };
Olwo obulogo bwe bumu ne bubaawo. Tuyimiriza script yaffe, tuddamu okugitandika, tetulina taskId. Tukola code n’okusaba kwa taskId, naye tetukyafuna taskId, wabula amangu ago lipoota. Obulogo! Era buli kimu kyandibadde kirungi singa bulijjo kiba bwe kiti. Naye mu mwezi gumu tewajja kubaawo data n’akatono. Omugaso : .
- Akatono ku ndowooza kalambikiddwa wano ne wano .
- Okuteeka code wamu, ebbago lijja kufaanana nga lino.
https://github.com/pskucherov/tcsstat/omuti/omutendera3.1 https://github.com/pskucherov/tcsstat/geraageranya/omutendera3.1
- Singa omuntu asanga kino, olwo mwaniriziddwa ku nsonga . Oluvannyuma lw’okuddaabiriza obulogo buno, bujja kuggwaamu amaanyi era bujja kuba bwa njawulo mu ngeri emu oba endala. Naye mu kiseera kino (03/21/2023) kikola bwe kityo.
FunaDividendsOmufulumya Omugwira
Omuntu ayinza okulowooza nti enkola eno efaananako n’eyo eyasooka era osobola okukozesa enkola emu mw’okyusa erinnya ly’emirimu gyokka. Naye tebaateebereza! Okutuuma amannya eyo kwa njawulo nnyo mu nkola ne mu mawulire agaddiziddwa. Era omuwendo gw’olupapula gutandikira ku 0, olwo okuva ku 1. Okusobola obutatabulwa mu bino byonna, kyangu okuwandiika enkola bbiri ez’enjawulo. Ekyewuunyisa, kubanga ensonga y’omulimu y’emu. Nafuuwa amalusu okumala ebbanga nga ngezaako okukola enkola emu era nga code ntono. Tewajja kubaawo byakulabirako wano.
GetEmirimuByCursor
Nze ekisinga okunnyumira ku bisatu. Wadde nga si y’esinga obutuufu, naye esinga okumala. Tukola okusaba okuva ku ntandikwa y’okukola akawunti okutuuka ku lunaku olusinga obunene (okuggalawo akawunti oba eriwo kati). Tufuna eky’okuddamu, tukwata cursor ne tuddamu okusaba kasita wabaawo data. Era koodi eno nnyimpi nnyo okusinga mu byokulabirako waggulu.
const timer = async time => { return new Promise (okugonjoola => setTimeout (okugonjoola, obudde)); } const getOperationsByCursor = async (sdk, accountId, okuva, okutuuka, cursor = ”) => { try { const reqData = { accountId, okuva, okutuuka, ekkomo: 1000, embeera: sdk.OperationState.OPERATION_STATE_EXECUTED, awataliCommissions: bulimba, withoutTrades: bulimba, awataliOvernights: bulimba, cursor, }; okuddayo linda sdk.emirimu.getEmirimuByCursor (reqData); } okukwata (e) { linda ekiseera (60000); okudda linda getOperationsByCursor (sdk, accountId, okuva, okutuuka, cursor = ”); } };
Ebbago erigenda okuddukanyizibwa liri wano: https://github.com/pskucherov/tcsstat/tree/step3.3 https://github.com/pskucherov/tcsstat/compare/step3.3 Kati tuli beetegefu okwongerako emirimu gy’okufuna ku okusaba kwaffe. Bwe kiba nga kikoleddwa bulungi, olwo olina okufuna lipoota za brokerage ku kubeerawo kwonna okwa akawunti. Era ku data ebula, T-3 ezo ze zimu, ziddamu okutikka okuva mu mirimu. Naye kino kiyinza okwawulwamu ekitundu eky’enjawulo. Ku nuances enkulu z’ogenda okusanga kwe kusiiga emirimu ne lipoota ya brokerage.
- Bw’oba leero ofunye lipoota ya brokerage n’okutunda ku nnaku ezeetaagisa, byonna biteeke mu database, olwo tewali buzibu.
- Ojja kufuna obuzibu enkya ng’ofunye ekitundu ekiddako ekya data okuva mu lipoota n’emirimu n’osalawo okubikwataganya ne database eriwo.
- A lot of nuances about mismatched oba okukyusa id oluvannyuma lw’okukola
- Awo ku katale ka OTC, id’s tezikwatagana n’akatono.
- Nga kwotadde ne nuances z’ebivuga ebikwatagana, nga nate tezikwatagana, olw’enjawulo za API. Naye eyo mboozi ndala.
Ka twongere okufuna amawulire agakwata ku mirimu ku nkola yaffe. Ekibuuzo ekikulu kijja kuba wa data w’egenda okukolebwako n’okuterekebwa.
- Bw’okikola ku bubwo, ojja kukozesa data y’emu okuva ku byuma eby’enjawulo. Olwo olina okukola n’okutereka data ku seva.
- Bw’oba olina data nnyingi ez’enjawulo ezikozesebwa abakozesa bangi ab’enjawulo, olwo olina okusalawo ekisinga obukulu: sipiidi y’abakozesa oba okukekkereza ekyuma ku ludda lwo. Oyo yenna asobola okwesasulira omuwendo ogutaliiko kkomo ogwa hardware abala buli kimu ku server ye era n’akifuula super fast eri abakozesa, okukekkereza eby’obugagga by’abakozesa, gamba nga battery ne traffic, ekintu ekikulu ennyo ku masimu.
Mu ngeri y’emu, okubala mu browser si kye kigonjoola ekisinga obulungi mu nkola. N’olwekyo, ekitali kya bbeeyi, tukitwala ku seva yaffe. Ebisigadde tubirekera kasitoma. Njagala nnyo okutwala n’okubalirira commission ku server. Naye wano we wava nuance eyitibwa “interactivity”. Ka tugambe nti olina enkumi n’enkumi z’okulongoosebwa era kitwala eddakiika ttaano okuzifuna. Omukozesa agenda kuba na ki mu kiseera kino? Spinner? Okukulakulana? Infa ku ssente mmeka ezaateekebwa ku mukutu? Kirungi nnyo okukozesa “active waiting” ng’omukozesa mu nkola yasobola dda okulaba ekintu. Bino bye byavuddemu:
- Okutikka omuko
- Invoice zonna zisabibwa
- Oluvannyuma lw’ekyo, emirimu gyonna egy’obusuulu ku mirimu egyakolebwa gisabibwa ku akawunti zonna. Nga data efunibwa, eweebwa mu browser.
Okusobola obutasengejja data mu bibaddewo buli mulundi, tusika ekintu kyaffe ku buli akawunti. Nga bino:
socket.emit (‘sdk: getOperationsCommissionResult_’ + accountId, { ebintu: data?.ebintu, muNkulaakulana: Boolean (ekiddakoCursor), });
Ebbago ly’okutongoza liri wano: https://github.com/pskucherov/tcsstat/tree/step3 https://github.com/pskucherov/tcsstat/geraageranya/omutendera2…omutendera3 Okugenda mu maaso. Kirungi nnyo nti osomye layini eno!
Okubala n’okufulumya amawulire agakwata ku nsonga
Kisinziira ku ani yeetaaga amawulire ki. N’olwekyo, amangu ago nkubuulira nuances enkulu z’ogenda okusanga.
Okukola n’emiwendo
Buli akola ne finance akimanyi nti okutunda ssente kulina kukolebwa na nnamba enzijuvu zokka. Olw’obutali butuufu bw’emiwendo oluvannyuma lw’ensonga ya decimal n’ensobi ey’okukuŋŋaanyizibwa n’omuwendo omunene ogw’emirimu. Eno y’ensonga lwaki emiwendo gyonna gyanjuddwa mu nkola ya MoneyValue eno wammanga
ekisaawe | okuwandiika | Okunnyonnyola |
---|---|---|
sente | akaguwa | String Koodi y’ensimbi ya ISO |
yuniti za yuniti | int64 | Ekitundu kya namba enzijuvu eky’omugatte, kiyinza okuba namba ya negatiivu |
nano | int32 | Ekitundu eky’obutundutundu eky’omuwendo, kiyinza okuba namba ya negatiivu |
Tuzirongoosa mu ngeri ey’enjawulo, olwo ne tuzituusa ku muwendo gw’ebbeeyi:
okujuliza.units + okujuliza.nano / 1e9
Ensimbi ezisaasaanyizibwa ku ndagaano z’ebiseera eby’omu maaso
Bbeeyi y’ebiseera eby’omu maaso elagibwa mu bubonero, bw’oba olina ebiseera eby’omu maaso eby’ensimbi, olina okumanya omuwendo. Era ddala bbeeyi mu bubonero n’omutendera gw’ebbeeyi. Bw’oba obala amagoba okuva mu nkolagana, kino kiyinza okukuba amasasi, kubanga. singa obala omuwendo gwonna ng’okubisaamu omuwendo n’omuwendo. Wano olina okwegendereza. Kati, tugenda kulaba bwe bigenda. Kino kikwata ku currency futures, mu bifo ebirala buli kimu kiri ok ne kino.
Akatale ka OTC
Akatale kano kalina bingi eby’enjawulo, kale ka tusome emirimu ku gwo okwawukana.Bw’otandika okukwataganya emirimu, kijja kuzuulibwa nti olina okuleeta figi / ticker ku ffoomu y’emu okusobola okukwatagana obulungi n’ekivuga. Bw’otandika okukwataganya kino ne lipoota ya brokerage, kijja kuzuulibwa nti tradeID y’enkolagana y’emu erina ennukuta ku ntandikwa mu nkolagana era teziri mu lipoota ya brokerage. N’olwekyo, teziyinza kugeraageranyizibwa … ahem-ahem … nga zigeraageranyizibwa! Nakwataganya obudde bw’okusuubula, ticker n’okukwatagana nti tradeId emu eri mu ndala. Kituufu, simanyi. Oyo yenna asanga kino era akifaako, jjangu ku nsonga oba tandika empya.
Emirimu gy’okubala ku bikozesebwa
Tekisoboka, nga totunuulidde, kukola mirimu gya kubala n’olukalala lwonna. Okusobola obutagattako bbugumu ku nnyogovu, bulijjo tukebera ssente ne tukola singa tuba tukakasa nti ssente zikwatagana, era obubonero ne bukyusibwa ne bufuuka ssente gye twagala. Nga tulina okumanya ku kukola ne nnamba za bbanka, tujja kubala akasiimo akasaasaanyiziddwa ku buli akawunti. Nga kino: https://github.com/pskucherov/tcsstat/omuti/omutendera4 https://github.com/pskucherov/tcsstat/geraageranya/omutendera3…omutendera4
Microservice yeetegese!
https://github.com/pskucherov/tcsstat Nga omulimu gw’awaka, osobola okukebera oba empeereza ekola n’omukutu ogugenda empola, ng’emikutu gimenyese, nga yintaneeti ekutuddwako, ng’ensobi oba ekkomo eriwedde ku ludda lwa broker.
Ebimalirizibwa n’enteekateeka z’ebiseera eby’omu maaso
- Yayiga ku mirimu emikulu n’okukola ne Invest API
- Obudde obumala ~ essaawa 10
- Omutendera gw’obuzibu ~ junior+ / wansi wakati
Singa ogenda mu maaso n’okulongoosa microservice, oyinza okumaliriza ng’olina ekintu nga kino
https://opexbot.info ku mukutu gwa yintaneeti
Eno y’enkulaakulana yange, eri abo abagayaavu ennyo okutegeera, okudduka n’okubala ku lwabwe. Nteekateeka okwongerako analytics eyo ku kusaba kw’abakozesa. Bw’oba ekiwandiiko ekyo kyakunyumidde, olwo subscribe ku mukutu gwange ogwa telegram .
Полезная статья. Не могу представить, сколько усилий автора потребовалось, чтобы все описать. Благодарю.