Waxaan soo saareynaa adeeg-yar oo isticmaalaya Tinkoff Invest API si aan si otomaatig ah ugula shaqeyno warbixinnada dilaaliinta iyo xisaabinta guddiyada.

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

Dhiirrigeliyayaashii ka dambeeyay horumarinta adeegga tirakoobka ee Maalgelinta Tinkoff waxay ahaayeen:

Maxaa laga wada hadlayaa?

  • Kaliya qaybta la dabaqay ee ku saabsan horumarka.
  • Aqoonta iyo waayo-aragnimada dhabta ah, kuwaas oo aad muhiim ugu ah ka shaqaynta qalabka maaliyadeed.
  • Dulmar arrimaha laga shaqaynayo

Markaa, waxaan rabaa inaan xisaabiyo tirakoobka ganacsiga oo aan u sameeyo hab ku habboon. 

Horumarinta adeegga tira-koobka tallaabo-tallaabo: 

  1. Ku xidhida Tinkoff Invest API
  2. Ku sawirida xogta Tinkoff Invest API browserka
  3. Helitaanka warbixinnada dillaalnimada iyo wax kala iibsiga
  4. Xisaabinta iyo soo saarista macluumaadka xiisaha
  5. Gabagabada iyo qorshayaasha mustaqbalka

Ku xidhida Tinkoff Invest API

Si aad ugu xidho API-ga, waxaad ka qaadan kartaa sdk kasta dukumeentiga https://github.com/Tinkoff/investAPI#sdk . Ama xirmo npm ` tinkoff-sdk-grpc-js `. Waa muhiim in xirmada lagu cusboonaysiiyo noocii ugu dambeeyay ee horumariyayaashu. Ku rakib

npm i tinkoff-sdk-grpc-js

Hubinta

const { createSdk} = baahan (‘tinkoff-sdk-grpc-js’);   // Token la heli karo sida tan  const TOKEN = ‘YOURAPI’;   // Magaca codsiga kaas oo lagaaga dhex heli karo diiwaanka TCS const appName = ‘tcsstat’;   const sdk = abuuraySdk (TOKEN, appName); (async () => {     console.log(sugo sdk.users.getAccounts()); })();

Natiijada: liiska akoonnadaada ayaa lagu soo bandhigi doonaa console-ka Tusaale ahaan, aynu falanqeyno nuucyada:Waxaan soo saareynaa adeeg-yar oo isticmaalaya Tinkoff Invest API si aan si otomaatig ah ugula shaqeyno warbixinnada dilaaliinta iyo xisaabinta guddiyada.

  • Liiska xisaabaadka waxa ku jira “bangi maal-gashi”, kaas oo aanad la shaqayn karin API-ga
  • Fadlan ogow in beeruhu ay ku jiraan kiis geel ah, halka dukumentiga lagu soo bandhigay goobahan hoos_dhibcaha. 
  • Waxay noqon doontaa sidan oo kale meel kasta, markaa ma qaadan kartid oo kaliya koobi ka dhigi kara goob dukumeenti ah.

Faa’iido leh:

  • Koodhkan waxaad ka heli kartaa laanta mashruuca

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

Ku sawirida xogta Tinkoff Invest API browserka

Waxaan qaatay next.js iyo socket.io. Tani maaha talo adag, dooro go’aankaaga. 

npx create-next-app@ugust npm i socket.io socket.io-client

Waxaan isla markiiba u sii gudubnaa tallaabada saaxiibtinimada ee xigta+socket+investapi, oo arag qaybta faa’iidada leh ee tallaabadan dhammaan faahfaahinta.  Waxaan sharxi doonaa faahfaahinta: 

  • Dhinaca nodejs (server), waxa jira bogag/api/investapi.js faylka. Tani waa halka aan ka abuurno socket.io server-ka oo aan ku xidhno investapi.
  • Dhinaca browserka (macmiilka), waxaanu ku xidhnaa server-ka anagoo adeegsanayna godad waxaanu ka codsanaynaa xogta akoontada dilaaliinta. 
  • Waxaan ka helnaa xogta dullaaliyaha server-ka, ka dibna u dir macmiilka. Marka la helo macmiilka, waxaa lagu soo bandhigay browserka. 

Natiijadu:  Console browser-ka waxaan ku arki karnaa macluumaadka ku saabsan xisaabaadka. Taasi waa, tallaabadii ugu dambeysay, waxaan ku aragnay macluumaadka ku saabsan xisaabaadka ku jira server-ka kumbuyuutarka (nodejs), tallaabada hadda jirta, waxaan u wareejinay macluumaadkan macmiilka (browser).

Waxaan soo saareynaa adeeg-yar oo isticmaalaya Tinkoff Invest API si aan si otomaatig ah ugula shaqeyno warbixinnada dilaaliinta iyo xisaabinta guddiyada.

Hadda aynu samayno si aad akoon uga dooran karto browserka, iyo haddii aysan jirin calaamad, ka dibna qalad ayaa loo diraa console-ka. Shaqadu waa mid fudud oo wax cusub ma aha, marka waxaan siinayaa xiriiriyayaal si aan u galo

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

Faa’iido leh:

  • Sida loo sameeyo saaxiibo xiga iyo godka ayaa si faahfaahsan loogu sharaxay halkan
  • Koodhka saaxiibtinimo ee xiga+socket+investapi:

https://github.com/pskucherov/tcsstat/commit/a443a4ac1bb4f0aa898f638128755fe7391ee381 Qofka kor ku xusan waa ku adag tahay, ka dibna waxaan ku sii sugnaan heerkan oo ay la macaamilaan code. Haddii aad su’aalo qabto – weydii. https://github.com/pskucherov/tcsstat/tree/step2 https://github.com/pskucherov/tcsstat/compare/step1…step2

Helitaanka warbixinnada dillaalnimada iyo wax kala iibsiga

Waxaa jira saddex hab oo lagu helo warbixinnada dilaaliinta iyo wax kala iibsiga

  1. GetBroker Report
  2. HelDividends Ajnabi bixiye
  3. HelOperationsByCursor

Laga bilaabo bilowga hore waa muhiim in la ogaado: 

  • Warbixinta dillaalinta waxaa lagu soo saaray qaabka T-3, i.e. ganacsiyada waxaa lagu soo bandhigaa halkaas ka dib markii la fuliyay dhab ahaantii. 
  • Sidaas awgeed, haddii aad codsato warbixintan labadii maalmood ee u dambeeyay, waxay diyaar noqon doontaa saddex maalmood gudahood. 
  • Si aad u hesho wax kala iibsiga maalmaha ugu dambeeya, waxaan isticmaalnaa habka lagu helo wax kala iibsiga, laakiin xusuusnow in aqoonsigooda iyo waxa ku jira ay isbeddeli karaan ka dib marka la soo saaro warbixinta dillaalnimada.

GetBroker Report

Si aad u hesho warbixinta dillaalnimada, waxaad u baahan tahay inaad qaadato aqoonsiga koontada, taariikhda bilawga iyo dhammaadka warbixinta, laakiin aan ka badnayn 31 maalmood. Waxaan u dirnaa codsi ah in aan warbixin u soo saarno API-ga si aan u soo saarno _broker_report_request , hel taskId jawaab ahaan. Intaa ka dib, annagoo adeegsanayna taskId-kan, waxaan xogta ka helnaa _broker_report_response.

Sidaas darteed dukumeentigu wuxuu leeyahay, run ahaantii waxaa jira nuances. Ilaali gacmahaaga:
  • Waxaad u baahan tahay inaad si sax ah u kaydiso TaskID-ka taariikhdan. 
  • Maadaama haddii aad lumiso, ka dibna taariikhaha la codsado warbixintu waxay marka hore iman doontaa iyadoo laga jawaabayo codsiga jiilka, 
  • Kadibna ma iman doonto gabi ahaanba.
Aan bilowno qorista koodka

Habka loo helo taariikhda, iyadoo la tixgelinayo ka goynta taariikhda hadda jirta

const getDateSubDay = (maalin-hoosaad = 5, bilow = run) => {     const date = Taariikh cusub ();     date.setUTCDate (taariikhda.getUTCDate() -Maalin-hoosaad);       haddii (bilow) {         tate.setUTCHours(0, 0, 0, 0);     } kale {         date.setUTCHours(23, 59, 59, 999);     }       taariikhda soo noqoshada; };

Codsiga jiilka warbixinta 

const brokerReport = sug (sdk.operations.getBrokerReport)({         geneBrokerReportRequest: {             accountId,             from,             to,         }, });

Natiijo:

  • Natiijada fulinta ugu horeysay ee amarka, waxaan helnaa taskId. 
  • Warbixintu waxay bilaabmaysaa in laga soo saaro dhinaca dilaalka. Marka ay diyaar noqoto lama garanayo, waxaanu sugaynaa oo aanu si xilliyo ah u jiiday hawsha Id-ka annaga oo sugayna warbixinta.
  • Waa maxay sababtu? Sababtoo ah haddii aysan warbixintu diyaar ahayn, waxay tuuraysaa khalad. Haddii warbixintu aysan diyaar u ahayn dhinaca dallaalka, markaa tani waa khalad koodkaga. Fadlan habraac: 30058|INVALID_ARGUMENT|hawl aan wali dhamaan, fadlan isku day mar kale hadhow

Koodhka sugitaanka iyo helitaanka warbixintu waxa ay u eegtahay sidan.

const time = async time => {     soo celi Ballanqaad cusub (xalin => setTimeout }   const getBrokerResponseByTaskId = async (taskId, bogga = 0) => {     isku day {         soo celinta sugitaanka (sdk.operations.getBrokerReport)({             getBrokerReportRequest: {                 taskId,                 bogga,             },         });     } qabso (e) {         console.log (‘sug’, e);         saacad sugi (10000);         soo noqod sug getBrokerResponseByTaskId(taskId, bogga);     } ;

Kadibna isla sixirka ayaa dhacaya. Waan joojinay qoraalkayaga, dib u bilow, ma hayno hawlId. Waxaan ku fulinaa koodka codsiga taskId, laakiin hadda ma helno taskId, laakiin isla markaaba warbixinta. Sixir! Wax walbana way fiicnaan lahaayeen haddii ay mar walba sidan ahaan lahaayeen. Laakiin bil gudaheed wax xog ah ma jiri doonto gabi ahaanba. Faa’iido leh :

  • Waxoogaa aragti ah ayaa halkan iyo halkan lagu qeexay .
  • Isku geynta koodka, qabyo-qoraalka ayaa u ekaan doona wax sidan oo kale ah.

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

  • Haddii qof uu la kulmo arrintan, markaa ku soo dhawoow arrinta . Ka dib markay hagaajiyaan sixirkan, way lumin doontaa awooddeeda oo si uun bay u kala duwanaan doontaa. Laakiin wakhtigan xaadirka ah (03/21/2023) waxay u shaqeysaa si la mid ah.

HelDividends Ajnabi bixiye

Qof ayaa laga yaabaa inuu u maleeyo in habkani uu la mid yahay kii hore oo aad isticmaali karto hal hab oo kaliya oo aad ku beddesho magaca hawlgallada. Laakiin ma ay malayn!  Magacaabida halkaas aad bay uga duwan tahay hababka iyo macluumaadka la soo celiyay labadaba. Oo tirinta boggu waxa ay ka bilaabataa 0, ka dibna 1. Si aanad u jahwareerin waxaas oo dhan, way fududahay in la qoro laba hab oo kala duwan. Taas oo la yaab leh, sababtoo ah caqliga shaqadu waa isku mid. Waxaan candhuufay muddo dheer markii aan isku dayay inaan sameeyo hal hab oo waxaa jiray code yar. Ma jiri doono tusaaleyaal halkan.

HelOperationsByCursor

Saddexda aan ugu jeclahay. Inkastoo aysan ahayn tan ugu saxsan, laakiin ugu filan. Waxaan codsi ka sameynaa bilawga abuurista akoon ilaa taariikhda ugu badan ee suurtogalka ah (xiritaanka akoontada ama kan hadda jira). Waxaan helnaa jawaabta, qaado cursorka oo dib u codso ilaa inta xogtu jirto.  Xeerkuna wuu ka kooban yahay marka loo eego tusaalooyinka sare.

const time = async time => {     soo celi Ballanqaad cusub (xalin => setTimeout }   const getOperationsByCursor = async (sdk, accountId, ka, to, cursor = ”) => {     isku day {         const reqData = {             accountId,             ka,             ilaa,             xadka: 1000,             gobolka: sdk.OperationState.OPERATION_STATE_EXECUTED,             Guddi la’aan: been,             ganacsi la’aan: been,             aan habeen dhaafin: been,             cursor,         };           soo laabashada sug sdk.operations.getOperationsByCursor(reqData);     } qabso (e) {         wakhtiga sugitaanka (60000);         soo celinta sugi getOperationsByCursor(sdk, accountId, ka, ku socota, cursor = ”);     } ;

Qabyada ah in la ordo waa halkan : https://github.com/pskucherov/tcsstat/tree/step3.3 codsigeena. Haddii si sax ah loo sameeyo, markaa waxaad u baahan tahay inaad hesho warbixinnada dilaaliinta ee jiritaanka xisaabta oo dhan. Iyo xogta maqan, isla T-3-yada, dib uga soo raritaanka hawlgallada. Laakiin tan waxaa loo kala saari karaa maqaal gaar ah. Nuancesyada ugu waaweyn ee aad la kulmi doonto waxaa ka mid ah inaad xabagto hawlgallada iyo warbixinta dillaalnimada.

  •  Haddii maanta aad heshay warbixinta dillaalnimada iyo macaamil ganacsi ee taariikhaha loo baahan yahay, ku rid dhammaan kaydka xogta, markaa wax dhibaato ah ma jiraan. 
  • Dhibaato ayaad kala kulmi doontaa berri marka aad hesho qaybta xigta ee xogta warbixinta iyo hawlgallada oo aad go’aansato inaad la midayso kaydka kaydka ee jira. 
  • Nuancesyo badan oo ku saabsan ismaandhaafka ama beddelka id ka dib habaynta
  • Ka dib suuqa OTC, id’sku haba yaraatee kuma eka.
  •  Iyo sidoo kale nuucyada qalabyada isku-dhafka ah, kuwaas oo mar kale aan isku mid ahayn, sababtoo ah waxyaabaha gaarka ah ee API. Laakiin taasi waa sheeko kale.

Aynu ku darno helitaanka macluumaadka ku saabsan hawlgallada codsigayaga. Su’aasha ugu weyni waxay noqon doontaa halka xogta laga baaraandegi doono oo lagu kaydin doono.

  •  Haddii aad naftaada u sameyso, waxaad isticmaali doontaa xog isku mid ah aaladaha kala duwan. Markaa waxaad u baahan tahay inaad socodsiiso oo aad kaydiso xogta server-ka.
  • Haddii aad haysatid xog badan oo kala duwan oo ay isticmaalaan isticmaaleyaal badan oo kala duwan, markaa waxaad u baahan tahay inaad go’aansato waxa ka muhiimsan: xawaaraha isticmaalayaasha ama badbaadinta birta ee dhinacaaga. Qof kasta oo awood u leh inuu awoodo tiro aan xadidnayn oo qalab ah ayaa tiriyaa wax kasta oo ku jira server-kiisa oo ka dhigaya mid aad u dhakhso badan isticmaalayaasha, isaga oo badbaadinaya agabka isticmaalaha, sida baytari iyo taraafikada, taas oo aad muhiim ugu ah taleefannada.

Dhanka kale, tirinta browserka maahan xalka ugu fiican mabda’a ahaan. Sidaa darteed, waxa aan qaali ahayn, waxaan u tixgelineynaa server-keena. Inta soo hartay waxaan u dhaafnaa macmiilka. Waxaan runtii rabaa inaan qaato oo aan xisaabiyo komishanka serverka. Laakin halkan waxaa timi nuance loo yaqaan “isdhexgalka”. Aynu nidhaahno waxaad haysataa kumannaan hawlgal waxayna qaadanaysaa shan daqiiqo in la helo. muxuu isticmaali doonaa wakhtigan? Spinner? Horumar? Infa ku saabsan inta la soo geliyay? Way ku habboon tahay in la isticmaalo “sugitaan firfircoon” marka isticmaalaha hawsha ku jira uu mar hore arki karo wax. Waa kan Natiijadii:Waxaan soo saareynaa adeeg-yar oo isticmaalaya Tinkoff Invest API si aan si otomaatig ah ugula shaqeyno warbixinnada dilaaliinta iyo xisaabinta guddiyada.

  • Soo dejinta bogga
  • Dhammaan qaansheegyada waa la codsaday
  • Taas ka dib, dhammaan macaamilada leh komishannada ee macaamilada la fuliyay ayaa laga codsanayaa dhammaan xisaabaadka. Sida xogta la helay, waxaa lagu soo bandhigay browserka.

Si aan loo shaandhayn xogta dhacdooyinka mar kasta, waxaanu jiidnaa dhacdadayada xisaab kasta. Sida tan:

socket.emit (‘sdk:getOperationsCommissionResult_’+ accountId, {                 allaabyada: data?.items,                 inProgress: Boolean(nextCursor), });

Qabyo qoraalka la bilaabayo waa halkan: https://github.com/pskucherov/tcsstat/tree/step3 https://github.com/pskucherov/tcsstat/compare/step2…step3 Socodka. Aad bay u fiican tahay inaad akhriday khadkan! 

Xisaabinta iyo soo saarista macluumaadka xiisaha

Waxay ku xiran tahay cidda u baahan macluumaadka. Sidaa darteed, waxaan isla markiiba kuu sheegayaa nuancesyada ugu muhiimsan ee aad la kulmi doonto.

La shaqaynta qiimaha 

Qof kasta oo ka shaqeeya maaliyadda wuu ogyahay in wax kala beddelashada lacagta ay tahay in lagu sameeyo tirooyin dhan oo keliya. Sababtoo ah khaladka qiyamka ka dib barta tobanlaha iyo qaladka isugeynta oo leh tiro badan oo hawlgallo ah. Taasi waa sababta dhammaan qiimayaasha loogu soo bandhigay qaabka MoneyValue ee soo socdaWaxaan soo saareynaa adeeg-yar oo isticmaalaya Tinkoff Invest API si aan si otomaatig ah ugula shaqeyno warbixinnada dilaaliinta iyo xisaabinta guddiyada.

beertanoocaSharaxaada
lacagxadhigString ISO code currency
unugyoint64Qaybta isugeynta ee wadarta, waxay noqon kartaa tiro taban
nanoin32Qayb jajab ah oo ka mid ah qaddarka, waxay noqon kartaa tiro taban

Waxaan u habaynaynaa iyaga si gooni ah, ka dib waxaan u keenaynaa qiimaha qiimaha:

xigasho.units + xigasho.nano / 1e9

Qiimaha qandaraasyada mustaqbalka

Qiimaha mustaqbalka waxaa lagu soo bandhigaa dhibco, marka aad leedahay mustaqbalka lacag, waxaad u baahan tahay inaad ogaato heerka. Iyo dabcan qiimaha dhibcaha iyo tallaabada qiimaha. Markaad xisaabiso faa’iidada macaamilada, tani way toogan kartaa, sababtoo ah. haddii aad xisaabiso wadarta cadadka adiga oo qiimaha ku dhufanaya tirada. Halkan waxaad u baahan tahay inaad ka taxadarto. Hadda, waan arki doonaa sida ay u dhacdo. Tani waxay khusaysaa mustaqbalka lacagta, meelaha kale wax walba way fiican yihiin tan.Waxaan soo saareynaa adeeg-yar oo isticmaalaya Tinkoff Invest API si aan si otomaatig ah ugula shaqeyno warbixinnada dilaaliinta iyo xisaabinta guddiyada.Waxaan soo saareynaa adeeg-yar oo isticmaalaya Tinkoff Invest API si aan si otomaatig ah ugula shaqeyno warbixinnada dilaaliinta iyo xisaabinta guddiyada.

Suuqa OTC

Suuqani waxa uu leeyahay waxyaalo badan oo u gaar ah, markaa aynu si gaar ah u baranno hawlaha ku saabsan, marka aad bilowdo isku-dubbaridka hawlgallada, waxa ay kuu soo baxaysaa in aad u baahan tahay in aad keento figi/calaamadaha isku mid ah si aad si sax ah ugu habboonaato qalabka. Markaad bilowdo inaad tan la wadaagto warbixinta dillaalnimada, waxay kuu soo baxaysaa in aqoonsiga ganacsiga ee isla macaamilka uu leeyahay xarfo bilowga wax kala iibsiga oo aanay ku jirin warbixinta dillaalnimada. Sidaa darteed, lama barbar dhigi karo … ahem-ahem … marka la barbardhigo! Waxa aan ku beegay wakhtiga ganacsiga, tikadhka iyo iswaafajinta in hal ganacsi Id uu ku jiro mid kale. Sax, ma aqaan. Qofkii la kulma arrintan iyo cidda danaynaysa, u kaalay arrinta ama mid cusub bilow.Waxaan soo saareynaa adeeg-yar oo isticmaalaya Tinkoff Invest API si aan si otomaatig ah ugula shaqeyno warbixinnada dilaaliinta iyo xisaabinta guddiyada.

Hawlgallada xisaabta ee qalabka

Suurtagal ma aha, iyada oo aan la eegin, in la sameeyo hawlgallo xisaabeed oo leh liiska oo dhan. Si aan loogu darin diirimaad jilicsan, waxaan had iyo jeer hubinnaa lacagta iyo habka kaliya haddii aan hubinno in lacagtu ay u dhiganto, dhibcahana loo beddelo lacagta la rabo. Annaga oo ku hubaysan aqoonta ku saabsan la shaqaynta nambarada bangiga, waxaanu xisaabin doonaa komishanka ku baxay xisaab kasta. Sida tan: https://github.com/pskucherov/tcsstat/tree/step4 https://github.com/pskucherov/tcsstat/compare/step3…step4Waxaan soo saareynaa adeeg-yar oo isticmaalaya Tinkoff Invest API si aan si otomaatig ah ugula shaqeyno warbixinnada dilaaliinta iyo xisaabinta guddiyada.   

Microservice waa diyaar!

https://github.com/pskucherov/tcsstat Shaqa-guri ahaan, waxaad hubin kartaa haddii adeeggu uu ku shaqeeyo xiriir gaabis ah, marka xiriirku go’o, marka internetka la gooyo, marka qaladaad ama xaddidaad dhaco qaybta dullaalku. 

Gabagabada iyo qorshayaasha mustaqbalka

  • Wax ka bartay hawlaha aasaasiga ah iyo la shaqaynta API Invest
  • Waqtiga ku qaatay ~ 10 saacadood
  • Heerka dhibka ~ junior+ / dhexe hoose 

Haddii aad sii waddo nadiifinta adeega-yaraha, waxa laga yaabaa inaad ku dhamaato wax sidan oo kale ah

https://opexbot.info

  Tani waa horumarkayga, kuwa caajiska ah si ay u fahmaan, u ordaan oo ay iskood u xisaabiyaan. Waxaan qorsheynayaa inaan ku daro falanqaynta halkaas marka ay codsadaan isticmaalayaasha. Haddii aad ka heshay maqaalka, ka dibna ku biir kanaalka telegram- kayga . Waxaan soo saareynaa adeeg-yar oo isticmaalaya Tinkoff Invest API si aan si otomaatig ah ugula shaqeyno warbixinnada dilaaliinta iyo xisaabinta guddiyada.

Pavel
Rate author
Add a comment

  1. Isakiiev

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

    Reply