Táimid ag forbairt micrisheirbhís ag baint úsáide as Tinkoff Invest API chun tuarascálacha bróicéireachta a uathoibriú agus ríomh a choimisiúnú.

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

Ba iad na nithe a spreag forbairt na seirbhíse staitisticí do Tinkoff Investments ná:

Cad a bheidh á phlé?

  • Níl ach an chuid fheidhmeach faoin bhforbairt.
  • Fíor-eolas agus taithí, atá an-tábhachtach le linn oibriú le hionstraimí airgeadais.
  • Forbhreathnú ar shaincheisteanna le hobair orthu

Mar sin, ba mhaith liom staitisticí trádála a ríomh agus é a dhéanamh ar bhealach áisiúil. 

Seirbhís staidrimh a fhorbairt céim ar chéim: 

  1. Ceangal le Tinkoff Invest API
  2. Sonraí a tharraingt ó Tinkoff Invest API i mbrabhsálaí
  3. Tuarascálacha bróicéireachta agus idirbhearta a fháil
  4. Ríomh agus aschur faisnéise inspéise
  5. Conclúidí agus pleananna don todhchaí

Ceangal le Tinkoff Invest API

Chun nascadh leis an API, is féidir leat aon sdk a bhaint as an doiciméadú https://github.com/Tinkoff/investAPI#sdk . Nó pacáiste npm ` tinkoff-sdk-grpc-js `. Tá sé tábhachtach go ndéanann na forbróirí an pacáiste a nuashonrú go dtí an leagan is déanaí. Suiteáil

npm agus tinkoff-sdk-grpc-js

Ag seiceáil

const { createSdk } = a cheangal (‘tinkoff-sdk-grpc-js’);   // Comhartha is féidir a fháil mar seo  const TOKEN = ‘YOURAPI’;   // Ainm an fheidhmchláir trína bhféadfar tú a fháil i logaí TCS. const appName = ‘tcsstat’;   const sdk = createSdk(TOKEN, appName); (async () => {     console.log(fanacht le sdk.users.getAccounts()); })();

Toradh: taispeánfar liosta de do chuntais sa chonsól. Mar shampla, déanaimis anailís ar na nuances:Táimid ag forbairt micrisheirbhís ag baint úsáide as Tinkoff Invest API chun tuarascálacha bróicéireachta a uathoibriú agus ríomh a choimisiúnú.

  • I liosta na gcuntas tá “Banc Infheistíochta”, nach féidir leat oibriú leis ag baint úsáide as an API
  • Tabhair faoi deara le do thoil gur i camelCase a thagann na réimsí, agus cuirtear na réimsí seo i láthair i under_score  sa doiciméadú .
  • Beidh sé mar seo i ngach áit, mar sin ní féidir leat réimse a thógáil agus a chóipeáil ón doiciméadú.

Úsáideach:

  • Is féidir leat an cód seo a fháil i mbrainse an tionscadail

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

Sonraí a tharraingt ó Tinkoff Invest API i mbrabhsálaí

Thóg mé next.js agus socket.io. Ní moladh láidir é seo, roghnaigh de do rogha féin. 

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

Leanaimid ar aghaidh láithreach chuig an gcéim chairdeas seo chugainn+soicéad+investapi, agus féach an chuid Úsáideacha den chéim seo le haghaidh na sonraí go léir.  Déanfaidh mé cur síos ar na sonraí: 

  • Ar thaobh nódejs (freastalaí), tá comhad pages/api/investapi.js. Seo an áit a chruthaímid an freastalaí socket.io agus nascaimid le investapi.
  • Ar thaobh an bhrabhsálaí (cliant), déanaimid teagmháil leis an bhfreastalaí trí soicéad agus iarraimid sonraí cuntais ón mbróicéir. 
  • Faighimid sonraí ón mbróicéir ar an bhfreastalaí, ansin é a sheoladh chuig an gcliant. Nuair a fhaightear iad ar an gcliant, taispeántar iad sa bhrabhsálaí. 

Toradh:  sa chonsól brabhsálaí is féidir linn faisnéis a fheiceáil faoi chuntais. Is é sin, sa chéim dheireanach, chonaic muid faisnéis faoi chuntais sa chonsól freastalaí (nodejs), sa chéim reatha, d’aistrigh muid an fhaisnéis seo chuig an gcliant (brabhsálaí).

Táimid ag forbairt micrisheirbhís ag baint úsáide as Tinkoff Invest API chun tuarascálacha bróicéireachta a uathoibriú agus ríomh a choimisiúnú.

Anois déanaimis é ionas gur féidir leat cuntas a roghnú ón mbrabhsálaí, agus mura bhfuil aon chomhartha ann, seoltar earráid chuig an consól. Tá an obair simplí agus níl aon rud nua, mar sin ní thugaim ach naisc do ghealltanais

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

Úsáideach:

  • Déantar cur síos mion anseo ar conas cairde a dhéanamh ina dhiaidh sin agus ar an soicéad . 
  • Cód cairdis seo chugainn+soicéad+infheistiú:

https://github.com/pskucherov/tcsstat/commit/a443a4ac1bb4f0aa898f638128755fe7391ee381 I gcás a bhfuil an méid thuas deacair, ansin fanaimid ag an gcéim seo agus déileáil leis an gcód. Má tá ceisteanna agat – cuir ceist. https://github.com/pskucherov/tcsstat/tree/step2 https://github.com/pskucherov/tcsstat/compare/step1…step2

Tuarascálacha bróicéireachta agus idirbhearta a fháil

trí mhodh ann chun tuarascálacha bróicéireachta agus idirbhearta a fháil

  1. GetBrokerReport
  2. GetDividendsForeignEisitheoir
  3. GetOperationsByCursor

Ón tús tá sé tábhachtach go mbeadh a fhios agat: 

  • Gintear an tuarascáil bróicéireachta sa mhodh T-3, i.e. ceirdeanna ar taispeáint ann tar éis a fhorghníomhú iarbhír. 
  • Dá réir sin, má iarrann tú an tuarascáil seo le dhá lá anuas, beidh sé réidh i gceann trí lá. 
  • Chun margaí a dhéanamh le haghaidh na laethanta deiridh, bainimid úsáid as an modh chun oibríochtaí a fháil, ach cuimhnigh go bhféadfadh a n-aitheantas agus a n-ábhar athrú tar éis an tuarascáil bróicéireachta a fhoirmiú.

GetBrokerReport

Chun tuarascáil bróicéireachta a fháil, ní mór duit aitheantas an chuntais, dáta tosaigh agus dáta deiridh na tuarascála a ghlacadh, ach gan a bheith níos faide ná 31 lá. Seolaimid iarratas chun tuairisc a ghiniúint chuig an API i nginiúint _broker_report_request , faigh tascId mar fhreagra. Tar éis sin, ag baint úsáide as an taskId seo, faighimid sonraí ó get _broker_report_response.

Mar sin a deir an doiciméadú, i ndáiríre tá nuances. Bí ag faire ar do lámha:

  • Ní mór duit an TaskID a shábháil go deo do na dátaí seo. 
  • Ós rud é má chailleann tú é, ansin do na dátaí iarrtha a thiocfaidh an tuarascáil ar dtús mar fhreagra ar an iarratas giniúna, 
  • Agus ansin ní bheidh sé teacht ar chor ar bith.

[/ spoiler] Cuirimis tús le cód a scríobh

Modh chun an dáta a fháil, ag cur san áireamh an dealú ón dáta reatha

const getDateSubDay = (subDay = 5, tús = true) => {     const date = dáta nua();     date.setUTCDate(date.getUTCDate() – subLá);       má (tús) {         date.setUTCHOurs(0, 0, 0, 0);     } eile {         date.setUTCHOurs(23, 59, 59, 999);     }       dáta fillte; };

Déan tuairisc ar iarratas giniúna 

const brokerReport = fanacht (sdk.operations.getBrokerReport)({         generationBrokerReportRequest: {             accountId,             ó,             chuig,         }, });

Toradh:

  • Mar thoradh ar an gcéad fhorghníomhú an ordaithe, faigheann muid an taskId. 
  • Tosaíonn an tuarascáil a ghiniúint ar thaobh an bhróicéir. Nuair a bhíonn sé réidh ní fios, fanaimid agus tarraingímid an tascId go tréimhsiúil in oirchill na tuarascála.
  • Cén fáth? Toisc mura bhfuil an tuarascáil réidh, caitheann sé earráid. Mura bhfuil an tuarascáil réidh ar thaobh an bhróicéir, is earráid é seo i do chód. Próiseáil: 30058|INVALID_ARGUMENT|níl an tasc críochnaithe fós, bain triail eile as níos déanaí

Breathnaíonn an cód le haghaidh fanacht agus tuairisc a fháil rud éigin mar seo.

const timer = am async => {     seol ar ais Gealltanas nua(réiteach => Am Amuigh (réiteach, am)); }   const getBrokerResponseByTaskId = async (taskId, page = 0) => {     bain triail as {         filleadh ag fanacht (sdk.operations.getBrokerReport)({             getBrokerReportRequest: {                 taskId,                 leathanach,             },         });     } ghabháil (e) {         console.log( ‘fan’, e);         fanacht ar an lasc ama(10000);         filleadh fan le getBrokerResponseByTaskId(taskId, leathanach);     } };

Ansin tarlaíonn an draíocht chéanna. Stopaimid ár script, cuirimid tús leis arís, níl taskId againn. Déanaimid an cód a fhorghníomhú leis an iarratas taskId, ach ní fhaighimid an taskId a thuilleadh, ach an tuarascáil láithreach. Draíocht! Agus bheadh ​​​​gach rud go breá má bhí sé i gcónaí mar seo. Ach i mí ní bheidh aon sonraí ar chor ar bith. Úsáideach :

  • Leagtar amach beagán teoiric anseo agus anseo .
  • Agus an cód á chur le chéile, beidh cuma rud éigin mar seo ar an dréacht.

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

  • Má thagann duine trasna air seo, fáilte romhat chuig an gceist . Tar éis dóibh an draíocht seo a dheisiú, caillfidh sé a chumhacht agus beidh sé difriúil ar bhealach éigin. Ach faoi láthair (03/21/2023) oibríonn sé díreach mar sin.

GetDividendsForeignEisitheoir

B’fhéidir go gceapfadh duine go bhfuil an modh cosúil leis an gceann roimhe seo agus is féidir leat modh amháin a úsáid nach n-athraíonn tú ach ainm na n-oibríochtaí. Ach ní raibh siad buille faoi thuairim!  Tá an t-ainmniú an-difriúil sna modhanna agus san fhaisnéis a chuirtear ar ais. Agus tosaíonn an comhaireamh leathanaigh ó 0, ansin ó 1. Chun nach gcuirfí mearbhall ort faoi seo go léir, tá sé níos éasca dhá mhodh éagsúla a scríobh. Cé acu is aisteach, mar gheall ar tá loighic na hoibre mar an gcéanna. Scairt mé ar feadh i bhfad nuair a rinne mé iarracht modh amháin a dhéanamh agus bhí níos lú cód ann. Ní bheidh aon samplaí anseo.

GetOperationsByCursor

An ceann is fearr liom den triúr. Cé nach bhfuil an chuid is mó cruinn, ach an chuid is mó leordhóthanach. Déanaimid iarratas ó thús cuntas a chruthú go dtí an dáta uasta is féidir (cuntas a dhúnadh nó an ceann reatha). Faighimid an freagra, tóg an cúrsóir agus ath-iarr chomh fada agus go bhfuil sonraí.  Agus tá an cód níos gonta ná sna samplaí thuas.

const timer = am async => {     seol ar ais Gealltanas nua(réiteach => Am Amuigh (réiteach, am)); }   const getOperationsByCursor = async (sdk, accountId, ó, go, cúrsóir = ”) => {     iarracht {         const reqData = {             accountId,             ó,             go,             teorainn: 1000,             luaigh: sdk.OperationState.OPERATION_STATE_EXECUTED,             withoutCommissions: false,             ganTrádála: bréagach,             ganOvernights: bréagach,             cúrsóir,         };           filleadh ag fanacht sdk.operations.getOperationsByCursor(reqData);     } gabháil (e) {         fan an t-amadóir(60000);         filleadh fan le getOperationsByCursor(sdk, accountId, ó, chuig, cúrsóir = ”);     } };

Tá an dréacht le rith anseo: https://github.com/pskucherov/tcsstat/tree/step3.3 https://github.com/pskucherov/tcsstat/compare/step3.3 Anois táimid réidh le hoibríochtaí glactha a chur leis ár n-iarratas. Má dhéantar é i gceart, ansin ní mór duit tuarascálacha bróicéireachta a fháil le haghaidh an chuntais ar fad a bheith ann. Agus maidir leis na sonraí atá in easnamh, na T-3anna céanna sin, athlódáil ó oibríochtaí. Ach is féidir é seo a dheighilt in alt ar leith. De na príomh nuances a bheidh tú ag teacht ar oibríochtaí gliú agus tuairisc bróicéireachta.

  •  Má fuair tú inniu tuarascáil bróicéireachta agus idirbhearta do na dátaí riachtanacha, é a chur ar fad sa bhunachar sonraí, ansin níl aon fadhbanna. 
  • Beidh fadhbanna agat amárach nuair a gheobhaidh tú an chéad chuid eile de shonraí ón tuarascáil agus oibríochtaí agus nuair a shocraíonn tú iad a shioncronú leis an mbunachar sonraí atá ann cheana féin. 
  • Go leor nuances faoi neamhréir nó athrú aitheantais tar éis próiseála
  • Ansin don mhargadh thar an gcuntar, ní hionann na haitheantais ar chor ar bith.
  •  Chomh maith leis an nuances na n-ionstraimí sioncrónaithe, nach bhfuil ag an am céanna arís, mar gheall ar an peculiarities an API. Ach sin scéal eile.

Cuirimis faisnéis maidir le hoibríochtaí a fháil lenár n-iarratas. Is í an phríomhcheist ná an áit a bpróiseálfar agus a stórálfar na sonraí.

  •  Má dhéanann tú é duit féin, ídeoidh tú na sonraí céanna ó ghléasanna éagsúla. Ansin ní mór duit sonraí a phróiseáil agus a stóráil ar an bhfreastalaí.
  • Má tá go leor sonraí éagsúla á gcaitheamh agat ag go leor úsáideoirí éagsúla, ansin ní mór duit cinneadh a dhéanamh ar a bhfuil níos tábhachtaí: luas na n-úsáideoirí nó an t-iarann ​​​​a shábháil ar do thaobh. An té atá in acmhainn méid gan teorainn crua-earraí a chomhaireamh gach rud ar a fhreastalaí agus déanann sé an-tapa d’úsáideoirí, ag sábháil acmhainní úsáideora, mar shampla ceallraí agus trácht, rud atá an-tábhachtach ar fhóin.

Ina dhiaidh sin, ní hé comhaireamh sa bhrabhsálaí an réiteach is fearr i bprionsabal. Dá bhrí sin, cad nach bhfuil costasach, measaimid é ar ár bhfreastalaí. Fágaimid an chuid eile don chliant. Ba mhaith liom i ndáiríre a ghlacadh agus a ríomh ar an coimisiún ar an bhfreastalaí. Ach anseo tagann an nuance ar a dtugtar “idirghníomhaíocht”. Ligean le rá go bhfuil na mílte oibríochtaí agat agus tógann sé cúig nóiméad chun iad a fháil. Cad a bheidh ag an úsáideoir ag an am seo? Rothlóir? Dul chun cinn? Infa faoi cé mhéad a uaslódáil? Tá sé iontach “feithimh gníomhach” a úsáid nuair a d’fhéadfadh an t-úsáideoir sa phróiseas rud éigin a fheiceáil cheana féin. Seo é an Toradh:Táimid ag forbairt micrisheirbhís ag baint úsáide as Tinkoff Invest API chun tuarascálacha bróicéireachta a uathoibriú agus ríomh a choimisiúnú.

  • Lódáil leathanach
  • Iarrtar gach sonrasc
  • Tar éis sin, iarrtar gach idirbheart le coimisiúin le haghaidh idirbheart forghníomhaithe do gach cuntas. De réir mar a fhaightear sonraí, rindreáiltear sa bhrabhsálaí é.

Ionas nach ndéantar na sonraí sna himeachtaí a scagadh gach uair, tarraingímid ár n-imeacht féin do gach cuntas. Mar seo:

socket.emit( ​​’sdk:getOperationsCommissionResult_’ + accountId, {                 míreanna: data?.items,                 inProgress: Boolean(nextCursor), });

Tá an dréacht le seoladh anseo: https://github.com/pskucherov/tcsstat/tree/step3 https://github.com/pskucherov/tcsstat/compare/step2…step3 Ag bogadh ar aghaidh. Tá sé iontach go bhfuil an líne seo léite agat! 

Ríomh agus aschur faisnéise inspéise

Ag brath ar a bhfuil gá acu cén t-eolas. Dá bhrí sin, inseoidh mé duit láithreach na príomh-nuances a bheidh tú ag teacht.

Ag obair le praghsanna 

Tá a fhios ag gach duine a oibríonn le airgeadas nár cheart idirbhearta airgid a dhéanamh ach le slánuimhreacha. Mar gheall ar mhíchruinneas luachanna tar éis an phointe deachúil agus an earráid charnach le líon mór oibríochtaí. Sin é an fáth go gcuirtear na praghsanna go léir i láthair san fhormáid MoneyValue seo a leanasTáimid ag forbairt micrisheirbhís ag baint úsáide as Tinkoff Invest API chun tuarascálacha bróicéireachta a uathoibriú agus ríomh a choimisiúnú.

Gort cineál Cur síos
airgeadra teaghrán Teaghrán cód airgeadra ISO
aonaid int64 Slánuimhir chuid den tsuim is féidir, a bheith ina uimhir dhiúltach
nana int32 Cuid codánach den mhéid is féidir, a bheith ina uimhir dhiúltach

Déanaimid iad a phróiseáil ar leithligh, ansin iad a thabhairt chuig an luach praghais:

luachan.units + luachan.nano / 1e9

An costas a bhaineann le conarthaí todhchaíochtaí

Cuirtear praghas na todhchaíochtaí i láthair i bpointí, nuair a bhíonn todhchaí airgeadra agat, ní mór duit an ráta a fhios. Agus ar ndóigh an praghas i bpointí agus an chéim praghais. Nuair a bheidh tú ag ríomh an brabús ó idirbhearta, is féidir é seo shoot, mar gheall ar. má ríomhann tú an méid iomlán tríd an bpraghas a iolrú faoin gcainníocht. Anseo ní mór duit a bheith cúramach. Chun anois, beidh orainn a fheiceáil conas a théann sé. Baineann sé seo le todhchaíochtaí airgeadra, in áiteanna eile tá gach rud ceart go leor leis seo.Táimid ag forbairt micrisheirbhís ag baint úsáide as Tinkoff Invest API chun tuarascálacha bróicéireachta a uathoibriú agus ríomh a choimisiúnú. Táimid ag forbairt micrisheirbhís ag baint úsáide as Tinkoff Invest API chun tuarascálacha bróicéireachta a uathoibriú agus ríomh a choimisiúnú.

Margadh thar an gcuntar

Tá go leor peculiarities ag an margadh seo, mar sin déanaimis staidéar a dhéanamh ar oibríochtaí ar leithligh.Nuair a thosaíonn tú ar oibríochtaí sioncrónaithe, tiocfaidh sé amach go gcaithfidh tú figi / ticker a thabhairt chuig an bhfoirm chéanna chun an ionstraim a mheaitseáil i gceart. Nuair a thosaíonn tú ag sioncrónú seo leis an tuarascáil bróicéireachta, beidh sé dul amach go bhfuil an tradeID an idirbhirt céanna litreacha ag tús na n-idirbheart agus nach bhfuil siad sa tuarascáil bróicéireachta. Mar sin, ní féidir iad a chur i gcomparáid … ahem-ahem … i gcomparáid! Mheaitseáil mé an t-am trádála, ticeála agus meaitseáil go bhfuil tradeId amháin i gceann eile. Ceart, níl a fhios agam. An té a bhuaileann leis seo agus a bhfuil cúram air, tar chuig an gceist nó cuir tús le ceann nua.Táimid ag forbairt micrisheirbhís ag baint úsáide as Tinkoff Invest API chun tuarascálacha bróicéireachta a uathoibriú agus ríomh a choimisiúnú.

Oibríochtaí matamaitice ar uirlisí

Tá sé dodhéanta, gan breathnú, oibríochtaí matamaitice a dhéanamh leis an liosta iomlán. Chun nach gcuirfear te go bog, ní dhéanaimid seiceáil i gcónaí ar an airgeadra agus ar an bpróiseas ach amháin má táimid cinnte go bhfuil an t-airgeadra ag teacht, agus déantar na pointí a thiontú go dtí an t-airgeadra atá ag teastáil. Agus eolas againn faoi oibriú le huimhreacha bainc, ríomhfaimid an coimisiún a chaitear ar gach ceann de na cuntais. Cosúil leis seo: https://github.com/pskucherov/tcsstat/tree/step4 https://github.com/pskucherov/tcsstat/compare/step3…step4Táimid ag forbairt micrisheirbhís ag baint úsáide as Tinkoff Invest API chun tuarascálacha bróicéireachta a uathoibriú agus ríomh a choimisiúnú.    

Tá microservice réidh!

https://github.com/pskucherov/tcsstat Mar obair bhaile, is féidir leat a sheiceáil má oibríonn an tseirbhís le nasc mall, nuair a bhristear naisc, nuair a bhíonn an Idirlíon dícheangailte, nuair a bhíonn earráidí nó teorainneacha éagtha ar thaobh an bhróicéir. 

Conclúidí agus pleananna don todhchaí

  • D’fhoghlaimíomar faoi oibríochtaí bunúsacha agus oibriú leis an Invest API
  • Am caite ~ 10 n-uaire
  • Leibhéal deacrachta ~ sóisearach+ / meán íseal 

Má leanann tú leis an micriseirbhís a bheachtú, seans go mbeidh rud éigin mar seo agat

https://opexbot.info

  Is é seo mo fhorbairt, dóibh siúd atá ró-leisciúil a thuiscint, a reáchtáil agus a chomhaireamh ar a gcuid féin. Tá sé beartaithe agam anailísíocht a chur leis ansin ar iarratas ó úsáideoirí. Má thaitin an t-alt leat, liostáil le mo chainéal teileagram . Táimid ag forbairt micrisheirbhís ag baint úsáide as Tinkoff Invest API chun tuarascálacha bróicéireachta a uathoibriú agus ríomh a choimisiúnú.

Pavel
Rate author
Add a comment

  1. Isakiiev

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

    Reply