Em mîkroxizmetek bi karanîna API-ya Tinkoff Invest pêşve dibin da ku xebata bi raporên brokerage û hesabkirina komîsyonên otomatîkî bikin.

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

Pêşkêşkerên li pişt pêşkeftina karûbarê îstatîstîkî ji bo Veberhênanên Tinkoff ev bûn:

Dê çi were nîqaş kirin?

  • Tenê beşa serîlêdanê di derbarê pêşveçûnê de.
  • Zanîn û ezmûna rastîn, ku di xebata bi amûrên darayî de pir girîng in.
  • Pêşniyara mijarên ku li ser dixebitin

Ji ber vê yekê, ez dixwazim statîstîkên bazirganiyê hesab bikim û bi rengek hêsan bikim. 

Pêşxistina karûbarek îstatîstîkî gav bi gav: 

  1. Girêdana bi Tinkoff Invest API
  2. Daneyên ji Tinkoff Invest API-ê di gerokek de kişandin
  3. Wergirtina rapor û danûstandinên brokerage
  4. Hesabkirin û derketina agahdariya berjewendiyê
  5. Encam û plansaziyên pêşerojê

Girêdana bi Tinkoff Invest API

Ji bo girêdana bi API-yê, hûn dikarin her sdk-ê ji belgeyê bigirin https://github.com/Tinkoff/investAPI#sdk . An jî pakêta npm ` tinkoff-sdk-grpc-js` . Girîng e ku pakêt ji hêla pêşdebiran ve bi guhertoya herî dawî were nûve kirin. Lêkirin

npm ez tinkoff-sdk-grpc-js

Kontrolkirin

const {createSdk} = pêwîst (‘tinkoff-sdk-grpc-js’);   // Tokena ku bi vî rengî  dikare were bidestxistin TOKEN = ‘YOURAPI’;   // Navê serîlêdana ku hûn dikarin di têketinên TCS de werin dîtin. const appName = ‘tcsstat’;   const sdk = createSdk(TOKEN, appName); (async () => {     consol.log(li benda sdk.users.getAccounts()); })();

Encam: navnîşek hesabên we dê di konsolê de were xuyang kirin. Mînakî, em hûrguliyan analîz bikin:Em mîkroxizmetek bi karanîna API-ya Tinkoff Invest pêşve dibin da ku xebata bi raporên brokerage û hesabkirina komîsyonên otomatîkî bikin.

  • Di navnîşa hesaban de “banqeya veberhênanê” heye, ku hûn nekarin bi karanîna API-yê pê re bixebitin
  • Ji kerema xwe not bikin ku zevî di camelCase de têne, dema ku di belgeyê de ev zevî di binê_score de têne pêşkêş kirin. 
  • Dê li her derê bi vî rengî be, ji ber vê yekê hûn nekarin tenê zeviyek ji belgeyê bigirin û kopî bikin.

Bikartê:

  • Hûn dikarin vê kodê di şaxê projeyê de bibînin

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

Daneyên ji Tinkoff Invest API-ê di gerokek de kişandin

Min next.js û socket.io girt. Ev ne pêşniyarek bihêz e, li gorî daxwaza xwe hilbijêrin. 

npx create-next-app@ npm herî dawî ez socket.io socket.io-client

Em tavilê diçin qonaxa hevaltiyê next+socket+investapi, û ji bo hemî hûrguliyan  beşa Kêrhatî ya vê gavê dibînin. Ez ê hûrguliyan diyar bikim: 

  • Li aliyê nodejs (server) pelek rûpelan/api/investapi.js heye. Li vir em servera socket.io diafirînin û bi investapi-yê ve girêdidin.
  • Li aliyê gerokê (mişterî), em bi riya soketek bi serverê ve girêdidin û daneyên hesabê ji brokerê dixwazin. 
  • Em daneyan ji brokerê li ser serverê distînin, dûv re wê ji xerîdar re dişînin. Dema ku ew li ser xerîdar têne wergirtin, ew di gerokê de têne xuyang kirin. 

Encam:  Di konsola gerokê de em dikarin agahdariya li ser hesaban bibînin. Ango di gava paşîn de me di konsolê serverê (nodejs) de di derheqê hesabên de agahdarî dît, di gava heyî de me ev agahdarî veguhezand xerîdar (geroker).

Em mîkroxizmetek bi karanîna API-ya Tinkoff Invest pêşve dibin da ku xebata bi raporên brokerage û hesabkirina komîsyonên otomatîkî bikin.

Naha em wiya bikin ku hûn dikarin hesabek ji gerokê hilbijêrin, û heke nîşanek tune be, wê hingê xeletiyek ji konsolê re tê şandin. Kar hêsan e û ne tiştek nû ye, ji ber vê yekê ez tenê lînkan didim peymanan

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

Bikartê:

  • Meriv çawa heval û soketê çêbike li vir bi hûrgulî tête diyar kirin . 
  • Koda hevaltiyê next+socket+investapi:

Htt _ Ger pirsên we hebin – bipirsin. https://github.com/pskucherov/tcsstat/tree/step2 https://github.com/pskucherov/tcsstat/compare/step1…step2

Wergirtina rapor û danûstandinên brokerage

Sê awayên wergirtina rapor û danûstandinên brokerage hene

  1. GetBrokerReport
  2. GetDividendsForeignIssuer
  3. GetOperationsByCursor

Ji destpêkê ve girîng e ku hûn zanibin: 

  • Rapora brokerage di moda T-3 de tête çêkirin, ango. esnaf piştî pêkanîna wan a rastîn li wir têne xuyang kirin. 
  • Li gorî vê yekê, ger hûn van du rojên dawîn vê raporê bixwazin, dê di nav sê rojan de amade bibe. 
  • Ji bo ku rojên dawîn danûstendinan bikin, em rêbaza wergirtina operasyonan bikar tînin, lê ji bîr mekin ku dibe ku nasname û naveroka wan piştî damezrandina raporta brokerkirinê biguhere.

GetBrokerReport

Ji bo ku hûn raporek brokerajê bistînin, hûn hewce ne ku nasnameya hesabê, tarîxa destpêkê û roja dawiya raporê bigirin, lê ji 31 ​​rojan zêdetir nebe. Em daxwazek dişînin ku raporek ji API-ê re çêbike di hilberîna _broker_report_request de , di bersivê de karekId bistînin. Piştî wê, bi karanîna vê taskId-ê, em daneyan ji get _broker_report_response digirin.

Ji ber vê yekê belge dibêje, di rastiyê de nuans hene. Destên xwe temaşe bikin:
  • Hûn hewce ne ku TaskID-a herheyî tam ji bo van tarîxan hilînin. 
  • Ji ber ku heke hûn wiya winda bikin, wê hingê ji bo tarîxên daxwazkirî dê rapor pêşî li bersiva daxwaza nifşê were, 
  • Û paşê ew ê qet nebe.

[/ spoiler] Ka em dest bi nivîsandina kodê bikin

Rêbaza wergirtina tarîxê, ku ji tarîxa heyî tê hesibandin

const getDateSubDay = (subDay = 5, destpêk = rast) => {     const date = new Date();     date.setUTCDate(date.getUTCDate() – subDay);       ger (destpêk) {         date.setUTCHours(0, 0, 0, 0);     } else {         date.setUTCHours(23, 59, 59, 999);     }       tarîxa vegera; };

Daxwaza hilberîna raporê 

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

Netîce:

  • Di encama pêkanîna yekem a fermanê de, em taskId distînin. 
  • Rapor ji aliyê broker ve dest pê dike ku were çêkirin. Dema ku ew amade ye nenas e, em li bendê ne û bi awayekî periyodîk li hêviya raporê tasId dikişînin.
  • Çima? Ji ber ku eger rapor ne amade be, xeletiyek derdixe. Ger rapor ji alîyê broker ve ne amade ye, wê hingê ev di koda we de xeletiyek e. Ji kerema xwe pêvajo bike: 30058|INVALID_ARGUMENT|xebat hîn temam nebûye, ji kerema xwe paşê dîsa biceribîne

Koda ji bo li bendê û wergirtina raporê tiştek bi vî rengî xuya dike.

const timer = async time => {     vegere soza nû(çareserkirin => setTimeout(çareserkirin, dem)); }   const getBrokerResponseByTaskId = async (taskId, rûpel = 0) => {     ceribîne {         vegere li benda (sdk.operations.getBrokerReport)({             getBrokerReportRequest: {                 taskId,                 rûpel,             },         });     } catch (e) {         console.log(‘sekine’, e);         demjimêra bendê (10000);         vegere li benda getBrokerResponseByTaskId(taskId, rûpel);     } };

Paşê heman sêrbaz dibe. Em senaryoya xwe radiwestînin, ji nû ve dest pê dikin, karekî me tune. Em kodê bi daxwaziya taskId-ê dimeşînin, lê em êdî ne taskId-ê, lê tavilê raporê digirin. Sihr! Û her tişt dê baş be heger her tim bi vî rengî bû. Lê di mehekê de dê tu dane tune. Kêrhatî :

  • Piçek teorî li vir û vir tê xêzkirin .
  • Kodê li hev bicivîne, pêşnûme dê tiştek wusa xuya bike.

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

  • Ger kesek bi vê yekê re were, wê hingê hûn bi xêr hatin mijarê . Piştî ku ew vê sêrbaziyê tamîr bikin, ew ê hêza xwe winda bike û dê hinekî cûda bibe. Lê di dema niha de (03/21/2023) ew bi vî rengî dixebite.

GetDividendsForeignIssuer

Dibe ku kes bifikire ku rêbaz mîna ya berê ye û hûn dikarin rêbazek yekane bikar bînin ku tê de hûn tenê navê operasyonan biguherînin. Lê wan texmîn nekir!  Navê li wir hem di rêbazan de hem jî di agahdariya vegerî de pir cûda ye. Û hejmartina rûpelan ji 0, paşê ji 1 dest pê dike. Ji bo ku hûn di van hemîyan de tevlihev nebin, nivîsandina du rêbazên cûda hêsantir e. Kîjan ecêb e, ji ber ku mantiqa kar jî yek e. Dema ku min hewl da ku rêbazek çêbikin û kodek kêmtir bû, min demek dirêj tif kir. Dê li vir nimûne nebin.

GetOperationsByCursor

My favorite ji sê. Her çend ne ya herî rast, lê ya herî têrker be. Em ji destpêka afirandina hesabek heya heyama herî zêde (girtina hesabek an ya heyî) daxwazek dikin. Em bersivê werdigirin, heya ku dane hebin kursorê digirin û ji nû ve daxwaz dikin.  Û kod ji mînakên jorîn kurttir e.

const timer = async time => {     vegere soza nû(çareserkirin => setTimeout(çareserkirin, dem)); }   const getOperationsByCursor = async (sdk, accountId, ji, ber, nîşanker = ”) => {     ceribandin {         const reqData = {             accountId,             ji,             ber,             sînor: 1000,             rewş: sdk.OperationState.OPERATION_STATE_EXECUTED,             bê Komîsyon: derewîn:             bêTrades: derewîn,             bêOvernights: derewîn,             cursor,         };           vegerin li benda sdk.operations.getOperationsByCursor(reqData);     } catch (e) {         await timer(60000);         vegere li benda getOperationsByCursor(sdk, accountId, ji, ber, cursor = ”);     } };

Pêşnûmeya ku were xebitandin li vir e: https://github.com/pskucherov/tcsstat/tree/step3.3 https://github.com/pskucherov/tcsstat/compare/step3.3 Naha em amade ne ku karûbarên wergirtinê li ser zêde bikin serlêdana me. Ger rast were kirin, wê hingê hûn hewce ne ku ji bo tevahiya hebûna hesabê raporên brokerage bistînin. Û ji bo daneyên winda, ew heman T-3, ji operasyonan ji nû ve têne barkirin. Lê ev dikare di gotarek cuda de were veqetandin. Ji nuwazeyên sereke yên ku hûn ê pê re rû bi rû bimînin ev e ku meriv operasyonên zeliqandî û raporek brokerkirinê bişopîne.

  •  Ger îro we ji bo tarîxên pêwîst raporek brokerage û danûstendinan wergirt, wê hemî di databasê de bixin, wê hingê pirsgirêk tune. 
  • Dema ku hûn beşa din a daneyan ji rapor û operasyonan bistînin û biryar bidin ku wan bi databasa heyî re hevdeng bikin, sibê dê pirsgirêkên we hebin. 
  • Gelek hûrgelên di derbarê nehevhatî an guhertina nasnameyê piştî pêvajoyê
  • Dûv re ji bo bazara OTC, id bi tevahî hev nagirin.
  •  Her weha hûrgelên amûrên hevdemkirinê, yên ku dîsa li hev nakin, ji ber taybetmendiyên API-ê. Lê ew çîrokek din e.

Werin em agahdariya li ser operasyonan li serîlêdana xwe zêde bikin. Pirsa sereke dê ev be ku dê data li ku derê bêne hilanîn û hilanîn.

  •  Heke hûn ji bo xwe bikin, hûn ê heman daneyan ji cîhazên cihêreng bixwin. Dûv re hûn hewce ne ku daneyan li ser serverê pêvajoyê bikin û hilînin.
  • Ger we gelek daneyên cûda yên ku ji hêla gelek bikarhênerên cihêreng ve têne vexwarin hene, wê hingê hûn hewce ne ku biryar bidin ka çi girîngtir e: leza bikarhêneran an teserûfa hesin li ser milê we. Yê ku dikane rêjeyek bêdawî ya hardware bikire, her tiştî li ser servera xwe dihejmêre û ji bikarhêneran re pir bilez dike, çavkaniyên bikarhêner, wekî baterî û seyrûseferê, ku li ser têlefonan pir girîng e, xilas dike.

Di encamê de, hejmartina di gerokê de di prensîbê de ne çareseriya herî çêtirîn e. Ji ber vê yekê, tiştê ku ne biha ye, em li ser servera xwe dihesibînin. Em yên mayî ji muwekîlê xwe re dihêlin. Ez bi rastî dixwazim komîsyonê li ser serverê bigirim û hesab bikim. Lê di vir de nuanceya bi navê “înteraktîvîtî” tê. Ka em bibêjin bi hezaran operasyonên we hene û wergirtina wan pênc hûrdeman digire. Dê bikarhêner di vê demê de çi hebe? Spinner? Pêşverûtî? Infa li ser çiqas hate barkirin? Ideal e ku meriv “li benda çalak” bikar bîne dema ku bikarhêner di pêvajoyê de jixwe tiştek bibîne. Li vir Encam e:Em mîkroxizmetek bi karanîna API-ya Tinkoff Invest pêşve dibin da ku xebata bi raporên brokerage û hesabkirina komîsyonên otomatîkî bikin.

  • Rûpel barkirin
  • Hemû fatûre têne xwestin
  • Piştî wê, hemî danûstendinên bi komîsyonên ji bo danûstendinên hatine kirin ji bo hemî hesaban têne xwestin. Dema ku dane têne wergirtin, ew di gerokê de têne pêşkêş kirin.

Ji bo ku her carê daneyên di bûyeran de fîlter nekin, em ji bo her hesabek bûyera xwe dikişînin. Welî evê:

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

Pêşnûmeya destpêkirinê li vir e: https://github.com/pskucherov/tcsstat/tree/step3 https://github.com/pskucherov/tcsstat/compare/step2…step3 Ber bi pêş ve diçin. Pir xweş e ku we ev rêz xwendiye! 

Hesabkirin û derketina agahdariya berjewendiyê

Bi kîjan agahdariyê re hewce dike ve girêdayî ye. Ji ber vê yekê, ez tavilê nuwazeyên sereke yên ku hûn ê pê re rû bi rû bimînin ji we re vebêjim.

Bi bihayan re dixebitin 

Her kesê ku bi darayî re dixebite dizane ku danûstendinên drav tenê bi hejmarên tevahî bêne kirin. Ji ber nerastiya nirxan piştî xala dehiyê û xeletiya kombûyî ya bi hejmareke mezin a operasyonan re. Ji ber vê yekê hemî biha di forma MoneyValue ya jêrîn de têne pêşkêş kirinEm mîkroxizmetek bi karanîna API-ya Tinkoff Invest pêşve dibin da ku xebata bi raporên brokerage û hesabkirina komîsyonên otomatîkî bikin.

erdawaTerîf
diravcinsbenKoda pereyê ISO ya rêzê
yekîneyênint64Beşa yekjimar a hevokê, dikare bibe hejmarek neyînî
nanoint32Beşa perçeyî ya mîqdarê, dikare bibe hejmarek neyînî

Em wan ji hev cuda pêvajoyê dikin, dûv re wan digihînin nirxa bihayê:

quotation.units + quotation.nano / 1e9

Mesrefa peymanên pêşerojê

Buhayê pêşeroj di xalan de tê pêşkêş kirin, dema ku we pêşerojek dirav hebe, hûn hewce ne ku rêjeyê zanibin. Û bê guman bihayê di xalan de û gavê bihayê. Gava ku hûn qezencê ji danûstendinan dihesibînin, ev dikare gulebaran bike, ji ber. heke hûn bi zêdekirina bihayê bi mîqdarê re mîqdara giştî hesab bikin. Li vir divê hûn baldar bin. Ji bo niha, em ê bibînin ka ew çawa diçe. Ev ji bo pêşerojên diravî re derbas dibe, li deverên din her tişt bi vê yekê re baş e.Em mîkroxizmetek bi karanîna API-ya Tinkoff Invest pêşve dibin da ku xebata bi raporên brokerage û hesabkirina komîsyonên otomatîkî bikin.Em mîkroxizmetek bi karanîna API-ya Tinkoff Invest pêşve dibin da ku xebata bi raporên brokerage û hesabkirina komîsyonên otomatîkî bikin.

bazara OTC

Vê sûkê gelek taybetmendî hene, ji ber vê yekê em operesyonên li ser wê ji hev cuda bikolin. Dema ku hûn dest bi xebata hevdemkirinê bikin, dê derkeve holê ku hûn hewce ne ku fîgî / tiker bînin heman formê da ku amûrê rast li hev bikin. Dema ku hûn dest bi senkronîzekirina vê bi rapora brokerkirinê re bikin, dê derkeve holê ku nasnameya bazirganiyê ya heman danûstendinê di destpêkê de di danûstendinan de tîp hene û ew di rapora brokerkirinê de ne. Ji ber vê yekê, ew nikarin werin berhev kirin … ahem-ahem … bi berawirdî! Min wextê bazirganiyê, nîşan û lihevhatina ku yek tradeId di yekî din de heye li hev kir. Rast e, ez nizanim. Kî bi vê yekê re rû bi rû bimîne û kî jê re eleqedar dibe, were ser meselê an dest bi mijarek nû bike.Em mîkroxizmetek bi karanîna API-ya Tinkoff Invest pêşve dibin da ku xebata bi raporên brokerage û hesabkirina komîsyonên otomatîkî bikin.

Operasyonên matematîkî yên li ser amûran

Ne mimkûn e, bêyî lênihêrîn, bi tevahî navnîşê re operasyonên matematîkî pêk bînin. Ji bo ku germ li nerm zêde nebe, em her gav drav kontrol dikin û pêvajo dikin tenê heke em pê bawer bin ku drav li hev dike, û xal li pereyê xwestinê têne veguheztin. Bi zanyariyên di derbarê xebata bi hejmarên bankê re, em ê komîsyona ku li ser her yek ji hesaban hatî xerc kirin hesab bikin. Bi vî rengî: https://github.com/pskucherov/tcsstat/tree/step4 https://github.com/pskucherov/tcsstat/compare/step3…step4Em mîkroxizmetek bi karanîna API-ya Tinkoff Invest pêşve dibin da ku xebata bi raporên brokerage û hesabkirina komîsyonên otomatîkî bikin.   

Microservice amade ye!

https://github.com/pskucherov/tcsstat Wekî karekî malê, hûn dikarin kontrol bikin ka karûbar bi pêwendiyek hêdî dixebite, dema ku girêdan qut dibin, dema ku Înternet qut dibe, dema ku ji hêla brokerê ve xeletî an sînor derbas bûne. 

Encam û plansaziyên pêşerojê

  • Li ser operasyonên bingehîn û xebata bi Invest API re fêr bûn
  • Dema derbas ~ 10 saetan
  • Asta dijwariyê ~ ciwan+ / navîn kêm 

Ger hûn paqijkirina mîkroxizmetê bidomînin, dibe ku hûn bi tiştek wusa biqedin

https://opexbot.info

  Ev pêşkeftina min e, ji bo yên ku pir tembel in ku fêm bikin, birevin û bi xwe hesab bikin. Ez plan dikim ku li ser daxwaza bikarhêneran analîtîk li wir zêde bikim. Ger we gotar jê hez kir, wê hingê bibin aboneya kanala min a telegramê . Em mîkroxizmetek bi karanîna API-ya Tinkoff Invest pêşve dibin da ku xebata bi raporên brokerage û hesabkirina komîsyonên otomatîkî bikin.

Pavel
Rate author
Add a comment

  1. Isakiiev

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

    Reply