Tha sinn a’ leasachadh meanbh-sheirbheis a’ cleachdadh an Tinkoff Invest API gus obrachadh gu fèin-ghluasadach le aithisgean brisidh agus obrachadh a-mach choimiseanan.

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

B’ iad na brosnachaidhean air cùl leasachadh na seirbheis staitistig airson Tinkoff Investments:

Dè a thèid a dheasbad?

  • A-mhàin am pàirt gnìomhaichte mu leasachadh.
  • Fìor eòlas agus eòlas, a tha glè chudromach ann a bhith ag obair le ionnstramaidean ionmhasail.
  • Sealladh farsaing air cùisean ri obrachadh

Mar sin, tha mi airson staitistig malairt obrachadh a-mach agus a dhèanamh ann an dòigh fhreagarrach. 

A’ leasachadh seirbheis staitistig ceum air cheum: 

  1. Ceangal ri Tinkoff Invest API
  2. A’ tarraing dàta bho Tinkoff Invest API ann am brobhsair
  3. A’ faighinn aithisgean brisidh agus gnothaichean
  4. Obraich a-mach agus toradh fiosrachadh inntinneach
  5. Co-dhùnaidhean agus planaichean airson an ama ri teachd

Ceangal ri Tinkoff Invest API

Gus ceangal ris an API, faodaidh tu sdk sam bith a thoirt bho na sgrìobhainnean https://github.com/Tinkoff/investAPI#sdk . No pasgan npm ` tinkoff-sdk-grpc-js` . Tha e cudromach gun tèid am pasgan ùrachadh chun dreach as ùire leis an luchd-leasachaidh. Stàladh

npm agus tinkoff-sdk-grpc-js

A’ sgrùdadh

const { createSdk } = feum (‘tinkoff-sdk-grpc-js’);   // Token a gheibhear mar seo  const TOKEN = ‘YOURAPI’;   // Ainm an tagraidh leis am faighear thu ann an logaichean TCS. const appName = ‘tcsstat’;   const sdk = createSdk(TOKEN, appName); (async () => {     console.log (feitheamh sdk.users.getAccounts()); })();

Toradh: thèid liosta de na cunntasan agad a thaisbeanadh sa chonsail. Mar eisimpleir, dèanamaid sgrùdadh air na nuances:Tha sinn a’ leasachadh meanbh-sheirbheis a’ cleachdadh an Tinkoff Invest API gus obrachadh gu fèin-ghluasadach le aithisgean brisidh agus obrachadh a-mach choimiseanan.

  • Anns an liosta chunntasan tha “banca tasgaidh”, leis nach urrainn dhut obrachadh leis an API
  • Thoir an aire gu bheil na raointean a’ tighinn ann an camelCase, agus anns na sgrìobhainnean tha na raointean sin air an taisbeanadh ann an under_score. 
  • Bidh e mar seo anns a h-uile àite, agus mar sin chan urrainn dhut dìreach raon a ghabhail agus a chopaigeadh bho na sgrìobhainnean.

Feumail:

  • Gheibh thu an còd seo ann am meur a’ phròiseict

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

A’ tarraing dàta bho Tinkoff Invest API ann am brobhsair

Ghabh mi next.js agus socket.io. Chan e moladh làidir a tha seo, tagh a rèir do thoil fhèin. 

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

Thèid sinn air adhart sa bhad chun cheum càirdeas an ath + socaid + tasgadh, agus faic an earrann Feumail den cheum seo airson a h-uile mion-fhiosrachadh.  Bheir mi cunntas air a’ mhion-fhiosrachadh: 

  • Air taobh nodejs (frithealaiche), tha faidhle duilleagan/api/investapi.js. Seo far am bi sinn a’ cruthachadh an t-seirbheisiche socket.io agus a’ ceangal ri investapi.
  • Air taobh a’ bhrabhsair (neach-dèiligidh), bidh sinn a’ ceangal ris an t-seirbheisiche tro socaid agus ag iarraidh dàta cunntais bhon broker. 
  • Bidh sinn a’ faighinn dàta bhon broker air an fhrithealaiche, agus an uairsin ga chuir chun neach-dèiligidh. Nuair a gheibhear iad air an neach-dèiligidh, tha iad air an taisbeanadh sa bhrobhsair. 

Toradh:  ann an consol a’ bhrobhsair chì sinn fiosrachadh mu chunntasan. Is e sin, anns a’ cheum mu dheireadh, chunnaic sinn fiosrachadh mu chunntasan ann an consol an fhrithealaiche (nodejs), anns a’ cheum làithreach, ghluais sinn am fiosrachadh seo chun neach-dèiligidh (brabhsair).

Tha sinn a’ leasachadh meanbh-sheirbheis a’ cleachdadh an Tinkoff Invest API gus obrachadh gu fèin-ghluasadach le aithisgean brisidh agus obrachadh a-mach choimiseanan.

A-nis dèanamaid e gus an urrainn dhut cunntas a thaghadh bhon bhrobhsair, agus mura h-eil comharra ann, thèid mearachd a chuir chun consol. Tha an obair sìmplidh agus gun dad ùr, agus mar sin cha bhith mi a’ toirt seachad ach ceanglaichean gu geallaidhean

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

Feumail:

  • Tha mìneachadh mionaideach air mar a nì thu caraidean an ath rud agus socaid an seo
  • Còd càirdeas an ath + socaid + tasgadh:

https://github.com/pskucherov/tcsstat/commit/a443a4ac1bb4f0aa898f638128755fe7391ee381 Dhaibhsan a tha gu h-àrd duilich, bidh sinn an uairsin aig an ìre seo agus a ‘dèiligeadh ris a’ chòd. Ma tha ceistean agad – faighnich. https://github.com/pskucherov/tcsstat/tree/step2 https://github.com/pskucherov/tcsstat/compare/step1…step2

A’ faighinn aithisgean brisidh agus gnothaichean

Tha trì dòighean ann airson aithisgean brisidh agus gnothaichean fhaighinn

  1. Aithisg GetBroker
  2. GetDividendsForeignIssuer
  3. GetOperationsByCursor

Bhon fhìor thoiseach tha e cudromach fios a bhith agad: 

  • Tha an aithisg brisidh air a chruthachadh ann am modh T-3, i.e. tha ciùird air an taisbeanadh an sin às deidh an cur gu bàs. 
  • Mar sin, ma dh’iarras tu an aithisg seo airson an dà latha a dh’ fhalbh, bidh i deiseil ann an trì latha. 
  • Gus gnothaichean fhaighinn airson na làithean mu dheireadh, bidh sinn a’ cleachdadh an dòigh airson gnothaichean fhaighinn, ach cuimhnich gum faodadh an id agus an t-susbaint aca atharrachadh às deidh an aithisg brisidh a chruthachadh.

Aithisg GetBroker

Gus aithisg brisidh fhaighinn, feumaidh tu id a’ chunntais a ghabhail, ceann-latha tòiseachaidh agus ceann-latha crìochnachaidh na h-aithisg, ach gun a bhith nas fhaide na 31 latha. Bidh sinn a’ cur iarrtas airson aithisg a ghineadh chun API ann a ghineadh _broker_report_request , faigh taskId mar fhreagairt. Às deidh sin, a’ cleachdadh an taskId seo, gheibh sinn dàta bho get _broker_report_response.

Mar sin tha na sgrìobhainnean ag ràdh, gu fìrinneach tha nuances ann. Cum sùil air do làmhan:
  • Feumaidh tu an TaskID a shàbhaladh gu bràth dìreach airson na cinn-latha sin. 
  • Leis ma chailleas tu e, an uairsin airson na cinn-latha a chaidh iarraidh thig an aithisg an toiseach mar fhreagairt don iarrtas ginealach, 
  • Agus an uairsin cha tig e idir.

[/ spoiler] Tòisichidh sinn a’ sgrìobhadh còd

Dòigh airson an ceann-latha fhaighinn, a ‘toirt aire don toirt air falbh bhon cheann-latha làithreach

const getDateSubDay = (subDay = 5, start = true) => {     const date = ceann-latha ùr();     date.setUTCDate(date.getUTCDate() – subDay);       ma tha (tòiseachadh) {         date.setUTCHUurs(0, 0, 0, 0);     } eile {         date.setUTCHUurs(23, 59, 59, 999);     }       ceann-latha tilleadh; };

Dèan aithris air iarrtas ginealach 

const brokerReport = feitheamh (sdk.operations.getBrokerReport)({         GenerationBrokerReportRequest: {             accountId,             bho,             gu,         }, });

Toradh:

  • Mar thoradh air a’ chiad choileanadh den àithne, gheibh sinn an taskId. 
  • Bidh an aithisg a’ tòiseachadh a bhith air a chruthachadh air taobh a’ bhròcair. Nuair a bhios e deiseil chan eil fios againn, bidh sinn a’ feitheamh agus a’ tarraing a’ ghnìomh bho àm gu àm a’ feitheamh ris an aithisg.
  • Carson? Oir mura h-eil an aithisg deiseil, bidh e a’ tilgeil mearachd. Mura h-eil an aithisg deiseil air taobh a’ bhròcair, is e mearachd a tha seo sa chòd agad. Pròiseas thu: 30058|INVALID_ARGUMENT| cha deach an obair a chrìochnachadh fhathast, feuch ris a-rithist nas anmoiche

Tha an còd airson feitheamh agus a ‘faighinn aithisg a’ coimhead rudeigin mar seo.

const timer = ùine async => {     till Gealladh ùr(resolution => setTimeout (fuasgladh, ùine)); }   const getBrokerResponseByTaskId = async (taskId, page = 0) => {     feuch {         till await (sdk.operations.getBrokerReport)({             getBrokerReportRequest: {                 taskId,                 duilleag,             },         });     } glacadh (e) {         console.log (‘feitheamh’, e);         feitheamh timer (10000);         till air ais feitheamh getBrokerResponseByTaskId(taskId, duilleag);     } };

An uairsin bidh an aon draoidheachd a ‘tachairt. Bidh sinn a’ stad ar sgriobt, ga thòiseachadh a-rithist, chan eil taskId againn. Bidh sinn a’ cur an gnìomh a’ chòd leis an iarrtas taskId, ach chan fhaigh sinn an taskId tuilleadh, ach an aithisg sa bhad. Draoidheachd! Agus bhiodh a h-uile dad gu math nam biodh e an-còmhnaidh mar seo. Ach ann am mìos cha bhi dàta idir ann. Feumail :

  • Tha beagan teòiridh air a mhìneachadh an seo agus an seo .
  • A’ cur a’ chòd ri chèile, seallaidh an dreach rudeigin mar seo.

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

  • Ma thig cuideigin tarsainn air an seo, cuir fàilte air a’ chùis . Às deidh dhaibh an draoidheachd seo a chàradh, caillidh e a chumhachd agus bidh e dòigh air choireigin eadar-dhealaichte. Ach aig an àm seo (03/21/2023) tha e ag obair dìreach mar sin.

GetDividendsForeignIssuer

Is dòcha gu bheil cuideigin den bheachd gu bheil an dòigh coltach ris an fhear roimhe agus faodaidh tu aon dòigh a chleachdadh anns nach atharraich thu ach ainm na h-obrach. Ach cha do smaoinich iad!  Tha an t-ainmeachadh gu math eadar-dhealaichte an dà chuid anns na dòighean agus anns an fhiosrachadh a chaidh a thilleadh. Agus tha an àireamh de dhuilleagan a ‘tòiseachadh bho 0, an uairsin bho 1. Gus nach tèid thu troimh-chèile anns a h-uile càil seo, tha e nas fhasa dà dhòigh eadar-dhealaichte a sgrìobhadh. A tha neònach, oir tha loidsig na h-obrach mar an ceudna. Rinn mi spatadh airson ùine mhòr nuair a dh’fheuch mi ri aon dòigh a dhèanamh agus bha nas lugha de chòd ann. Cha bhi eisimpleirean an seo.

GetOperationsByCursor

Am fear as fheàrr leam de na trì. Ged nach e am fear as ceart, ach am fear as iomchaidh. Bidh sinn a’ dèanamh iarrtas bho thoiseach cruthachadh cunntas chun cheann-latha as àirde a tha comasach (dùnadh cunntas no an tè làithreach). Gheibh sinn am freagairt, gabh an cursair agus ath-iarraidh fhad ‘s a tha dàta ann.  Agus tha an còd nas mionaidiche na anns na h-eisimpleirean gu h-àrd.

const timer = ùine async => {     till Gealladh ùr(resolution => setTimeout (fuasgladh, ùine)); }   const getOperationsByCursor = async (sdk, accountId, bho, gu, cursor = ”) => {     feuch {         const reqData = {             accountId,             bho,             gu,             crìoch: 1000,             stàite: sdk.OperationState.OPERATION_STATE_EXECUTED,             withoutCommissions: false,             gun Cheàird: breugach,             gunOvernights: false,             cursor,         };           tilleadh feitheamh sdk.operations.getOperationsByCursor(reqData);     } glacadh (e) {         feitheamh timer (60000);         till air ais feitheamh getOperationsByCursor(sdk, accountId, bho, gu, cursor = ”);     } };

Tha an dreach ri ruith an seo: https://github.com/pskucherov/tcsstat/tree/step3.3 https://github.com/pskucherov/tcsstat/compare/step3.3 A-nis tha sinn deiseil airson gnìomhachd faighinn a chuir ris an tagradh againn. Ma thèid a dhèanamh ceart, feumaidh tu aithrisean brisidh fhaighinn airson an cunntas gu lèir a bhith ann. Agus airson an dàta a tha a dhìth, na h-aon T-3an sin, ath-luchdachadh bho ghnìomhachd. Ach faodar seo a roinn ann an artaigil air leth. De na prìomh nuances a thig thu tarsainn air obair glaodh agus aithisg brisidh.

  •  Ma fhuair thu an-diugh aithisg brisidh agus gnothaichean airson na cinn-latha a tha a dhìth, cuir a h-uile càil san stòr-dàta, chan eil duilgheadasan ann. 
  • Bidh duilgheadasan agad a-màireach nuair a gheibh thu an ath chuibhreann de dhàta bhon aithisg agus gnìomhachd agus co-dhùin thu an sioncronachadh leis an stòr-dàta a th’ ann mar-thà. 
  • Mòran nuances mu dheidhinn mì-chothromachadh no atharrachadh id às deidh giollachd
  • An uairsin airson a’ mhargaidh OTC, chan eil na h-ìomhaighean a’ freagairt idir.
  •  A bharrachd air an nuances de sioncronaich ionnstramaidean, a tha a-rithist nach eil aig an aon àm, air sgàth cho sònraichte sa API. Ach sin sgeulachd eile.

Nach cuir sinn fiosrachadh fhaighinn mu ghnìomhachd ris an tagradh againn. Is e a’ phrìomh cheist càite an tèid an dàta a phròiseasadh agus a stòradh.

  •  Ma nì thu e dhut fhèin, ithidh tu an aon dàta bho dhiofar innealan. An uairsin feumaidh tu dàta a phròiseasadh agus a stòradh air an fhrithealaiche.
  • Ma tha tòrr dàta eadar-dhealaichte air a chaitheamh le mòran de luchd-cleachdaidh eadar-dhealaichte, feumaidh tu co-dhùnadh dè a tha nas cudromaiche: astar an luchd-cleachdaidh no sàbhaladh iarann ​​​​air do thaobh. Ge bith cò as urrainn pàigheadh ​​​​gun chrìoch de bhathar-cruaidh, bidh e a’ cunntadh a h-uile càil air an t-seirbheisiche aige agus ga dhèanamh fìor luath dha luchd-cleachdaidh, a ’sàbhaladh goireasan luchd-cleachdaidh, leithid bataraidh agus trafaic, a tha glè chudromach air fònaichean.

Ann an tionndadh, chan e cunntadh sa bhrobhsair am fuasgladh as fheàrr ann am prionnsapal. Mar sin, an rud nach eil daor, bidh sinn ga mheas air ar frithealaiche. Bidh sinn a ‘fàgail an còrr don neach-dèiligidh. Tha mi dha-rìribh ag iarraidh a ghabhail agus obrachadh a-mach an coimisean air an fhrithealaiche. Ach an seo thig an nuance ris an canar “eadar-ghnìomhachd”. Canaidh sinn gu bheil mìltean de ghnìomhachdan agad agus bheir e còig mionaidean airson am faighinn. Dè a bhios aig an neach-cleachdaidh aig an àm seo? Spinneadair? Adhartas? Infa dè an ìre a chaidh a luchdachadh suas? Tha e air leth freagarrach “feitheimh gnìomhach” a chleachdadh nuair a dh’ fhaodadh an neach-cleachdaidh sa phròiseas rudeigin fhaicinn mar-thà. Seo an Toradh:Tha sinn a’ leasachadh meanbh-sheirbheis a’ cleachdadh an Tinkoff Invest API gus obrachadh gu fèin-ghluasadach le aithisgean brisidh agus obrachadh a-mach choimiseanan.

  • Duilleag a’ luchdachadh
  • Thathas ag iarraidh a h-uile fàirdeal
  • Às deidh sin, thathar ag iarraidh a h-uile gnothach le coimiseanan airson gnothaichean a chaidh a chuir gu bàs airson a h-uile cunntas. Mar a gheibhear dàta, tha e air a thoirt seachad sa bhrobhsair.

Gus nach tèid an dàta anns na tachartasan a shìoladh gach turas, bidh sinn a’ tarraing ar tachartas fhèin airson gach cunntas. Mar seo:

socket.emit (‘sdk: getOperationsCommissionResult_’ + accountId, {                 nithean: data?.items,                 inProgress: Boolean(an ath-Cursor), });

Tha an dreachd ri chur air bhog an seo: https://github.com/pskucherov/tcsstat/tree/step3 https://github.com/pskucherov/tcsstat/compare/step2…step3 A’ gluasad air adhart. Tha e math gun do leugh thu an loidhne seo! 

Obraich a-mach agus toradh fiosrachadh inntinneach

Tha e an urra ri cò a dh’ fheumas am fiosrachadh. Mar sin, innsidh mi dhut sa bhad na prìomh nuances a choinnicheas tu.

Ag obair le prìsean 

Tha fios aig a h-uile duine a tha ag obair le ionmhas nach bu chòir gnothaichean airgid a dhèanamh ach le àireamhan slàn. Air sgàth neo-mhearachdachd luachan às deidh a ‘phuing deicheach agus a’ mhearachd tionalach le àireamh mhòr de obrachaidhean. Sin as coireach gu bheil na prìsean uile air an taisbeanadh anns a’ chruth MoneyValue a leanasTha sinn a’ leasachadh meanbh-sheirbheis a’ cleachdadh an Tinkoff Invest API gus obrachadh gu fèin-ghluasadach le aithisgean brisidh agus obrachadh a-mach choimiseanan.

achadhseòrsaTuairisgeul
airgead-crìchesreangString còd airgead ISO
aonadaneadar 64Integer phàirt den t-suim, a bhith àireamh àicheil
nanoann32Pàirt bloighteach den t-suim, faodaidh e bhith àireamh àicheil

Bidh sinn gan giullachd air leth, agus an uairsin gan toirt gu luach a’ phrìs:

luachan.units + quotation.nano / 1e9

Cosgais cùmhnantan ri teachd

Tha prìs amannan ri teachd air a thaisbeanadh ann am puingean, nuair a bhios airgead san àm ri teachd agad, feumaidh fios a bhith agad air an ìre. Agus gu dearbh a’ phrìs ann am puingean agus an ceum prìse. Nuair a bhios tu a ‘cunntadh a’ phrothaid bho ghnothaichean, faodaidh seo losgadh, oir. ma nì thu obrachadh a-mach an t-suim iomlan le bhith ag iomadachadh a’ phrìs leis an àireamh. An seo feumaidh tu a bhith faiceallach. Airson a-nis, chì sinn mar a thèid e. Tha seo a’ buntainn ri amannan ri teachd airgead, ann an àiteachan eile tha a h-uile dad ceart gu leòr le seo.Tha sinn a’ leasachadh meanbh-sheirbheis a’ cleachdadh an Tinkoff Invest API gus obrachadh gu fèin-ghluasadach le aithisgean brisidh agus obrachadh a-mach choimiseanan.Tha sinn a’ leasachadh meanbh-sheirbheis a’ cleachdadh an Tinkoff Invest API gus obrachadh gu fèin-ghluasadach le aithisgean brisidh agus obrachadh a-mach choimiseanan.

OTC mhargaidh

Tha tòrr rudan sònraichte aig a’ mhargaidh seo, mar sin dèanamaid sgrùdadh air gnìomhachd air leth.Nuair a thòisicheas tu air gnìomhachd sioncronaich, tionndaidhidh e a-mach gum feum thu figear / ticker a thoirt chun aon chruth gus an ionnstramaid a mhaidseadh gu ceart. Nuair a thòisicheas tu air seo a shioncronachadh leis an aithisg brisidh, tionndaidhidh e a-mach gu bheil litrichean aig tradeID an aon ghnothach aig toiseach nan gnothaichean agus chan eil iad san aithisg brisidh. Mar sin, chan urrainnear an coimeas … ahem-ahem … an coimeas! Rinn mi maidseadh ris an ùine malairt, ticker agus maidseadh gu bheil aon tradeId ann am fear eile. Ceart, chan eil fhios agam. Ge bith cò a thachras air seo agus air a bheil cùram mu dheidhinn, thig chun na cùise no tòisich fear ùr.Tha sinn a’ leasachadh meanbh-sheirbheis a’ cleachdadh an Tinkoff Invest API gus obrachadh gu fèin-ghluasadach le aithisgean brisidh agus obrachadh a-mach choimiseanan.

Gnìomhan matamataigeach air innealan

Tha e do-dhèanta, gun a bhith a ‘coimhead, obair matamataigeach a dhèanamh leis an liosta gu lèir. Gus nach cuir sinn blàth gu bog, bidh sinn an-còmhnaidh a ’sgrùdadh an airgead-crìche agus a’ phròiseas a-mhàin ma tha sinn cinnteach gu bheil an t-airgead a ’maidseadh, agus gu bheil na puingean air an tionndadh chun airgead-crìche a tha thu ag iarraidh. Armaichte le eòlas mu bhith ag obair le àireamhan banca, nì sinn cunntas air a’ choimisean a chaidh a chosg air gach aon de na cunntasan. Mar seo: https://github.com/pskucherov/tcsstat/tree/step4 https://github.com/pskucherov/tcsstat/compare/step3…step4Tha sinn a’ leasachadh meanbh-sheirbheis a’ cleachdadh an Tinkoff Invest API gus obrachadh gu fèin-ghluasadach le aithisgean brisidh agus obrachadh a-mach choimiseanan.   

Tha microservice deiseil!

https://github.com/pskucherov/tcsstat Mar obair-dachaigh, faodaidh tu dèanamh cinnteach a bheil an t-seirbheis ag obair le ceangal slaodach, nuair a thèid ceanglaichean a bhriseadh, nuair a tha an eadar-lìn air a dhì-cheangal, nuair a tha mearachdan no crìochan air tighinn gu crìch air a’ phàirt den bhrocair. 

Co-dhùnaidhean agus planaichean airson an ama ri teachd

  • Ionnsaich mu ghnìomhachd bunaiteach agus ag obair leis an Invest API
  • Ùine air a chaitheamh ~ 10 uairean
  • Ìre duilgheadas ~ òigridh + / meadhan ìosal 

Ma chumas tu a’ leasachadh a’ mhicro-sheirbheis, is dòcha gum bi rudeigin mar seo agad

https://opexbot.info

  Is e seo mo leasachadh, dhaibhsan a tha ro leisg airson a thuigsinn, a ruith agus a chunntadh leotha fhèin. Tha mi an dùil anailisean a chuir ris an sin air iarrtas luchd-cleachdaidh. Nam bu toil leat an artaigil, an uairsin fo-sgrìobh don t-sianal teileagram agam . Tha sinn a’ leasachadh meanbh-sheirbheis a’ cleachdadh an Tinkoff Invest API gus obrachadh gu fèin-ghluasadach le aithisgean brisidh agus obrachadh a-mach choimiseanan.

Pavel
Rate author
Add a comment

  1. Isakiiev

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

    Reply