Dellalçylyk hasabatlary we hasaplaýyş komissiýalary bilen işlemegi awtomatlaşdyrmak üçin Tinkoff Invest API ulanyp, mikroservisi ösdürýäris.

Программирование

Tinkoff Maýa goýumlary üçin statistika hyzmatynyň ösüşine ylham berýänler :

Näme ara alnyp maslahatlaşylar?

  • Diňe ösüş hakda ulanylýan bölek.
  • Maliýe gurallary bilen işlemekde möhüm ähmiýete eýe bolan hakyky bilim we tejribe.
  • Işlemeli meselelere syn

Şeýlelik bilen, söwda statistikasyny hasaplamak we amatly görnüşde etmek isleýärin. 

Statistika hyzmatyny ädimme-ädim ösdürmek: 

  1. Tinkoff Invest API-e birikmek
  2. Tinkoff Invest API-den brauzerde maglumat çekmek
  3. Dellalçylyk hasabatlaryny we amallaryny almak
  4. Gyzyklanýan maglumatlary hasaplamak we çykarmak
  5. Netijeler we geljek üçin meýilnamalar

Tinkoff Invest API-e birikmek

API-e birikmek üçin https://github.com/Tinkoff/investAPI#sdk resminamalaryndan islendik sdk alyp bilersiňiz . Ora-da npm paket ” tinkoff-sdk-grpc-js “. Bukjanyň döredijiler tarapyndan iň soňky wersiýasyna täzelenmegi möhümdir. Gurnama

npm i tinkoff-sdk-grpc-js

Barlamak

const {createSdk} = zerur (‘tinkoff-sdk-grpc-js’);   // Bu konst ýaly TOKEN = ‘YOURAPI’ ýaly alyp bolýan bellik ;   // TCS surnallaryndan tapyp boljak programmanyň ady. const appName = ‘tcsstat’; const sdk = createSdk (TOKEN, appName); (async () => {     console.log (sdk.users.getAccounts ()) garaşyň; }) ();    

Netije: konsolyňyzda hasaplaryňyzyň sanawy görkeziler. Mysal üçin, nuanslary derňeliň:Dellalçylyk hasabatlary we hasaplaýyş komissiýalary bilen işlemegi awtomatlaşdyrmak üçin Tinkoff Invest API ulanyp, mikroservisi ösdürýäris.

  • Hasaplaryň sanawynda “Maýa goýum banky” bar, onuň bilen API ulanyp bilmersiňiz
  • Meýdanlaryň düýeCase-de gelýändigini ýadyňyzdan çykarmaň, resminamalarda bu meýdanlar under_score-da görkezilýär. 
  • Everywherehli ýerde şeýle bolar, şonuň üçin resminamalardan bir meýdan alyp we göçürip bilmersiňiz.

Peýdaly:

  • Bu kody taslama bölüminde tapyp bilersiňiz

https://github.com/pskucherov/tcsstat/tree/step1 https://github.com/pskucherov/tcsstat/compare/step1   

Tinkoff Invest API-den brauzerde maglumat çekmek

Next.js we socket.io aldym. Bu güýçli maslahat däl, öz islegiňize görä saýlaň. 

npx create-next-app @ iň soňky npm i socket.io socket.io-müşderi

Derrew dostluk ädimine indiki + soket + investapi geçýäris we ähli jikme-jiklikler üçin bu ädimiň  Peýdaly bölümini görýäris. Jikme-jiklikleri düşündirerin: 

  • Nodejs (serwer) tarapynda sahypalar / api / investapi.js faýly bar. Bu ýerde socket.io serwerini döredýäris we investapi-e birikýäris.
  • Brauzer (müşderi) tarapynda, rozetka arkaly serwere birikýäris we dellaldan hasap maglumatlary soraýarys. 
  • Serwerdäki dellaldan maglumatlary alýarys, soň bolsa müşderä iberýäris. Müşderide kabul edilende, brauzerde görkezilýär. 

Netije:  brauzer konsolynda hasaplar hakda maglumatlary görüp bileris. .Agny, soňky ädimde serwer konsolyndaky (nodejs) hasaplar baradaky maglumatlary gördük, häzirki ädimde bu maglumatlary müşderä (brauzer) geçirdik.

Dellalçylyk hasabatlary we hasaplaýyş komissiýalary bilen işlemegi awtomatlaşdyrmak üçin Tinkoff Invest API ulanyp, mikroservisi ösdürýäris.

Indi brauzerden hasap saýlap bilersiňiz, bellik ýok bolsa, konsola ýalňyşlyk iberilýär. Iş ýönekeý we täze zat däl, şonuň üçin diňe borçnamalara baglanyşyk berýärin

  1. https://github.com/pskucherov/tcsstat/commit/7e1ac57061e5e971588479015b06d8814d6609a9
  2. https://github.com/pskucherov/tcsstat/commit/b28ac973a57494f5232589b4cb6b9fb13b8af759 

Peýdaly:

  • Indiki we rozetka nädip tapmalydygyny bu ýerde jikme-jik beýan edýär . 
  • Dostluk kody indiki + soket + investapi:

https : Soraglaryňyz bar bolsa soraň. https://github.com/pskucherov/tcsstat/tree/step2 https://github.com/pskucherov/tcsstat/compare/step1…step2

Dellalçylyk hasabatlaryny we amallaryny almak

Dellalçylyk hasabatlaryny we amallaryny almagyň üç usuly bar

  1. GetBrokerReport
  2. GetDividendsForeignIssuer
  3. GetOperationsByCursor

Ilkibaşdan bilmek möhümdir: 

  • Dellalçylyk hasabaty T-3 re modeiminde döredilýär. söwdalar hakyky ýerine ýetirilenden soň şol ýerde görkezilýär. 
  • Şoňa görä, soňky iki günüň dowamynda bu hasabaty haýyş etseňiz, üç günüň içinde taýýar bolar. 
  • Soňky günlerdäki amallary almak üçin amallary almak usulyny ulanýarys, ýöne dellalçylyk hasabaty döredilenden soň olaryň şahsyýetiniň we mazmunynyň üýtgäp biljekdigini ýadyňyzdan çykarmaň.

GetBrokerReport

Dellalçylyk hasabatyny almak üçin hasabyň idini, hasabatyň başlanan senesini we gutarýan senesini almaly, ýöne 31 günden köp bolmaly däl. _Broker_report_request döretmek, API-e hasabat taýýarlamak , jogap hökmünde bir mesele almak üçin haýyş iberýäris . Ondan soň, bu taskId ulanyp, _broker_report_response almakdan maglumat alýarys .

Diýmek, resminamalarda hakykatda nuanslar bar diýilýär. Elleriňize serediň:

  • TaskID-i bu seneler üçin hemişelik ýatda saklamaly. 
  • Loseitiren bolsaňyz, talap edilýän seneler üçin hasabat ilki nesil haýyşyna jogap hökmünde geler, 
  • Soň bolsa asla gelmez.

[/ spoiler] Geliň kod ýazmaga başlalyň

Häzirki seneden aýyrmagy göz öňünde tutup, senäni almagyň usuly

const getDateSubDay = (subDay = 5, start = true) => {     const senesi = täze Sene ();     date.setUTCDate (date.getUTCDate () – subDay);       if (start) {         date.setUTCHours (0, 0, 0, 0);     } başga {         senesi.setUTCHours (23, 59, 59, 999);     }       gaýdyp geliş senesi; };

Nesil haýyşyny habar beriň 

const brokerReport = garaşyň (sdk.operations.getBrokerReport) ({         generateBrokerReportRequest: {             accountId,             -den             ,         }, });

Netije:

  • Buýrugyň ilkinji ýerine ýetirilmegi netijesinde, TasId-i alýarys. 
  • Hasabat dellalyň tarapynda döredilip başlandy. Haçan taýyn bolany belli däl, hasabata garaşmak bilen wagtal-wagtal “TaskId” -e garaşýarys we garaşýarys.
  • Näme üçin? Sebäbi hasabat taýýar däl bolsa, ýalňyşlyk goýberýär. Hasabat dellalyň tarapynda taýýar däl bolsa, bu koduňyzdaky ýalňyşlyk. Işlemegiňizi haýyş edýäris: 30058 | INVALID_ARGUMENT | mesele entek gutarmady, soňrak synanyşyň

Hasabata garaşmak we almak kody şuňa meňzeýär.

const timer = async time =>     new täze Wadany yzyna gaýtarmak (çözmek => setTimeout (çözmek, wagt)); }   const getBrokerResponseByTaskId = async (taskId, sahypa = 0) => {     synap görmek {         gaýdyp garaşmak (sdk.operations.getBrokerReport) ({             getBrokerReportRequest: {                 taskId,                 sahypa,             },         });     } tutmak (e) {         console.log (‘garaş’, e);         taýmer garaşyň (10000);         yzyna gaýdyp gel getBrokerResponseByTaskId (taskId, sahypa);     } };

Soň şol bir jady bolýar. Scriptazgylarymyzy duruzýarys, täzeden başlaýarys, bizde wezipe ýok. Kody “TasId” haýyşy bilen ýerine ýetirýäris, ýöne indi “TasId” -i almaýarys, derrew hasabat berýäris. Jady! Hemişe şeýle bolsa, hemme zat gowy bolardy. Emma bir aýyň içinde asla maglumat bolmaz. Peýdaly :

  • Bu ýerde we şu ýerde birneme teoriýa beýan edilýär .
  • Kody bir ýere jemläp, taslama şuňa meňzeş bir zat görüner.

https://github.com/pskucherov/tcsstat/tree/step3.1 https://github.com/pskucherov/tcsstat/compare/step3.1

  • Kimdir biri bu meselä duşsa, meselä hoş geldiňiz . Bu jadydan soň, güýjüni ýitirer we nähilidir bir üýtgeşik bolar. Emma häzirki pursatda (03/21/2023) edil şonuň ýaly işleýär.

GetDividendsForeignIssuer

Kimdir biri bu usulyň öňki görnüşine meňzeýär diýip pikir edip biler we diňe amallaryň adyny üýtgedýän ýekeje usuly ulanyp bilersiňiz. Emma olar çak etmediler!  Ol ýerde at dakmak usullarda-da, gaýdyp gelen maglumatlarda-da gaty tapawutlanýar. Sahypany sanamak 0-dan, soň bolsa 1-den başlaýar. Bularyň hemmesine bulaşmazlyk üçin iki dürli usul ýazmak has aňsat. Geň zat, sebäbi işiň logikasy birmeňzeş. Bir usul ýasamaga synanyşanymda uzak wagtlap tüýkürdim, kod azdy. Bu ýerde hiç hili mysal bolmaz.

GetOperationsByCursor

Üçüsinden iň halanýan zadym. Iň takyk bolmasa-da, iň laýyk. Hasap döretmegiň başyndan iň ýokary senä (hasaby ýapmak ýa-da häzirki hasap) haýyş edýäris. Jogap alýarys, kursory alýarys we maglumatlar bar bolsa gaýtadan haýyş edýäris.  Kod ýokardaky mysallara garanyňda has gysga.

const timer = async time =>     new täze Wadany yzyna gaýtarmak (çözmek => setTimeout (çözmek, wagt)); }   const getOperationsByCursor = async (sdk, accountId, -dan, kursor = ”) => {     synap gör {         const reqData = {             accountId,             çäkden             ,             1000:             ştat: sdk.OperationState.OPERATION_STATE_EXECUTED,             Komissionsiz: ýalan,             söwda etmezden: ýalan,             gijeki gijesi: ýalan,             kursor,         };           gaýdyp garaş sdk.operations.getOperationsByCursor (reqData);     } tutmak (e) tim         garaşýan taýmer (60000);         GetOperationsByCursor (sdk, accountId, -den, kursor = ”) garaşyň;     } };

Işlemegiň taslamasy şu ýerde: https://github.com/pskucherov/tcsstat/tree/step3.3 https://github.com/pskucherov/tcsstat/compare/step3.3 Indi kabul ediş amallaryny goşmaga taýyn amalymyz. Dogry ýerine ýetirilen bolsa, hasabyň barlygy üçin dellalçylyk hasabatlaryny almaly. Missingitirilen maglumatlar üçin şol bir T-3, amallardan täzeden ýükläň. Emma muny aýratyn makala bölmek mümkin. Duşuşjak esasy nuanslaryňyzdan ýelim amallary we dellalçylyk hasabaty.

  •  Bu gün dellalçylyk hasabatyny we zerur seneler üçin amallary alan bolsaňyz, hemmesini maglumat bazasyna salyň, onda hiç hili mesele ýok. 
  • Ertir hasabatdan we amallardan maglumatlaryň indiki bölegini alanyňyzda we bar bolan maglumatlar bazasy bilen sinhronlamak kararyna geleniňizde kynçylyk çekersiňiz. 
  • Gaýtadan işlenenden soň gabat gelmeýän ýa-da üýtgeýän id hakda köp nuans
  • Soňra OTC bazary üçin id-ler asla gabat gelenok.
  •  API-iň aýratynlyklary sebäpli ýene-de gabat gelmeýän sinhronlaşdyryş gurallarynyň nuanslary. Emma bu başga bir waka.

Amallarymyza amallar barada maglumat goşalyň. Esasy sorag maglumatlaryň nirede işlenjekdigi we saklanjakdygy bolar.

  •  Özüňiz etseňiz, dürli enjamlardan şol bir maglumatlary sarp edersiňiz. Soňra serwerde maglumatlary gaýtadan işlemeli we saklamaly.
  • Dürli ulanyjylar tarapyndan sarp edilýän köp dürli maglumatlar bar bolsa, has möhümini çözmeli: ulanyjylaryň tizligi ýa-da demiriň tygşytlanmagy. Kim çäksiz mukdarda enjam satyn alyp bilse, serwerindäki hemme zady sanap, ulanyjylar üçin gaty çalt edýär, telefonlarda gaty möhüm bolan batareýa we traffik ýaly ulanyjy çeşmelerini tygşytlaýar.

Öz gezeginde brauzerde sanamak prinsipde iň amatly çözgüt däl. Şonuň üçin gymmat däl zat, ony serwerimizde hasaplaýarys. Galan zatlary müşderä goýýarys. Hakykatdanam serwerdäki komissiýany alyp, hasaplamak isleýärin. Hereöne bu ýerde “interaktiwlik” diýilýän nuans gelýär. Müňlerçe amallaryňyz bar diýeliň we olary almak üçin bäş minut gerek. Ulanyjy şu wagt näme alar? Egriji? Ösüş? Infa näçeräk ýüklendi? Amalda ulanyjy eýýäm bir zady görüp bilse, “işjeň garaşmagy” ulanmak idealdyr. Netije :Dellalçylyk hasabatlary we hasaplaýyş komissiýalary bilen işlemegi awtomatlaşdyrmak üçin Tinkoff Invest API ulanyp, mikroservisi ösdürýäris.

  • Sahypa ýüklemek
  • Allhli hasap-fakturalar talap edilýär
  • Ondan soň, ähli hasaplar üçin ýerine ýetirilen amallar üçin komissiýalar bilen ähli amallar talap edilýär. Maglumat alnanda, brauzerde görkezilýär.

Wakalardaky maglumatlary her gezek süzmezlik üçin, her bir hasap üçin öz wakamyzy çekýäris. Şuňa meňzeş:

socket.emit (‘sdk: getOperationsCommissionResult_’ + accountId, {                 elementler: maglumatlar? .items,                 inPresent: Boolean (nextCursor), });

Işe başlamagyň taslamasy şu ýerde: https://github.com/pskucherov/tcsstat/tree/step3 https://github.com/pskucherov/tcsstat/compare/step2…step3 Geçmek. Bu setiri okanyňyz gaty gowy! 

Gyzyklanýan maglumatlary hasaplamak we çykarmak

Kimiň haýsy maglumata mätäçdigine baglydyr. Şonuň üçin derrew duşjak esasy nuanslaryňyzy aýdýaryn.

Bahalar bilen işlemek 

Maliýe bilen işleýänleriň hemmesi pul amallarynyň diňe sanlar bilen ýerine ýetirilmelidigini bilýär. Onluk nokatdan soň bahalaryň nädogrylygy we köp sanly amal bilen jemlenen ýalňyşlyk sebäpli. Şol sebäpli ähli bahalar aşakdaky MoneyValue görnüşinde görkezilýärDellalçylyk hasabatlary we hasaplaýyş komissiýalary bilen işlemegi awtomatlaşdyrmak üçin Tinkoff Invest API ulanyp, mikroservisi ösdürýäris.

meýdany görnüşi Düşündiriş
walýuta setir Setirli ISO walýuta kody
birlikleri int64 Jeminiň bitewi bölegi, otrisatel san bolup biler
nano int32 Mukdarynyň bölek bölegi, otrisatel san bolup biler

Olary aýratyn işleýäris, soňra bahanyň bahasyna getirýäris:

sitata.units + sitata.nano / 1e9

Geljekdäki şertnamalaryň bahasy

Geljekleriň bahasy ballarda görkezilýär, walýuta gelejegiňiz bar bolsa, nyrhy bilmeli. Elbetde ballardaky baha we baha basgançagy. Geleşiklerden alnan girdejini hasaplasaňyz, bu atyp biler, sebäbi. bahany mukdar bilen köpeltmek bilen jemi mukdaryny hasaplasaň. Bu ýerde seresap bolmaly. Häzirlikçe, munuň nähili gidýändigini göreris. Bu walýuta gelejeklerine degişlidir, beýleki ýerlerde hemme zat gowy.Dellalçylyk hasabatlary we hasaplaýyş komissiýalary bilen işlemegi awtomatlaşdyrmak üçin Tinkoff Invest API ulanyp, mikroservisi ösdürýäris. Dellalçylyk hasabatlary we hasaplaýyş komissiýalary bilen işlemegi awtomatlaşdyrmak üçin Tinkoff Invest API ulanyp, mikroservisi ösdürýäris.

OTC bazary

Bu bazaryň köp aýratynlygy bar, geliň, onuň üstünde amallary aýratyn öwreneliň. Sinhronlaşdyryş amallaryna başlanyňyzda, gural bilen dogry gabat gelmek üçin figi / tekerini şol bir görnüşe getirmeli bolarsyňyz. Muny dellalçylyk hasabaty bilen sinhronlap başlanyňyzda, şol bir geleşigiň tradeID-iň geleşikleriň başynda harplary bar we olar dellal hasabatynda ýok bolar. Şonuň üçin olary deňeşdirip bolmaz … ahem-ahem … deňeşdirmek bilen! Söwda wagtyna gabat geldim, bir söwda söwdasynyň beýlekisinde bardygyny deňeşdirdim. Dogry, bilemok. Kim muňa duş gelse we kim oňa üns berse, meselä geliň ýa-da täzesini başlaň.Dellalçylyk hasabatlary we hasaplaýyş komissiýalary bilen işlemegi awtomatlaşdyrmak üçin Tinkoff Invest API ulanyp, mikroservisi ösdürýäris.

Gurallardaky matematiki amallar

Gözlemän, tutuş sanaw bilen matematiki amallary ýerine ýetirmek mümkin däl. Softumşaklyga ýylylyk goşmazlyk üçin, elmydama walýutany barlaýarys we diňe walýutanyň gabat gelýändigine we ballaryň islenýän walýuta öwrülendigine ynanýarys. Bank belgileri bilen işlemek barada bilim bilen ýaraglanan, hasaplaryň hersine sarp edilen komissiýany hasaplarys. Şuňa meňzeş: https://github.com/pskucherov/tcsstat/tree/step4 https://github.com/pskucherov/tcsstat/compare/step3…step4Dellalçylyk hasabatlary we hasaplaýyş komissiýalary bilen işlemegi awtomatlaşdyrmak üçin Tinkoff Invest API ulanyp, mikroservisi ösdürýäris.    

Mikroservis taýýar!

https://github.com/pskucherov/tcsstat Öý işi hökmünde, hyzmatyň haýal birikme bilen işleýändigini, birikmeler kesilende, internet kesilende, dellalyň ýalňyşlyklary ýa-da möhletleri gutaranda barlap bilersiňiz. 

Netijeler we geljek üçin meýilnamalar

  • Esasy amallar we Invest API bilen işlemek barada öwrendi
  • Wagt ~ 10 sagat sarp etdi
  • Kynçylyk derejesi ~ kiçi + / pes orta 

Mikroservisi arassalamagy dowam etdirseňiz, şuňa meňzeş bir zat bilen gutararsyňyz

https://opexbot.info

  Bu meniň ösüşim, düşünmekden, ylgamakdan we özbaşdak hasaplamakdan gaty ýalta adamlar üçin. Ulanyjylaryň islegi boýunça ol ýerde analitika goşmagy meýilleşdirýärin. Makalany halanan bolsaňyz, telegram kanalyma ýazylyň . Dellalçylyk hasabatlary we hasaplaýyş komissiýalary bilen işlemegi awtomatlaşdyrmak üçin Tinkoff Invest API ulanyp, mikroservisi ösdürýäris.

Pavel
Rate author
Add a comment

  1. Isakiiev

    Полезная статья. Не могу представить, сколько усилий автора потребовалось, чтобы все описать. Благодарю.

    Reply