Hi le ku tumbuluxeni ka microservice hi ku tirhisa Tinkoff Invest API ku endla otomatiki ku tirha na swiviko swa vuxavisi na ku hlayela tikhomixini.

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

Vahlohloteri lava nga endzhaku ka nhluvukiso wa vukorhokeri bya tinhlayo eka Tinkoff Investments a ku ri:

Ku ta buriwa hi yini?

  • Xiphemu lexi tirhisiweke ntsena mayelana na nhluvukiso.
  • Vutivi bya xiviri na ntokoto, leswi nga swa nkoka swinene eku tirheni hi switirhisiwa swa timali.
  • Nkatsakanyo wa timhaka leti faneleke ku tirhela eka tona

Kutani, ndzi lava ku hlayela tinhlayo ta mabindzu ni ku swi endla hi ndlela leyi olovaka. 

Ku tumbuluxa vukorhokeri bya tinhlayo hi magoza: 

  1. Ku hlanganisiwa na Tinkoff Invest API
  2. Ku dirowa datha ku suka eka Tinkoff Invest API eka browser
  3. Ku amukela swiviko swa vuxavisi na mabindzu
  4. Ku hlayela na vuhumelerisi bya mahungu ya ntsakelo
  5. Mahetelelo na makungu ya vumundzuku

Ku hlanganisiwa na Tinkoff Invest API

Ku hlanganisa na API, u nga teka sdk yihi na yihi eka matsalwa https://github.com/Tinkoff/investAPI#sdk . Kumbe phasela ra npm ` tinkoff-sdk-grpc-js `. I swa nkoka leswaku phasela ri pfuxetiwa ku ya eka vuhundzuluxeri bya sweswinyana hi vaendli. Nghenisa

npm ndzi hlanganisa-sdk-grpc-js

Ku kambela

const { tumbuluxaSdk } = lava (‘tinkoff-sdk-grpc-js’);   // Token leyi nga kumiwaka ku fana na leyi  const TOKEN = ‘YOURAPI’;   // Vito ra xitirhisiwa lexi u nga kumekaka ha xona eka tilog ta TCS. const Vito ra xitirhisiwa = ‘tcsstat’;   const sdk = tumbuluxaSdk (TOKEN, Vito ra xitirhisiwa); (async () => {     console.log (yimela sdk.vatirhisi.ku kuma Tiakhawunti ()); }) ();

Vuyelo: nxaxamelo wa tiakhawunti ta wena wu ta kombisiwa eka console. Hi xikombiso, a hi kambisiseni swilo leswitsongo:Hi le ku tumbuluxeni ka microservice hi ku tirhisa Tinkoff Invest API ku endla otomatiki ku tirha na swiviko swa vuxavisi na ku hlayela tikhomixini.

  • Eka nxaxamelo wa tiakhawunti ku na “Bangi ya Vuvekisi”, leyi u nga ta ka u nga tirhi na yona hi ku tirhisa API
  • Hi kombela mi xiya leswaku masimu ya ta hi camelCase, kasi eka matsalwa masimu lawa ya nyikeriwile hi under_score. 
  • Swi ta va hi ndlela leyi hinkwako, kutani a wu nge teki ntsena u kopa nsimu ku suka eka matsalwa.

Tirhiseka:

  • U nga kuma khodi leyi erhavini ra phurojeke

https://github.com/pskucherov/tcsstat/murhi/goza ro sungula https://github.com/pskucherov/tcsstat/ringanisa/goza1   

Ku dirowa datha ku suka eka Tinkoff Invest API eka browser

Ndzi teke next.js na socket.io. Lexi a hi xitsundzuxo xo tiya, hlawula hi ku vona ka wena. 

npx create-next-app@latest npm i sokheti.io sokheti.io-klayenti

Hi hatlisa hi ya emahlweni eka goza ra vunghana leri landzelaka+socket+investapi, naswona hi vona xiyenge xa ​​Useful xa goza leri ku kuma vuxokoxoko hinkwabyo.  Ndzi ta hlamusela vuxokoxoko: 

  • Eka tlhelo ra nodejs (server), ku na fayili ya pages/api/investapi.js. Laha hi laha hi endlaka socket.io server hi hlanganisa na investapi.
  • Eka tlhelo ra browser (client), hi hlanganisa na server hi ku tirhisa socket naswona hi kombela data ya akhawunti eka broker. 
  • Hi amukela data ku suka eka broker eka server, ivi hi yi rhumela eka client. Loko ti amukeriwile eka xitirhisiwa, ti kombisiwa eka browser. 

Vuyelo:  eka browser console hi nga vona vuxokoxoko mayelana na ti account. Hi leswaku, eka goza ro hetelela, hi vone vuxokoxoko mayelana na tiakhawunti eka console ya sevha (nodejs), eka goza ra sweswi, hi hundzisele vuxokoxoko lebyi eka client (browser).

Hi le ku tumbuluxeni ka microservice hi ku tirhisa Tinkoff Invest API ku endla otomatiki ku tirha na swiviko swa vuxavisi na ku hlayela tikhomixini.

Sweswi a hi endleni leswaku u ta kota ku hlawula akhawunti eka browser, naswona loko ku nga ri na token, kutani xihoxo xi rhumeriwa eka console. Ntirho wu olovile naswona a hi nchumu wuntshwa, kutani ndzi nyika ntsena swihlanganisi swa ku tinyiketela

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

Tirhiseka:

  • Ndlela yo endla vanghana next na socket yi hlamuseriwile hi vuxokoxoko laha
  • Khodi ya vunghana next+socket+investapi:

https://github.com/pskucherov/tcsstat/commit/a443a4ac1bb4f0aa898f638128755fe7391ee381 Lava leswi nga laha henhla swi tika, kutani hi tshama eka xiyimo lexi hi tirhana na khodi. Loko u ri na swivutiso – vutisa. https://github.com/pskucherov/tcsstat/murhi/goza ra vumbirhi https://github.com/pskucherov/tcsstat/ringanisa/goza ro sungula…goza ra vumbirhi

Ku amukela swiviko swa vuxavisi na mabindzu

Kuna tindlela tinharhu to amukela swiviko swa brokerage na mabindzu

  1. KumaXiviko xa Broker
  2. KumaTihakelo Muhumesi wa Matiko ya le Handle
  3. KumaMatirheloHi Xikombo

Ku sukela eku sunguleni i swa nkoka ku tiva: 

  • Xiviko xa brokerage xi endliwa hi ndlela ya T-3, i.e. mabindzu ya kombisiwa kwalaho endzhaku ka ku dlayiwa ka wona ka xiviri. 
  • Hi ku ya hi leswi, loko u kombela xiviko lexi xa masiku mambirhi yo hetelela, xi ta va xi lunghekile endzhaku ka masiku manharhu. 
  • Ku kuma mabindzuntirhisano ya masiku yo hetelela, hi tirhisa ndlela yo amukela mabindzuntirhisano, kambe tsundzuka leswaku id ya wona na nhundzu swi nga cinca endzhaku ka loko xiviko xa brokerage xi endliwile.

KumaXiviko xa Broker

Ku kuma xiviko xa brokerage, u fanele ku teka account id, siku ro sungula na siku ro hetelela ra xiviko, kambe ku nga hundzi masiku ya 31. Hi rhumela xikombelo xo tumbuluxa xiviko eka API eka generate _broker_report_request , kuma taskId hi nhlamulo. Endzhaku ka sweswo, hi ku tirhisa taskId leyi, hi kuma data ku suka eka get _broker_report_response.

So documentation yi ri, entiyisweni ku na ti nuances. Languta mavoko ya wena:

  • U fanele ku hlayisa TaskID hilaha ku nga heriki kahle-kahle eka masiku lawa. 
  • Tanihi leswi loko u lahlekeriwa hi yona, kutani eka masiku lama komberiweke xiviko xi ta rhanga xi ta xi hlamula xikombelo xa ku tumbuluxiwa, . 
  • Nakona a swi nge fiki nikatsongo.

A hi sunguleni ku tsala khodi

Ndlela yo kuma siku, ku tekeriwa enhlokweni ku susiwa eka siku ra sweswi

const getDateSubDay = (Siku-ntsongo = 5, ku sungula = ntiyiso) => {     const siku = Siku lerintshwa ();     siku.setUTCDate (siku.getUTCDate () – Siku-ntsongo);       loko (ku sungula) {         siku.setUTCHours (0, 0, 0, 0);     } else {         siku.setUTCHours (23, 59, 59, 999);     }       siku ro vuyela; };

Xikombelo xa ku tumbuluxiwa ka xiviko 

const Xiviko xa broker = yimela (sdk.operations.getBrokerReport)({         tumbuluxaXikombelo xa Xiviko xa Broker: {             accountId,             ku suka,             ku ya eka,         }, });

Mbuyelo:

  • Hikwalaho ka ku hetisisiwa ko sungula ka xileriso, hi kuma taskId. 
  • Xiviko xi sungula ku endliwa eka tlhelo ra broker. Loko yi lunghekile a swi tiviwi, hi rindza naswona nkarhi na nkarhi hi koka taskId hi ku langutela xiviko.
  • Hikokwalaho ka yini? Hikuva loko xiviko xi nga si lungheka, xi hoxa xihoxo. Loko xiviko xi nga si lungheka eka tlhelo ra broker, kutani lexi i xihoxo eka khodi ya wena. Hi kombela u tirhisa: 30058|INVALID_ARGUMENT|ntirho a wu si hetiwa, hi kombela u ringeta nakambe endzhaku

Khodi yo rindza no amukela xiviko yi languteka hi ndlela leyi.

const timer = async time => {     vuyisa Xitshembiso lexintshwa (ku lulamisa => setTimeout (ku lulamisa, nkarhi)); }   const getBrokerResponseByTaskId = async (taskId, pheji = 0) => {     ringeta {         vuyela rindza (sdk.operations.getBrokerReport)({             kumaXikombelo xa Xiviko xa Broker: {                 taskId,                 pheji,             },         });     } khoma (e) {         console.log (‘yimela’, e);         rindza nkarhi(10000);         vuyela yimela getBrokerResponseByTaskId (Id ya ntirho, tluka);     } };

Kutani masalamusi lama fanaka ma humelela. Hi yimisa script ya hina, hi yi sungula nakambe, a hi na taskId. Hi tirhisa khodi hi xikombelo xa taskId, kambe a ha ha kumi taskId, kambe hi ku hatlisa hi kuma xiviko. Vutlhari bya masalamusi! Naswona hinkwaswo a swi ta va swi ri kahle loko a swi tshama swi ri tano. Kambe endzhaku ka n’hweti a ku nge vi na data nikatsongo. Swi pfuna : .

  • Xintsongo xa thiyori xi andlariwile laha na laha .
  • Ku hlanganisa khodi, tsalwa ra tsalwa ri ta languteka hi ndlela leyi.

https://github.com/pskucherov/tcsstat/murhi/goza3.1 https://github.com/pskucherov/tcsstat/ringanisa/goza3.1

  • Loko munhu a hlangana na leswi, kutani mi amukelekile eka mhaka leyi . Endzhaku ka loko va lunghise masalamusi lawa, ma ta lahlekeriwa hi matimba ya wona naswona hi ndlela yo karhi ma ta va ma hambanile. Kambe eka nkarhi wa sweswi (03/21/2023) swi tirha hi ndlela yaleyo ntsena.

KumaTihakelo Muhumesi wa Matiko ya le Handle

Munhu un’wana a nga ha ehleketa leswaku ndlela leyi yi fana ni leyi hundzeke naswona u nga tirhisa ndlela yin’we leyi eka yona u cincaka vito ra matirhelo ntsena. Kambe a va swi ringanyetanga!  Ku thya mavito kwalaho ku hambanile swinene eka maendlelo na le ka rungula leri vuyiseriweke. Naswona nhlayo ya matluka yi sungula eka 0, ivi ku suka eka 1. Leswaku u nga pfilunganyeki eka hinkwaswo leswi, swa olova ku tsala tindlela timbirhi to hambana. Lexi hlamarisaka, hikuva logic ya ntirho ya fana. Ndzi tshwutele nkarhi wo leha loko ndzi ringeta ku endla ndlela yin’we naswona a ku ri na khodi yitsongo. A ku nge vi na swikombiso laha.

KumaMatirheloHi Xikombo

Lexi ndzi xi tsakelaka ngopfu eka leswinharhu. Hambileswi ku nga riki yona leyi kongomeke swinene, kambe leyi ringaneke swinene. Hi endla xikombelo ku sukela eku sunguleni ka ku tumbuluxa akhawunti ku fikela hi siku lerikulu leri kotekaka (ku pfala akhawunti kumbe ya sweswi). Hi kuma nhlamulo, hi teka cursor hi tlhela hi kombela as long as ku ri na data.  Naswona khodi yi komile ku tlula eka swikombiso leswi nga laha henhla.

const timer = async time => {     vuyisa Xitshembiso lexintshwa (ku lulamisa => setTimeout (ku lulamisa, nkarhi)); }   const getOperationsByCursor = async (sdk, accountId, ku suka, ku ya eka, cursor = ”) => {     ringeta {         const reqData = {             accountId,             ku suka,             ku ya eka,             ndzingano: 1000,             xiyimo: sdk.Xiyimo xa Ntirho.OPERATION_STATE_EXECUTED, handle             kaTikhomixini: mavunwa,             handle ka Trades: mavunwa,             handleOvernights: mavunwa,             xikombiso,         };           vuyela yimela sdk.operations.getMatirheloHiCursor (reqData);     } khoma (e) {         yimela nkarhi (60000);         vuyela yimela getOperationsByCursor (sdk, accountId, ku suka, ku ya eka, xikombiso = ”);     } };

Xitshuriwa lexi nga ta fambisiwa xi kona laha: https://github.com/pskucherov/tcsstat/tree/step3.3 https://github.com/pskucherov/tcsstat/compare/step3.3 Sweswi hi lulamerile ku engetela matirhelo yo amukela eka xikombelo xa hina. Loko swi endliwe kahle, kutani u fanele ku kuma swiviko swa vuxavisi bya vukona hinkwabyo bya akhawunti. Naswona eka data leyi kayivelaka, ti-T-3 toleto, ti tlhela ti layicha ku suka eka matirhelo. Kambe leswi swi nga hambanisiwa swi va xihloko lexi hambaneke. Eka ti nuances letikulu leti ungata hlangana na tona i ku glue operations na xiviko xa brokerage.

  •  Loko namuntlha u amukele xiviko xa brokerage na ti transaction ta masiku lawa ya lavekaka, u swi veke hinkwaswo eka database, kutani a ku na swiphiqo. 
  • U ta va na swiphiqo mundzuku loko u kuma xiphemu lexi landzelaka xa datha ku suka eka xiviko na matirhelo ivi u teka xiboho xo swi fambisana na database leyi nga kona. 
  • A lot of nuances about mismatched kumbe ku cinca id endzhaku ka processing
  • Kutani eka makete wa OTC, ti id a ti fambelani nikatsongo.
  •  Kukatsa na ti nuances ta switirhisiwa swo fambisana, leswi nakambe swinga fambisaniki, hikokwalaho ka swihlawulekisi swa API. Kambe xexo i xitori xin’wana.

A hi engeteleni ku kuma vuxokoxoko mayelana na matirhelo eka xitirhisiwa xa hina. Xivutiso lexikulu ku ta va leswaku datha yi ta tirhisiwa kwihi no hlayisiwa kwihi.

  •  Loko u tiendlela swona, u ta dya data leyi fanaka eka switirhisiwa swo hambana-hambana. Kutani u fanele u tirhisa ni ku hlayisa data eka sevha.
  • Loko uri na data yotala yohambana hambana leyi dyiwaka hi vatirhisi votala vohambana hambana, kutani ufanele ku teka xiboho xa leswinga swa nkoka swinene: rivilo ra vatirhisi kumbe ku hlayisiwa ka nsimbi eka tlhelo ra wena. Loyi a nga kotaka ku xava nhlayo leyi nga pimekiki ya hardware u hlaya hinkwaswo eka sevha ya yena naswona u endla leswaku swi hatlisa swinene eka vatirhisi, a hlayisa switirhisiwa swa vatirhisi, swo tanihi betri na thrafikhi, leswi nga swa nkoka swinene eka tifoyini.

Hi hala tlhelo, ku hlayela eka browser a hi ntlhantlho lowunene ngopfu hi ku ya hi nsinya wa nawu. Hikwalaho, leswi nga durhiki, hi swi tekela enhlokweni eka sevha ya hina. Leswi seleke hi swi siyela client. Ndzi lava ku teka ni ku hlayela khomixini eka sevha swinene. Kambe laha ku ta nuance leyi vuriwaka “interactivity”. A hi nge u na magidi ya vuhandzuri naswona swi teka timinete ta ntlhanu ku byi amukela. Xana mutirhisi u ta va na yini hi nkarhi lowu? Spinner? Ndzima? Infa hi ku uploadiwa mali muni? I swinene ku tirhisa “active waiting” loko mutirhisi eka endlelo se a nga vona swo karhi. Vuyelo bya kona hi lebyi : Hi le ku tumbuluxeni ka microservice hi ku tirhisa Tinkoff Invest API ku endla otomatiki ku tirha na swiviko swa vuxavisi na ku hlayela tikhomixini.

  • Ku layicha ka pheji
  • Ti-invoice hinkwato ta komberiwa
  • Endzhaku ka sweswo, mabindzu hinkwawo lama nga na tikhomixini ta mabindzu lama endliweke ya komberiwa eka tiakhawunti hinkwato. Loko data yi amukeriwa, yi endliwa eka browser.

Leswaku hi nga sefi data eka swiendlakalo nkarhi wun’wana ni wun’wana, hi koka xiendlakalo xa hina eka akhawunti yin’wana ni yin’wana. Ku fana na leswi:

socket.emit (‘sdk: getOperationsCommissionResult_’ + accountId, {                 swilo: data?.swilo,                 inProgress: Boolean (Xikombo lexi landzelaka), });

Xitshuriwa xo sungula xi kona laha: https://github.com/pskucherov/tcsstat/tree/step3 https://github.com/pskucherov/tcsstat/compare/step2…step3 Ku ya emahlweni. Swi tsakisa ngopfu ku va u hlayile layini leyi! 

Ku hlayela na vuhumelerisi bya mahungu ya ntsakelo

Swi titshege hi leswaku i mani loyi a lavaka rungula rihi. Hikwalaho, ndzi hatla ndzi ku byela swilo leswikulu leswitsongo leswi u nga ta hlangana na swona.

Ku tirha hi minxavo 

Un’wana na un’wana loyi a tirhaka na swa timali wa swi tiva leswaku ku xaviselana ka mali ku fanele ku endliwa ntsena hi tinomboro leti heleleke. Hikwalaho ka ku nga kongomi ka mimpimo endzhaku ka nhlayo ya desimali na xihoxo xa nhlengeleto na nhlayo leyikulu ya matirhelo. Hi yona mhaka leyi minxavo hinkwayo yi nyikeriwaka hi xivumbeko lexi landzelaka xa MoneyValueHi le ku tumbuluxeni ka microservice hi ku tirhisa Tinkoff Invest API ku endla otomatiki ku tirha na swiviko swa vuxavisi na ku hlayela tikhomixini.

masimu muxaka Nhlamuselo
mali ya tiko ntambu Khodi ya mali ya ISO ya ntambhu
tiyuniti int64 Xiphemu xa integer xa nhlayo, xi nga va nomboro ya negative
nano int32 Xiphemu xa xiphemu xa mali, xi nga va nomboro ya negative

Hi ti lulamisa hi ku hambana, kutani hi ti tisa eka ntsengo wa nxavo:

xikombo.tiyuniti + xikombo.nano / 1e9

Ndleko wa tikontiraka ta vumundzuku

Ntsengo wa vumundzuku wu nyikeriwa hi tiphuinti, loko u ri na vumundzuku bya mali, u fanele ku tiva mpimo. Naswona hakunene nxavo hi tinhla na goza ra nxavo. Loko u hlayela vuyelo eka mabindzuntirhisano, leswi swi nga duvula, hikuva. loko u hlayela ntsengo hinkwawo hi ku andzisa nxavo hi nhlayo. Laha u fanele u va ni vuxiyaxiya. Sweswi, hi ta vona leswaku swi famba njhani. Leswi swi tirha eka vumundzuku bya mali, eka tindhawu tin’wana hinkwaswo swi ok na leswi.Hi le ku tumbuluxeni ka microservice hi ku tirhisa Tinkoff Invest API ku endla otomatiki ku tirha na swiviko swa vuxavisi na ku hlayela tikhomixini. Hi le ku tumbuluxeni ka microservice hi ku tirhisa Tinkoff Invest API ku endla otomatiki ku tirha na swiviko swa vuxavisi na ku hlayela tikhomixini.

Makete wa OTC

Makete lowu wuna swilo swotala swo hlawuleka, kutani ahi dyondzeni matirhelo eka wona hiku hambana.Loko u sungula ku fambisana ka matirhelo, swita kumeka leswaku ufanele ku tisa figi / ticker eka xivumbeko lexi fanaka leswaku uta fambisana kahle na xitirhisiwa. Loko u sungula ku fambisana leswi na xiviko xa vuxavisi, swi ta kumeka leswaku tradeID ya nxaviselano lowu fanaka yi na mapapila eku sunguleni eka mabindzu naswona a ma kona eka xiviko xa vuxavisi. Hikwalaho, a va nge ringanisiwi … ahem-ahem … hi ku pimanisiwa! Ndzi ringanise nkarhi wa bindzu, ticker na ku fambelanisa leswaku tradeId yin’we yi kumeka eka yin’wana. Kunene, a ndzi swi tivi. Loyi a hlanganaka na leswi na loyi a khathalaka hi swona, tana eka mhaka leyi kutani u sungula leyintshwa.Hi le ku tumbuluxeni ka microservice hi ku tirhisa Tinkoff Invest API ku endla otomatiki ku tirha na swiviko swa vuxavisi na ku hlayela tikhomixini.

Matirhelo ya tinhlayo eka switirhisiwa

A swi koteki, handle ko languta, ku endla matirhelo ya tinhlayo hi nxaxamelo hinkwawo. Leswaku hi nga engeteli warm to soft, minkarhi hinkwayo hi kambela mali na process ntsena loko hi tiyiseka leswaku mali ya fambelana, naswona tinhla ti hundzuriwa eka mali leyi lavekaka. Hi hlomile hi vutivi mayelana no tirha hi tinomboro ta le bangi, hi ta hlayela khomixini leyi tirhisiweke eka yin’wana na yin’wana ya tiakhawunti. Ku fana na leswi: https://github.com/pskucherov/tcsstat/murhi/goza ra vumune https://github.com/pskucherov/tcsstat/ringanisa/goza ra vunharhu…goza ra vumuneHi le ku tumbuluxeni ka microservice hi ku tirhisa Tinkoff Invest API ku endla otomatiki ku tirha na swiviko swa vuxavisi na ku hlayela tikhomixini.    

Microservice yi lunghekile!

https://github.com/pskucherov/tcsstat Tanihi ntirho wa xikolo, u nga kambela loko vukorhokeri byi tirha hi vuhlanganisi byo nonoka, loko vuhlanganisi byi tshovekile, loko Inthanete yi tsemiwile, loko swihoxo kumbe swipimelo leswi hundzeriweke hi nkarhi eka xiphemu xa muxavisi. 

Mahetelelo na makungu ya vumundzuku

  • U dyondze hi matirhelo ya masungulo na ku tirha na Invest API
  • Nkarhi lowu hetiweke ~ 10 wa tiawara
  • Xiyimo xa ku tika ~ junior+ / low middle 

Loko u ya emahlweni u antswisa microservice, u nga ha hetelela u ri ni nchumu wo fana ni lowu

https://opexbot.info, xitsonga xitsonga xitsonga xitsonga

  Leyi i nhluvukiso wa mina, eka lava va lolohaka ngopfu ku twisisa, ku tsutsuma no hlayela hi voxe. Ndzi kunguhata ku engetela ti analytics kwalaho hi xikombelo xa vatirhisi. Loko u tsakele xihloko lexi, kutani tsarisa eka xitichi xa mina xa thelegiramu . Hi le ku tumbuluxeni ka microservice hi ku tirhisa Tinkoff Invest API ku endla otomatiki ku tirha na swiviko swa vuxavisi na ku hlayela tikhomixini.

Pavel
Rate author
Add a comment

  1. Isakiiev

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

    Reply