Anyị na-azụlite microservice site na iji Tinkoff Invest API iji megharịa akụkọ mgbasa ozi na ngụkọ ọrụ.

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

Ndị na-akpali akpali n’azụ mmepe nke ọrụ ndekọ ego maka Tinkoff Investments bụ:

Gịnị ka a ga-atụle?

  • Naanị akụkụ etinyere gbasara mmepe.
  • Ezigbo ihe ọmụma na ahụmahụ, nke dị oke mkpa na-arụ ọrụ na ngwá ọrụ ego.
  • Nchịkọta nke okwu ndị a ga-arụ ọrụ

Yabụ, achọrọ m ịgbakọ ọnụ ọgụgụ azụmaahịa wee mee ya n’ụzọ dabara adaba. 

Ịzụlite ọrụ ọnụ ọgụgụ site na nzọụkwụ: 

  1. Njikọ na Tinkoff Invest API
  2. Ịdọrọ data sitere na Tinkoff Invest API n’ime ihe nchọgharị
  3. Ịnata akụkọ ụlọ ahịa na azụmahịa
  4. Mgbakọ na mmepụta nke ozi mmasị
  5. Mkpebi na atụmatụ maka ọdịnihu

Njikọ na Tinkoff Invest API

Iji jikọọ na API, ị nwere ike were sdk ọ bụla na akwụkwọ https://github.com/Tinkoff/investAPI#sdk . Ma ọ bụ ngwugwu npm ` tinkoff-sdk-grpc-js `. Ọ dị mkpa na ndị nrụpụta emelitere ngwugwu ahụ ka ọ bụrụ ụdị kachasị ọhụrụ. Wụnye

npm i tinkoff-sdk-grpc-js

Na-enyocha

const {creaSdk} = chọrọ (‘tinkoff-sdk-grpc-js’);   // Token nwere ike nweta dị ka nke a  const TOKEN = ‘YOURAPI’;   // Aha ngwa nke enwere ike ịchọta gị na ndekọ TCS. const appAha = ‘tcsstat’;   const sdk = createSdk (TOKEN, appName); (async () => {     console.log(echere sdk.users.getAccounts()); })();

Nsonaazụ: a ga-egosipụta ndepụta akaụntụ gị na njikwa. Dịka ọmụmaatụ, ka anyị nyochaa nuances:Anyị na-azụlite microservice site na iji Tinkoff Invest API iji megharịa akụkọ mgbasa ozi na ngụkọ ọrụ.

  • N’ime ndepụta akaụntụ enwere “ụlọ akụ itinye ego”, nke ị nweghị ike iji API rụọ ọrụ
  • Biko mara na ubi ndị a na-abịa na camelCase, ebe n’ime akwụkwọ a ka ewepụtara ubi ndị a n’okpuru_score. 
  • Ọ ga-adị ka nke a n’ebe niile, yabụ na ị nweghị ike iwere ma detuo ubi site na akwụkwọ ahụ.

Bara uru:

  • Ị nwere ike ịhụ koodu a na ngalaba ọrụ

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

Ịdọrọ data sitere na Tinkoff Invest API n’ime ihe nchọgharị

M weere next.js na socket.io. Nke a abụghị nkwanye siri ike, họrọ na ikike gị. 

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

Anyị na-aga n’ihu ozugbo na nzọụkwụ enyi na-esote+socket+investapi, wee hụ akụkụ bara uru nke usoro a maka nkọwa niile.  Aga m akọwa nkọwa: 

  • N’akụkụ nodejs (ihe nkesa), enwere faịlụ ibe/api/investapi.js. Nke a bụ ebe anyị na-emepụta ihe nkesa socket.io wee jikọọ na investapi.
  • N’akụkụ ihe nchọgharị (onye ahịa), anyị na-ejikọta na ihe nkesa site na oghere ma rịọ data akaụntụ n’aka onye na-ere ahịa. 
  • Anyị na-enweta data sitere n’aka onye na-ere ahịa na ihe nkesa, wee ziga ya na onye ahịa. Mgbe anabatara ha na onye ahịa, a na-egosipụta ha na ihe nchọgharị ahụ. 

Nsonaazụ:  na njikwa ihe nchọgharị anyị nwere ike ịhụ ozi gbasara akaụntụ. Nke ahụ bụ, na nzọụkwụ ikpeazụ, anyị hụrụ ozi gbasara akaụntụ na njikwa ihe nkesa (nodejs), na nzọụkwụ dị ugbu a, anyị bufere ozi a na onye ahịa (ihe nchọgharị).

Anyị na-azụlite microservice site na iji Tinkoff Invest API iji megharịa akụkọ mgbasa ozi na ngụkọ ọrụ.

Ugbu a, ka anyị mee ya ka ị nwee ike họrọ akaụntụ site na ihe nchọgharị ahụ, ma ọ bụrụ na enweghị akara, mgbe ahụ, a na-eziga njehie na njikwa. Ọrụ ahụ dị mfe na ọ dịghị ihe ọhụrụ, ya mere ana m enye naanị njikọ iji mee ihe

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

Bara uru:

  • Otu esi eme enyi na-esote na oghere a kọwara n’ụzọ zuru ezu ebe a
  • Koodu enyi na-esote+socket+investapi:

https://github.com/pskucherov/tcsstat/commit/a443a4ac1bb4f0aa898f638128755fe7391ee381 Maka onye ihe dị n’elu siri ike, mgbe ahụ, anyị na-anọgide na ọkwa a ma na-emeso koodu. Ọ bụrụ na ị nwere ajụjụ – jụọ. https://github.com/pskucherov/tcsstat/tree/step2 https://github.com/pskucherov/tcsstat/compare/step1…step2

Ịnata akụkọ ụlọ ahịa na azụmahịa

Enwere ụzọ atọ iji nweta akụkọ mgbasa ozi na azụmahịa

  1. GetBroker Report
  2. Nweta nkewa nke mba ofesi
  3. NwetaOperationsByCursor

Site na mmalite ọ dị mkpa ịmara: 

  • A na-emepụta akụkọ nke brokerage na T-3 mode, i.e. A na-egosiputa ahia ahia n’ebe ahu mgbe emechara ha n’ezie. 
  • N’ihi ya, ọ bụrụ na ị rịọ akụkọ a maka ụbọchị abụọ gara aga, ọ ga-adị njikere n’ime ụbọchị atọ. 
  • Iji mee nkwekọrịta maka ụbọchị ikpeazụ, anyị na-eji usoro maka ịnata arụmọrụ, mana cheta na id na ọdịnaya ha nwere ike ịgbanwe mgbe e guzobe akụkọ nke brokerage.

GetBroker Report

Iji nweta akụkọ na-ere ahịa, ị ga-ebu ụzọ were ID akaụntụ, ụbọchị mmalite na ụbọchị njedebe nke akụkọ ahụ, mana ọ bụghị ihe karịrị ụbọchị 31. Anyị na-eziga arịrịọ ka iwepụta akụkọ na API n’ịwapụta _broker_report_request , nweta taskId na nzaghachi. Mgbe nke ahụ gasịrị, iji taskId a, anyị na-enweta data site na nweta _broker_report_response.

Ya mere akwụkwọ ahụ na-ekwu, n'eziokwu, e nwere nuances. Lelee aka gị:
  • Ịkwesịrị ịchekwa TaskID ruo mgbe ebighi ebi maka ụbọchị ndị a. 
  • Ebe ọ bụ na ọ bụrụ na ị tufuo ya, mgbe ahụ maka ụbọchị a rịọrọ, akụkọ ahụ ga-ebu ụzọ bịa na nzaghachi arịrịọ ọgbọ, 
  • Ma mgbe ahụ ọ gaghị abịa ma ọlị.
Ka anyị bido ide koodu

Usoro maka ịnweta ụbọchị ahụ, na-eburu n’uche mwepu site na ụbọchị dị ugbu a

const getDateSubDay = (subday = 5, mmalite = ezi) => {     const day = ọhụrụ ụbọchị ();     date.setUTCDate (date.getUTCDate() – ụbọchị subday;       ọ bụrụ (mmalite) {         date.setUTCHours(0, 0, 0, 0);     } ọzọ {         date.setUTCHours(23, 59, 59, 999);     }       ụbọchị nloghachi; };

Kpọọ arịrịọ ọgbọ 

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

Nsonaazụ:

  • N’ihi nkwụsị mbụ nke iwu ahụ, anyị na-enweta taskId. 
  • A na-amalite iwepụta akụkọ ahụ n’akụkụ onye na-ere ahịa. Mgbe ọ dị njikere amabeghị, anyị na-echere wee dọpụta taskId na-atụ anya akụkọ ahụ.
  • Gịnị kpatara? N’ihi na ọ bụrụ na akụkọ adịghị njikere, ọ na-atụfu njehie. Ọ bụrụ na akụkọ ahụ adịghị njikere n’akụkụ onye na-ere ahịa, nke a bụ njehie na koodu gị. Biko hazie: 30058|INVALID_ARGUMENT|ọrụ emechabeghị, biko nwaa ọzọ ma emechaa.

Koodu maka ichere na ịnata akụkọ dị ka nke a.

const time = async time => {     laghachite nkwa ọhụrụ(resolve => setTimeout(resolve, time)); }   const getBrokerResponseByTaskId = async (taskId, ibe = 0) => {     gbalị {         laghachi echere (sdk.operations.getBrokerReport)({             getBrokerReportRequest: {                 taskId,                 ibe,             },         });     } ijide (e) {         console.log(‘echere’, e);         echere oge (10000);         nloghachi chere getBrokerResponseByTaskId(taskId, ibe);     } ;

Mgbe ahụ, otu anwansi ahụ na-eme. Anyị kwụsịrị edemede anyị, malite ya ọzọ, anyị enweghị taskId. Anyị na-eji arịrịọ taskId na-eme koodu ahụ, mana anyị anaghị enweta taskId, mana akụkọ ahụ ozugbo. Ime Anwansi! Na ihe niile ga-adị mma ma ọ bụrụ na ọ na-adị ka nke a mgbe niile. Mana n’ime otu ọnwa agaghị enwe data ma ọlị. Bara uru :

  • A na-akọwapụta ntakịrị echiche ebe a na ebe a .
  • Na-etinye koodu ahụ ọnụ, akwụkwọ ahụ ga-adị ka nke a.

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

  • Ọ bụrụ na mmadụ abịa na nke a, mgbe ahụ nabata na okwu . Mgbe ha rụchara anwansi a, ọ ga-efunahụ ike ya, ọ ga-adịkwa iche. Mana n’oge ugbu a (03/21/2023) ọ na-arụ ọrụ dị ka nke ahụ.

Nweta nkewa nke mba ofesi

Onye nwere ike iche na usoro ahụ yiri nke gara aga ma ị nwere ike iji otu usoro nke ị na-agbanwe naanị aha ọrụ. Ma ha echeghị!  Ịkpọ aha ebe ahụ dị nnọọ iche ma na ụzọ ma na ozi eweghachiri. Na ọnụ ọgụgụ ibe na-amalite site na 0, wee malite na 1. Ka ị ghara inwe mgbagwoju anya na ihe a nile, ọ dị mfe ide ụzọ abụọ dị iche iche. Nke bụ iju, n’ihi na echiche nke ọrụ bụ otu. Agwara m ọnụ mmiri ruo ogologo oge mgbe m gbalịrị ịme otu usoro ma enwere obere koodu. A gaghị enwe ihe atụ ebe a.

NwetaOperationsByCursor

ọkacha mmasị m nke atọ. Ọ bụ ezie na ọ bụghị ihe ziri ezi, mana nke zuru oke. Anyị na-arịọ arịrịọ site na mmalite nke ịmepụta akaụntụ ruo ụbọchị kachasị ike (imechi akaụntụ ma ọ bụ nke dị ugbu a). Anyị na-enweta azịza ya, were cursor wee rịọ arịrịọ ma ọ bụrụhaala na enwere data.  Na koodu ahụ dị nkenke karịa na ihe atụ ndị dị n’elu.

const time = async time => {     laghachite nkwa ọhụrụ(resolve => setTimeout(resolve, time)); }   const getOperationsByCursor = async (sdk, accountId, from, to, cursor = ”) => {     gbalị {         const reqData = {             accountId,             from,             to,             limit: 1000,             state: sdk.OperationState.OPERATION_STATE_EXECUTED,             na-enweghị Kọmishọna: ụgha,             enweghị azụmaahịa: ụgha,             enweghị abalị: ụgha,             cursor,         };           nloghachi chere sdk.operations.getOperationsByCursor(reqData);     } ijide (e) {         echere oge (60000);         nloghachi chere getOperationsByCursor(sdk, accountId, from, to, cursor = ”);     } ;

Usoro a ga-agba ọsọ dị ebe a: https://github.com/pskucherov/tcsstat/tree/step3.3 https://github.com/pskucherov/tcsstat/compare/step3.3 Ugbu a, anyị dị njikere ịgbakwunye ọrụ ịnata na ngwa anyị. Ọ bụrụ na emee nke ọma, mgbe ahụ ịkwesịrị ịnweta akụkọ mgbasa ozi maka ịdị adị nke akaụntụ ahụ dum. Na maka data na-efu efu, otu T-3 ahụ, bugharịa site na arụ ọrụ. Mana enwere ike kewaa nke a n’ime edemede dị iche. N’ime isi nuances ị ga-ezute bụ ịdekọ ọrụ na mkpesa brokerage.

  •  Ọ bụrụ na taa ị nwetara akụkọ mgbasa ozi na azụmahịa maka ụbọchị achọrọ, tinye ya niile na nchekwa data, mgbe ahụ ọ dịghị nsogbu ọ bụla. 
  • Ị ga-enwe nsogbu echi mgbe ị nwetara akụkụ ọzọ nke data site na akụkọ na arụmọrụ wee kpebie imekọrịta ha na nchekwa data dị. 
  • Ọtụtụ nuances gbasara id emetụtaghị ma ọ bụ na-agbanwe agbanwe mgbe nhazichara ya
  • Mgbe ahụ maka ahịa OTC, id’s adịghị adaba ma ọlị.
  •  Yana nuances nke ngwa mmekọrịta, nke ọzọ na-adakọghị, n’ihi peculiarities nke API. Ma nke ahụ bụ akụkọ ọzọ.

Ka anyị tinye inweta ozi gbasara arụmọrụ na ngwa anyị. Ajụjụ bụ isi ga-abụ ebe a ga-ahazi ma chekwaa data ahụ.

  •  Ọ bụrụ na ịmere onwe gị, ị ga-eri otu data sitere na ngwaọrụ dị iche iche. Mgbe ahụ ịkwesịrị ịhazi ma chekwaa data na sava ahụ.
  • Ọ bụrụ na ị nwere ọtụtụ data dị iche iche nke ọtụtụ ndị ọrụ dị iche iche na-eri, mgbe ahụ ịkwesịrị ikpebi ihe dị mkpa: ọsọ nke ndị ọrụ ma ọ bụ ịchekwa ígwè n’akụkụ gị. Onye ọ bụla nwere ike ị nweta ego ngwaike na-enweghị ngwụcha na-agụta ihe niile dị na ihe nkesa ya ma mee ka ọ dị ngwa ngwa maka ndị ọrụ, na-echekwa ihe ndị ọrụ, dị ka batrị na okporo ụzọ, nke dị oke mkpa na ekwentị.

N’aka nke ya, ịgụta na ihe nchọgharị abụghị ihe ngwọta kachasị mma na ụkpụrụ. Ya mere, ihe na-adịghị ọnụ, anyị na-atụle ya na ihe nkesa anyị. Anyị na-ahapụrụ ndị ahịa ndị ọzọ. Achọrọ m iwere ma gbakọọ ọrụ na sava ahụ. Ma ebe a na-abịa nuance a na-akpọ “interactivity”. Ka anyị kwuo na ị nwere ọtụtụ puku ọrụ na ọ na-ewe nkeji ise iji nweta ha. Kedu ihe onye ọrụ ga-enwe n’oge a? Spinner? Ọganihu? Infa gbasara ego ebugoro? Ọ dị mma iji “echere na-arụsi ọrụ ike” mgbe onye ọrụ na-arụ ọrụ ahụ nwere ike ịhụ ihe. Nke a bụ nsonaazụ:Anyị na-azụlite microservice site na iji Tinkoff Invest API iji megharịa akụkọ mgbasa ozi na ngụkọ ọrụ.

  • Nbudata ibe
  • A na-arịọ akwụkwọ ọnụahịa niile
  • Mgbe nke ahụ gasịrị, a na-arịọrịrị azụmahịa niile na kọmitii maka azụmahịa ndị e gburu maka akaụntụ niile. Ka enwetara data, a na-eme ya na ihe nchọgharị ahụ.

Ka ị ghara ikpochapụ data na ihe omume oge ọ bụla, anyị na-adọta ihe omume nke anyị maka akaụntụ ọ bụla. Dị ka nke a:

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

Usoro a ga-ebido bụ ebe a: https://github.com/pskucherov/tcsstat/tree/step3 https://github.com/pskucherov/tcsstat/compare/step2…step3 Na-aga n’ihu. Ọ dị mma na ị gụrụ ahịrị a! 

Mgbakọ na mmepụta nke ozi mmasị

Dabere na onye chọrọ ozi. Ya mere, m ozugbo agwa gị isi nuances ị ga-ezute.

Na-arụ ọrụ na ọnụ ahịa 

Onye ọ bụla nke na-arụ ọrụ na ego maara na azụmahịa ego kwesịrị iji naanị ọnụ ọgụgụ dum rụọ ọrụ. N’ihi ezighi ezi nke ụkpụrụ mgbe ọnụọgụ iri na-esote na njehie mkpokọta nwere ọnụ ọgụgụ dị ukwuu nke arụmọrụ. Ọ bụ ya mere e ji gosipụta ọnụ ahịa niile n’ụdị MoneyValue na-esoteAnyị na-azụlite microservice site na iji Tinkoff Invest API iji megharịa akụkọ mgbasa ozi na ngụkọ ọrụ.

ubiụdịNkọwa
egoeririEriri eriri ISO koodu
nkejiihe 64Akụkụ ọnụọgụgụ nke nchikota, nwere ike ịbụ ọnụọgụ na-adịghị mma
nanoihe 32Akụkụ akụkụ nke ego ahụ, nwere ike ịbụ ọnụọgụ na-adịghị mma

Anyị na-ahazi ha iche iche, wee weta ha na ọnụ ahịa ọnụahịa:

quote.units + quote.nano / 1e9

Ọnụ ego nkwekọrịta n’ọdịnihu

A na-egosi ọnụahịa nke ọdịnihu na isi ihe, mgbe ị nwere ọdịnihu ego, ịkwesịrị ịma ọnụego ahụ. Na n’ezie ọnụahịa na isi ihe na nzọụkwụ ọnụahịa. Mgbe ị gbakọọ uru site na azụmahịa, nke a nwere ike gbaa, n’ihi na. ọ bụrụ na ị gbakọọ ọnụ ọgụgụ zuru ezu site n’ịba ụba ọnụahịa site na ọnụ ọgụgụ. N’ebe a, ịkwesịrị ịkpachara anya. Maka ugbu a, anyị ga-ahụ ka ọ na-aga. Nke a metụtara ọdịnihu ego, n’ebe ndị ọzọ ihe niile dị mma na nke a.Anyị na-azụlite microservice site na iji Tinkoff Invest API iji megharịa akụkọ mgbasa ozi na ngụkọ ọrụ.Anyị na-azụlite microservice site na iji Tinkoff Invest API iji megharịa akụkọ mgbasa ozi na ngụkọ ọrụ.

Ahịa OTC

Ahịa a nwere ọtụtụ ihe dị iche iche, yabụ ka anyị mụọ ọrụ na ya iche, mgbe ịmalite imekọrịta ọrụ, ọ ga-apụta na ịkwesịrị iweta figi / akara n’otu ụdị ahụ iji kwekọọ na ngwa ahụ nke ọma. Mgbe ịmalite ịmekọrịta nke a na akụkọ brokerage, ọ ga-apụta na tradeID nke otu azụmahịa ahụ nwere akwụkwọ ozi na mmalite na azụmahịa ma ha anọghị na akụkọ mgbasa ozi. Ya mere, enweghị ike iji ha tụnyere … ahem-ahem … site na ntụnyere! Ejikọtara m oge ahia, akara na dakọtara na otu tradeId dị na nke ọzọ. Ọfọn, amaghị m. Onye zutere nke a na onye na-eche banyere ya, bịa n’okwu a ma ọ bụ malite nke ọhụrụ.Anyị na-azụlite microservice site na iji Tinkoff Invest API iji megharịa akụkọ mgbasa ozi na ngụkọ ọrụ.

Ọrụ mgbakọ na mwepụ na ngwaọrụ

Ọ gaghị ekwe omume, na-enweghị ile anya, ịrụ ọrụ mgbakọ na mwepụ na ndepụta niile. Ka ị ghara ịgbakwunye ọkụ na nro, anyị na-elele ego na usoro mgbe niile ma ọ bụrụ na anyị ji n’aka na ego ahụ dabara, na isi ihe na-agbanwe na ego a chọrọ. N’ịbụ onye nwere ihe ọmụma banyere ịrụ ọrụ na nọmba ụlọ akụ, anyị ga-agbakọọ ọrụ ejiri na akaụntụ ọ bụla. Dị ka nke a: https://github.com/pskucherov/tcsstat/tree/step4 https://github.com/pskucherov/tcsstat/compare/step3…step4Anyị na-azụlite microservice site na iji Tinkoff Invest API iji megharịa akụkọ mgbasa ozi na ngụkọ ọrụ.   

Microservice adịla njikere!

https://github.com/pskucherov/tcsstat Dị ka ihe omume ụlọ, ị nwere ike ịlele ma ọ bụrụ na ọrụ ahụ na-arụ ọrụ na ngwa ngwa njikọ, mgbe njikọ na-agbajikwa, mgbe Ịntanetị kwụsịrị, mgbe njehie ma ọ bụ kubie ume n’akụkụ nke onye na-ere ahịa. 

Mkpebi na atụmatụ maka ọdịnihu

  • Mụrụ maka ọrụ ndị bụ isi na iji API Invest arụ ọrụ
  • Oge eji ~ 10 awa
  • Ọkwa isi ike ~ obere + / obere etiti 

Ọ bụrụ na ịga n’ihu na-emezigharị microservice, ị nwere ike nweta ihe dị ka nke a

https://opexbot.info

  Nke a bụ mmepe m, maka ndị dị umengwụ ịghọta, gbaa ọsọ ma gụọ onwe ha. M na-eme atụmatụ ịgbakwunye nyocha n’ebe ahụ na arịrịọ nke ndị ọrụ. Ọ bụrụ na akụkọ ahụ masịrị gị, wee denye aha na ọwa telegram m . Anyị na-azụlite microservice site na iji Tinkoff Invest API iji megharịa akụkọ mgbasa ozi na ngụkọ ọrụ.

Pavel
Rate author
Add a comment

  1. Isakiiev

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

    Reply