Muna haɓaka microservice ta amfani da API ɗin Tinkoff Invest don sarrafa sarrafa kansa tare da rahotannin dillalai da ƙididdigar kwamitocin.

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

Abubuwan da suka ƙarfafa bayan haɓaka sabis na ƙididdiga na Tinkoff Investments sune:

Me za a tattauna?

  • Sai kawai ɓangaren da aka yi amfani da shi game da ci gaba.
  • Ilimi na gaske da gogewa, waɗanda ke da mahimmanci a cikin aiki tare da kayan aikin kuɗi.
  • Bayanin abubuwan da za a yi aiki akai

Don haka, ina so in lissafta kididdigar ciniki kuma in yi shi a hanya mai dacewa. 

Ƙirƙirar sabis na ƙididdiga mataki-mataki: 

  1. Haɗin kai zuwa Tinkoff Invest API
  2. Zana bayanai daga Tinkoff Invest API a cikin mai bincike
  3. Karɓar rahotannin dillalai da ma’amaloli
  4. Lissafi da fitar da bayanan ban sha’awa
  5. Ƙarshe da tsare-tsare na gaba

Haɗin kai zuwa Tinkoff Invest API

Don haɗawa da API, zaku iya ɗaukar kowane sdk daga takaddun https://github.com/Tinkoff/investAPI#sdk . Ko kunshin npm ` tinkoff-sdk-grpc-js` . Yana da mahimmanci cewa an sabunta kunshin zuwa sabon sigar ta masu haɓakawa. Shigar

npm da tinkoff-sdk-grpc-js

Dubawa

const {crearSdk} = buƙatar (‘tinkoff-sdk-grpc-js’);   // Alamar da za a iya samu kamar wannan  const TOKEN = ‘YOURAPI’;   // Sunan aikace-aikacen da za a iya samun ku a cikin rajistan ayyukan TCS. const appName = ‘tcsstat’;   const sdk = ƙirƙirar Sdk (TOKEN, appName); (async () => {     console.log(jira sdk.users.getAccounts()); })();

Sakamako: jerin asusunku za a nuna a cikin na’ura mai kwakwalwa. Misali, bari mu bincika nuances:Muna haɓaka microservice ta amfani da API ɗin Tinkoff Invest don sarrafa sarrafa kansa tare da rahotannin dillalai da ƙididdigar kwamitocin.

  • A cikin lissafin asusun akwai “Bankin Zuba Jari”, wanda ba za ku iya yin aiki tare da API ba
  • Lura cewa filayen suna zuwa cikin akwatin raƙumi, yayin da a cikin takaddun ana gabatar da waɗannan filayen a ƙarƙashin_score. 
  • Zai zama haka a ko’ina, don haka ba za ku iya ɗauka kawai ku kwafi filin daga takaddun ba.

Mai amfani:

  • Kuna iya samun wannan lambar a reshen aikin

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

Zana bayanai daga Tinkoff Invest API a cikin mai bincike

Na ɗauki next.js da socket.io. Wannan ba shawara ce mai ƙarfi ba, zaɓi da shawarar ku. 

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

Nan da nan muka ci gaba zuwa matakin abokantaka na gaba+socket+investapi, kuma duba sashin fa’ida na wannan matakin don cikakkun bayanai.  Zan bayyana cikakkun bayanai: 

  • A gefen nodejs (uwar garken), akwai fayil ɗin shafuka/api/investapi.js. Wannan shine inda muke ƙirƙirar uwar garken socket.io kuma mu haɗa zuwa investapi.
  • A gefen mai bincike (abokin ciniki), muna haɗawa da uwar garken ta hanyar soket kuma muna buƙatar bayanan asusun daga dillali. 
  • Muna karɓar bayanai daga dillali akan uwar garke, sannan aika zuwa abokin ciniki. Lokacin da aka karɓi su akan abokin ciniki, ana nuna su a cikin mai binciken. 

Sakamako:  a cikin na’ura mai ba da hanya tsakanin hanyoyin sadarwa muna iya ganin bayanai game da asusu. Wato, a mataki na ƙarshe, mun ga bayanai game da asusun a cikin uwar garken console (nodejs), a cikin mataki na yanzu, mun canja wurin wannan bayanin zuwa abokin ciniki (browser).

Muna haɓaka microservice ta amfani da API ɗin Tinkoff Invest don sarrafa sarrafa kansa tare da rahotannin dillalai da ƙididdigar kwamitocin.

Yanzu bari mu yi shi domin za ka iya zaɓar wani asusu daga browser, kuma idan babu token, sa’an nan an aika da kuskure zuwa console. Aikin yana da sauƙi kuma ba sabon abu ba ne, don haka ina ba da haɗin kai kawai don aikatawa

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

Mai amfani:

  • Yadda ake yin abokai na gaba da soket an bayyana dalla-dalla a nan
  • Lambar abokantaka na gaba + soket+investapi:

https://github.com/pskucherov/tcsstat/commit/a443a4ac1bb4f0aa898f638128755fe7391ee381 Ga wanda abin da ke sama yana da wahala, to, mun kasance a wannan mataki kuma mu magance lambar. Idan kuna da tambayoyi – tambaya. https://github.com/pskucherov/tcsstat/tree/step2 https://github.com/pskucherov/tcsstat/compare/step1…step2

Karɓar rahotannin dillalai da ma’amaloli

Akwai hanyoyi guda uku don karɓar rahotannin dillalai da ma’amaloli

  1. Rahoton GetBroker
  2. Sami Rarraba Masu Bakin Waje
  3. GetOperationsByCursor

Tun daga farko yana da mahimmanci a sani: 

  • Ana samar da rahoton dillalai a cikin yanayin T-3, watau. Ana nuna cinikai a can bayan aiwatar da su na ainihi. 
  • Don haka, idan kun nemi wannan rahoto na kwanaki biyu na ƙarshe, zai kasance a shirye cikin kwanaki uku. 
  • Don samun ma’amaloli na kwanaki na ƙarshe, muna amfani da hanyar don karɓar ma’amaloli, amma ku tuna cewa id da abun ciki na iya canzawa bayan an samar da rahoton dillalai.

Rahoton GetBroker

Don samun rahoton dillalai, kuna buƙatar ɗaukar id na asusun, ranar farawa da ranar ƙarshe na rahoton, amma bai wuce kwanaki 31 ba. Muna aika buƙatun don samar da rahoto zuwa API a samar da _broker_report_request , sami taskId a cikin martani. Bayan haka, ta amfani da wannan taskId, muna samun bayanai daga samun _broker_report_response. [ take = “Don haka takardun ya ce, a gaskiya akwai nuances. Kalli hannunka:”]

  • Kuna buƙatar adana TaskID ɗin har abada daidai don waɗannan kwanakin. 
  • Tunda idan ka rasa shi, to ga kwanakin da aka nema rahoton zai fara zuwa ne don amsa bukatar tsara, 
  • Sannan kuma sam ba zai zo ba.

[/spoiler] Bari mu fara rubuta lamba

Hanyar samun kwanan wata, la’akari da raguwa daga kwanan wata

const getDateSubDay = (subDay = 5, farawa = gaskiya) => {     kwanan kwanan wata = sabuwar Kwanan wata ();     date.setUTCDate (date.getUTCDate() – Rana;       idan (farawa) {         date.setUTCHours (0, 0, 0, 0);     } kuma {         date.setUTCHours (23, 59, 59, 999);     }       kwanan dawowa; };

Bayar da buƙatun ƙirƙira 

const brokerReport = jira (sdk.operations.getBrokerReport)({         genereneBrokerReportRequest: {             accountId,             daga,             zuwa,         }, });

Sakamako:

  • A sakamakon farkon aiwatar da umarnin, muna samun taskId. 
  • An fara samar da rahoton a gefen dillali. Lokacin da ya shirya ba a san shi ba, muna jira kuma mu ja da taskId lokaci-lokaci a cikin jiran rahoton.
  • Me yasa? Domin idan rahoton bai shirya ba, yana jefa kuskure. Idan rahoton bai shirya a gefen dillali ba, to wannan kuskure ne a lambar ku. Da fatan za a aiwatar da: 30058|INVALID_ARGUMENT|aikin ba a kammala ba tukuna, da fatan za a sake gwadawa daga baya

Lambar jiran da karɓar rahoto yayi kama da wannan.

const timer = lokacin async => {     dawo da sabon Alkawari (shawarwari => saitaTimeout (maganin, lokaci)); }   const getBrokerResponseByTaskId = async (taskId, shafi = 0) => {     gwada {         dawo jira (sdk.operations.getBrokerReport)({             getBrokerReportRequest: {                 taskId,                 shafi,             },         });     } kama (e) {         console.log (‘jira’, e);         lokacin jira (10000);         dawowa jira getBrokerResponseByTaskId(aiki, shafi);     } ;

Sai kuma sihirin daya faru. Mun dakatar da rubutun mu, mu sake farawa, ba mu da taskId. Muna aiwatar da lambar tare da buƙatar taskId, amma ba mu sami taskId ba, amma nan da nan rahoton. Sihiri! Kuma komai zai yi kyau idan ya kasance haka koyaushe. Amma a cikin wata daya ba za a sami bayanai kwata-kwata ba. Amfani :

  • An bayyana kadan na ka’idar nan da nan .
  • Haɗa lambar tare, daftarin zai yi kama da wani abu kamar haka.

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

  • Idan wani ya gamu da wannan, to ku maraba da batun . Bayan sun gyara wannan sihiri, zai rasa ikonsa kuma zai bambanta. Amma a halin yanzu (03/21/2023) yana aiki kamar haka.

Sami Rarraba Masu Bakin Waje

Wani yana iya tunanin cewa hanyar tana kama da wacce ta gabata kuma zaku iya amfani da hanya guda ɗaya wacce kawai zaku canza sunan ayyukan. Amma ba su zato ba!  Sunan wurin ya bambanta sosai a cikin hanyoyin da kuma bayanan da aka dawo dasu. Kuma adadin shafukan yana farawa daga 0, sannan daga 1. Domin kada a ruɗe a cikin wannan duka, yana da sauƙi a rubuta hanyoyi guda biyu daban-daban. Abin mamaki, saboda dabarar aiki iri daya ce. Na daɗe da tofa albarkacin bakina lokacin da na yi ƙoƙarin yin hanya ɗaya kuma akwai ƙarancin lambar. Ba za a sami misalai a nan ba.

GetOperationsByCursor

Na fi so na uku. Ko da yake ba mafi daidai ba, amma mafi dacewa. Muna yin buƙatu daga farkon ƙirƙirar asusu zuwa iyakar yiwuwar kwanan wata (rufe asusu ko na yanzu). Muna samun amsar, ɗauki siginan kwamfuta kuma mu sake nema muddin akwai bayanai.  Kuma lambar ta fi taƙaice fiye da misalan da ke sama.

const timer = lokacin async => {     dawo da sabon Alkawari (shawarwari => saitaTimeout (maganin, lokaci)); }   const getOperationsByCursor = async (sdk, accountId, daga, zuwa, siginan kwamfuta = ”) => {     gwada {         const reqData = {             accountId,             daga,             zuwa,             iyaka: 1000,             jiha: sdk.OperationState.OPERATION_STATE_EXECUTED,             ba tare da Hukumar ba: ƙarya,             ba tare da Kasuwanci: ƙarya,             ba tare da na dare ba: ƙarya,             siginan kwamfuta,         };           dawowa jira sdk.operations.getOperationsByCursor(reqData);     } kama (e) {         lokacin jira (60000);         dawowa jira getOperationsByCursor(sdk, accountId, daga, zuwa, siginan kwamfuta = ”);     } ;

Daftarin aiki yana nan: https://github.com/pskucherov/tcsstat/tree/step3.3 https://github.com/pskucherov/tcsstat/compare/step3.3 Yanzu muna shirye don ƙara ayyukan karɓar zuwa aikace-aikacen mu. Idan an yi daidai, to kuna buƙatar samun rahotannin dillalai don duk wanzuwar asusun. Kuma ga bayanan da suka ɓace, waɗannan T-3 guda ɗaya, sake kunnawa daga ayyuka. Amma ana iya raba wannan zuwa wani labarin dabam. Daga cikin manyan abubuwan da za ku haɗu da su shine don haɗa ayyukan manna da rahoton dillali.

  •  Idan a yau kun karbi rahoton dillalai da ma’amaloli don kwanakin da ake buƙata, sanya shi duka a cikin bayanan, to babu matsaloli. 
  • Za ku sami matsaloli gobe lokacin da kuka karɓi sashe na gaba na bayanai daga rahoton da ayyuka kuma ku yanke shawarar daidaita su tare da bayanan da ke akwai. 
  • Yawancin nuances game da rashin daidaituwa ko canza id bayan sarrafawa
  • Sa’an nan ga kasuwar OTC, id ɗin bai dace ba kwata-kwata.
  •  Kazalika nuances na kayan aikin daidaitawa, waɗanda kuma ba su zo daidai ba, saboda abubuwan da ke tattare da API. Amma wannan wani labari ne.

Bari mu ƙara samun bayanai game da ayyuka a cikin aikace-aikacen mu. Babban tambayar ita ce inda za a sarrafa bayanan da adana su.

  •  Idan ka yi da kanka, za ka cinye bayanai iri ɗaya daga na’urori daban-daban. Sannan kuna buƙatar sarrafawa da adana bayanai akan uwar garken.
  • Idan kuna da bayanai daban-daban da masu amfani da yawa ke cinyewa, to kuna buƙatar yanke shawarar abin da ya fi mahimmanci: saurin masu amfani ko ajiyar ƙarfe a gefen ku. Duk wanda zai iya samun adadin kayan masarufi mara iyaka yana ƙididdige duk abin da ke cikin uwar garken sa kuma ya sa ya zama mafi sauri ga masu amfani, yana adana albarkatun mai amfani, kamar baturi da zirga-zirga, wanda ke da mahimmanci a kan wayoyi.

Bi da bi, ƙidaya a cikin mai binciken ba shine mafi kyawun mafita bisa manufa ba. Saboda haka, abin da ba shi da tsada, muna la’akari da shi akan uwar garken mu. Mun bar sauran ga abokin ciniki. Ina so in ɗauka da lissafin hukumar akan uwar garke. Amma a nan ya zo nuance da ake kira “ma’amala”. Bari mu ce kuna da dubban ayyuka kuma yana ɗaukar mintuna biyar kafin a karɓa. Menene mai amfani zai samu a wannan lokacin? Spinner? Ci gaba? Infa game da nawa aka loda? Yana da kyau a yi amfani da “jiran aiki” lokacin da mai amfani a cikin tsari ya riga ya ga wani abu. Ga Sakamakon:Muna haɓaka microservice ta amfani da API ɗin Tinkoff Invest don sarrafa sarrafa kansa tare da rahotannin dillalai da ƙididdigar kwamitocin.

  • Loda shafi
  • Ana buƙatar duk daftari
  • Bayan haka, ana buƙatar duk ma’amaloli tare da kwamitocin don aiwatar da ma’amaloli don duk asusun. Yayin da ake karɓar bayanai, ana sanya shi a cikin mai bincike.

Don kar a tace bayanai a cikin abubuwan da suka faru kowane lokaci, muna jan namu taron ga kowane asusu. Kamar wannan:

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

Daftarin da za a ƙaddamar yana nan: https://github.com/pskucherov/tcsstat/tree/step3 https://github.com/pskucherov/tcsstat/compare/step2…step3 Ci gaba. Yana da kyau ka karanta wannan layin! 

Lissafi da fitar da bayanan ban sha’awa

Ya dogara da wanda ke buƙatar wane bayani. Saboda haka, nan da nan na gaya muku manyan nuances da za ku ci karo da su.

Yin aiki tare da farashi 

Duk wanda ke aiki tare da kuɗi ya san cewa ma’amalar kuɗi ya kamata a yi tare da lambobi duka kawai. Saboda rashin daidaitattun dabi’u bayan maki goma da kuskuren tarawa tare da adadi mai yawa na ayyuka. Shi ya sa aka gabatar da duk farashin a cikin tsarin MoneyValue mai zuwaMuna haɓaka microservice ta amfani da API ɗin Tinkoff Invest don sarrafa sarrafa kansa tare da rahotannin dillalai da ƙididdigar kwamitocin.

filin nau’in Bayani
kudin waje kirtani Kirtani ISO lambar kuɗi
raka’a int64 Bangaren lamba na jimla, na iya zama lamba mara kyau
nano int32 Bangaren juzu’i na adadin, na iya zama lamba mara kyau

Muna sarrafa su daban, sannan mu kawo su zuwa ƙimar farashin:

zance.units + zance.nano / 1e9

Farashin kwangiloli na gaba

Ana gabatar da farashin makomar gaba a cikin maki, lokacin da kuke da makomar kuɗi, kuna buƙatar sanin ƙimar. Kuma ba shakka farashin a cikin maki da matakin farashin. Lokacin da ka ƙididdige riba daga ma’amaloli, wannan na iya harba, saboda. idan ka lissafta jimillar adadin ta hanyar ninka farashin da yawa. Anan kuna buƙatar yin hankali. A yanzu, za mu ga yadda za ta kasance. Wannan ya shafi makomar kuɗi, a wasu wurare komai yayi daidai da wannan.Muna haɓaka microservice ta amfani da API ɗin Tinkoff Invest don sarrafa sarrafa kansa tare da rahotannin dillalai da ƙididdigar kwamitocin. Muna haɓaka microservice ta amfani da API ɗin Tinkoff Invest don sarrafa sarrafa kansa tare da rahotannin dillalai da ƙididdigar kwamitocin.

OTC kasuwar

Wannan kasuwa tana da fa’idodi da yawa, don haka bari mu yi nazarin yadda ake gudanar da shi daban, lokacin da kuka fara daidaita ayyukan, zai nuna cewa kuna buƙatar kawo figi / ticker zuwa nau’i ɗaya don dacewa da kayan aikin daidai. Lokacin da ka fara aiki tare da wannan tare da rahoton dillalai, zai nuna cewa kasuwancin ID na ma’amala ɗaya yana da haruffa a farkon ma’amala kuma ba sa cikin rahoton dillalai. Saboda haka, ba za a iya kwatanta su ba … ahem-ahem … ta kwatanta! Na yi daidai da lokacin ciniki, tikiti da daidaitawa cewa wannan ciniki yana ƙunshe a cikin wani. Dama, ban sani ba. Duk wanda ya ci karo da wannan kuma wanda ya damu da shi, ya zo batun ko ya fara wani sabon abu.Muna haɓaka microservice ta amfani da API ɗin Tinkoff Invest don sarrafa sarrafa kansa tare da rahotannin dillalai da ƙididdigar kwamitocin.

Ayyukan lissafi akan kayan aiki

Ba shi yiwuwa, ba tare da dubawa ba, yin ayyukan lissafi tare da jerin duka. Don kada mu ƙara dumi zuwa taushi, koyaushe muna duba kuɗin kuɗi kuma mu aiwatar kawai idan mun tabbata cewa kuɗin ya dace, kuma maki an canza su zuwa kudin da ake so. Tare da sanin ilimin aiki tare da lambobin banki, za mu ƙididdige hukumar da aka kashe akan kowane asusun. Kamar wannan: https://github.com/pskucherov/tcsstat/tree/step4 https://github.com/pskucherov/tcsstat/compare/step3…step4Muna haɓaka microservice ta amfani da API ɗin Tinkoff Invest don sarrafa sarrafa kansa tare da rahotannin dillalai da ƙididdigar kwamitocin.    

Microservice yana shirye!

https://github.com/pskucherov/tcsstat A matsayin aikin gida, zaku iya bincika idan sabis ɗin yana aiki tare da jinkirin haɗi, lokacin da haɗin ke karye, lokacin da aka cire haɗin Intanet, lokacin da kurakurai ko ƙarewar iyaka a ɓangaren dillali. 

Ƙarshe da tsare-tsare na gaba

  • Koyi game da ainihin ayyuka da aiki tare da API Invest
  • Lokacin ciyar ~ 10 hours
  • Matsayin wahala ~ ƙarami + / ƙananan tsakiya 

Idan ka ci gaba da tace microservice, za ka iya ƙare da wani abu kamar wannan

https://opexbot.info

  Wannan ci gaban nawa ne, ga masu kasala su gane, su gudu su kirga da kansu. Ina shirin ƙara nazari a can bisa buƙatar masu amfani. Idan kuna son labarin, to ku yi subscribing ɗin tashar telegram ta . Muna haɓaka microservice ta amfani da API ɗin Tinkoff Invest don sarrafa sarrafa kansa tare da rahotannin dillalai da ƙididdigar kwamitocin.

Pavel
Rate author
Add a comment

  1. Isakiiev

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

    Reply