Mamolavola serivisy micro izahay amin’ny alàlan’ny API Tinkoff Invest hanamafisana ny fiasana amin’ny tatitry ny brokerage sy ny kajy komisiona.

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

Ny aingam-panahy ao ambadiky ny fampandrosoana ny serivisy statistika ho an’ny Tinkoff Investments dia:

Inona no horesahina?

  • Ny ampahany ampiharina amin’ny fampandrosoana ihany.
  • Tena fahalalana sy traikefa, izay tena zava-dehibe amin’ny fiaraha-miasa amin’ny fitaovana ara-bola.
  • Fijerena ireo olana tokony hiasana

Noho izany, te hanao kajy ny antontan’isa momba ny varotra aho ary hanao izany amin’ny fomba mety. 

Famolavolana serivisy statistika tsikelikely: 

  1. Fifandraisana amin’ny Tinkoff Invest API
  2. Misintona angona avy amin’ny Tinkoff Invest API amin’ny navigateur
  3. Mandray tatitra momba ny brokerage sy transactions
  4. Kajy sy famoahana ny vaovao mahaliana
  5. Fehiny sy drafitra ho an’ny ho avy

Fifandraisana amin’ny Tinkoff Invest API

Raha te hifandray amin’ny API dia azonao atao ny maka sdk rehetra avy amin’ny antontan-taratasy https://github.com/Tinkoff/investAPI#sdk . Na fonosana npm ` tinkoff-sdk-grpc-js` . Zava-dehibe ny havaozin’ny mpamorona ny fonosana amin’ny dikan-teny farany. hametraka

npm sy tinkoff-sdk-grpc-js

fanamarinana

const {createSdk} = mitaky(‘tinkoff-sdk-grpc-js’);   // Token azo alaina toy ity  const TOKEN = ‘YOURAPI’;   // Ny anaran’ny rindranasa ahitana anao ao amin’ny logs TCS. const appName = ‘tcsstat’;   const sdk = createSdk(TOKEN, appName); (async () => {     console.log(miandry sdk.users.getAccounts()); })();

Vokany: haseho ao amin’ny console ny lisitry ny kaontinao. Ohatra, andeha hodinihintsika ny nuances:Mamolavola serivisy micro izahay amin'ny alàlan'ny API Tinkoff Invest hanamafisana ny fiasana amin'ny tatitry ny brokerage sy ny kajy komisiona.

  • Ao amin’ny lisitry ny kaonty dia misy “banky fampiasam-bola”, izay tsy ahafahanao miasa amin’ny API
  • Mariho fa ny saha dia tonga amin’ny camelCase, raha ao amin’ny antontan-taratasy ireo saha ireo dia aseho amin’ny under_score. 
  • Ho toy izany na aiza na aiza, ka tsy afaka maka sy mandika saha avy amin’ny antontan-taratasy fotsiny ianao.

Mahasoa:

  • Hitanao ao amin’ny sampana tetikasa ity kaody ity

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

Misintona angona avy amin’ny Tinkoff Invest API amin’ny navigateur

Nalaiko ny next.js sy socket.io. Tsy tolo-kevitra matanjaka izany, misafidy araka ny fanapahan-kevitrao. 

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

Miroso avy hatrany amin’ny dingana fisakaizana manaraka+socket+investapi izahay, ary jereo ny fizarana mahasoa amin’ity dingana ity ho an’ny antsipiriany rehetra.  Holazaiko ny antsipiriany: 

  • Eo amin’ny lafiny nodejs (server), misy rakitra pages/api/investapi.js. Eto no mamorona ny server socket.io ary mifandray amin’ny investapi.
  • Amin’ny lafiny navigateur (client), mifandray amin’ny mpizara amin’ny alàlan’ny socket izahay ary mangataka angon-drakitra amin’ny broker. 
  • Mahazo angona avy amin’ny broker amin’ny mpizara izahay, avy eo alefa any amin’ny mpanjifa. Rehefa voaray amin’ny mpanjifa izy ireo dia aseho amin’ny navigateur. 

Vokatra:  ao amin’ny console navigateur dia afaka mahita fampahalalana momba ny kaonty. Izany hoe, tamin’ny dingana farany dia nahita fampahalalana momba ny kaonty ao amin’ny console server (nodejs), amin’ny dingana ankehitriny, nafindranay tamin’ny mpanjifa (browser) ity fampahalalana ity.

Mamolavola serivisy micro izahay amin'ny alàlan'ny API Tinkoff Invest hanamafisana ny fiasana amin'ny tatitry ny brokerage sy ny kajy komisiona.

Andeha hojerentsika izao mba hahafahanao misafidy kaonty avy amin’ny navigateur, ary raha tsy misy marika, dia misy hadisoana alefa any amin’ny console. Tsotra ny asa ary tsy misy zava-baovao, ka rohy mankany amin’ny fanoloran-tena ihany no omeko

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

Mahasoa:

  • Ny fomba hahazoana namana manaraka sy ny socket dia voalaza amin’ny antsipiriany eto
  • Kaody finamanana manaraka+socket+investapi:

https://github.com/pskucherov/tcsstat/commit/a443a4ac1bb4f0aa898f638128755fe7391ee381 Ho an’izay sarotra ny voalaza etsy ambony, dia mijanona amin’ity dingana ity isika ary miatrika ny code. Raha manana fanontaniana ianao – anontanio. https://github.com/pskucherov/tcsstat/tree/step2 https://github.com/pskucherov/tcsstat/compare/step1…step2

Mandray tatitra momba ny brokerage sy transactions

Misy fomba telo handraisana tatitra sy fifampiraharahana amin’ny brokerage

  1. GetBrokerReport
  2. GetDividendsForeignIssuer
  3. GetOperationsByCursor

Hatrany am-boalohany dia zava-dehibe ny mahafantatra: 

  • Ny tatitra momba ny brokerage dia novokarina tamin’ny fomba T-3, i.e. ny varotra dia aseho ao aorian’ny famonoana azy ireo. 
  • Araka izany, raha mangataka ity tatitra ity mandritra ny roa andro farany ianao dia ho vonona ao anatin’ny telo andro. 
  • Mba hanaovana fifanarahana amin’ny andro farany dia mampiasa ny fomba fandraisana hetsika izahay, saingy tadidio fa mety hiova ny id sy ny atiny aorian’ny fananganana ny tatitra momba ny brokerage.

GetBrokerReport

Mba hahazoana tatitra momba ny brokerage dia mila maka ny ID kaonty, daty fanombohana ary daty fiafaran’ny tatitra, fa tsy mihoatra ny 31 andro. Mandefa fangatahana hamoaka tatitra amin’ny API izahay amin’ny famoronana _broker_report_request , mahazo taskId ho valin’izany. Aorian’izay, amin’ny fampiasana ity taskId ity dia mahazo angona avy amin’ny get _broker_report_response.

Noho izany hoy ny antontan-taratasy, raha ny marina dia misy ny nuances. Tandremo ny tananao:

  • Mila mitahiry ny TaskID mandrakizay ianao amin’ireo daty ireo. 
  • Satria raha very ianao, dia ho an’ny daty nangatahana ny tatitra dia ho avy voalohany ho valin’ny fangatahana taranaka, 
  • Ary avy eo dia tsy ho tonga mihitsy.

Andao hanomboka hanoratra kaody

Fomba hahazoana ny daty, amin’ny fiheverana ny fanalana amin’ny daty ankehitriny

const getDateSubDay = (subDay = 5, manomboka = marina) => {     const date = new Date();     date.setUTCDate(date.getUTCDate() – subDay);       raha (manomboka) {         date.setUTCHours(0, 0, 0, 0);     } hafa {         date.setUTCHours(23, 59, 59, 999);     }       daty fiverenana; };

Tatitra ny fangatahana famoronana 

const brokerReport = miandry (sdk.operations.getBrokerReport)({         generateBrokerReportRequest: {             accountId,             from,             to,         }, });

Vokatra:

  • Vokatry ny fanatanterahana voalohany ny baiko dia mahazo ny taskId. 
  • Ny tatitra dia manomboka mivoaka amin’ny lafiny broker. Rehefa vonona dia tsy fantatra, miandry izahay ary misintona tsindraindray ny taskId amin’ny fiandrasana ny tatitra.
  • Nahoana? Satria raha tsy vonona ny tatitra dia miteraka fahadisoana. Raha tsy vonona ny tatitra eo amin’ny lafiny broker, dia hadisoana amin’ny codeo izany. Alefaso azafady: 30058|INVALID_ARGUMENT|asa mbola tsy vita, andramo indray rahatrizay

Ny kaody amin’ny fiandrasana sy ny fandraisana tatitra dia toa izao.

const timer = async time => {     avereno vaovao Promise(mamaha => setTimeout(mamaha, fotoana)); }   const getBrokerResponseByTaskId = async (taskId, page = 0) => {     andramo {         fiverenana miandry (sdk.operations.getBrokerReport)({             getBrokerReportRequest: {                 taskId,                 page,             },         });     } catch (e) {         console.log(‘miandry’, e);         miandry fotoana (10000);         miverina miandry getBrokerResponseByTaskId(taskId, page);     } };

Dia toy izany koa no mitranga. Atsaharo ny scripty, atombohy indray, tsy manana taskId izahay. Manatanteraka ny kaody miaraka amin’ny fangatahana taskId izahay, saingy tsy mahazo ny taskId intsony, fa avy hatrany ny tatitra. Magic! Ary tsara ny zava-drehetra raha toa ka toy izao foana. Saingy ao anatin’ny iray volana dia tsy hisy data mihitsy. mahasoa :

  • Misy teoria asongadina eto sy eto .
  • Ny fametahana ny kaody dia ho toy izao ny drafitra.

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

  • Raha misy olona mahita an’io dia tongasoa eto amin’ity olana ity . Rehefa avy nanamboatra an’io ody io izy ireo dia ho very ny heriny ary ho hafa mihitsy. Fa amin’izao fotoana izao (03/21/2023) dia miasa toy izany ihany.

GetDividendsForeignIssuer

Mety hisy hieritreritra fa mitovy amin’ny teo aloha ilay fomba ary azonao atao ny mampiasa fomba tokana izay hanovanao ny anaran’ny asa ihany. Saingy tsy noeritreretin’izy ireo!  Ny anarana ao dia samy hafa be na amin’ny fomba na amin’ny fampahalalana naverina. Ary ny isan’ny pejy dia manomboka amin’ny 0, avy eo amin’ny 1. Mba tsy ho very hevitra amin’izany rehetra izany, dia mora kokoa ny manoratra fomba roa samy hafa. Izay hafahafa, satria mitovy ihany ny lojikan’ny asa. Nandrora nandritra ny fotoana ela aho rehefa nanandrana nanao fomba iray ary tsy dia nisy code. Tsy hisy ohatra eto.

GetOperationsByCursor

Ny tiako indrindra amin’izy telo. Na dia tsy ny marina indrindra, fa ny ampy indrindra. Manao fangatahana izahay manomboka amin’ny fiandohan’ny famoronana kaonty ka hatramin’ny daty farany azo atao (fanakatonana kaonty na ny ankehitriny). Azontsika ny valiny, alao ny cursor ary avereno fangatahana raha mbola misy angona.  Ary ny fehezan-dalàna dia fohy kokoa noho ireo ohatra etsy ambony.

const timer = async time => {     avereno vaovao Promise(mamaha => setTimeout(mamaha, fotoana)); }   const getOperationsByCursor = async (sdk, accountId, from, to, cursor = ”) => {     andramo {         const reqData = {             accountId,             from,             to,             limit: 1000,             state: sdk.OperationState.OPERATION_STATE_EXECUTED,             without Commissions: false,             tsy misy varotra: diso,             tsy misyOvernights: diso,             cursor,         };           miverina miandry sdk.operations.getOperationsByCursor(reqData);     } catch (e) {         miandry fameram-potoana(60000);         miverina miandry getOperationsByCursor(sdk, accountId, from, to, cursor = ”);     } };

Eto ny volavolan-drafitra handrosoana: https://github.com/pskucherov/tcsstat/tree/step3.3 https://github.com/pskucherov/tcsstat/compare/step3.3 Ankehitriny dia vonona izahay hanampy ny asa fandraisana amin’ny ny fampiharana anay. Raha vita tsara, dia mila mahazo tatitra momba ny brokerage ianao amin’ny fisian’ny kaonty manontolo. Ary ho an’ny angon-drakitra tsy hita, ireo T-3 ireo ihany, avereno avy amin’ny asa. Azo zaraina ho lahatsoratra misaraka anefa izany. Amin’ireo nuance lehibe ho hitanao dia ny fametahana asa sy ny tatitra momba ny brokerage.

  •  Raha androany ianao dia nahazo tatitra momba ny brokerage sy ny fifampiraharahana ho an’ny daty takiana, apetraho ao anaty angon-drakitra izany rehetra izany, dia tsy misy olana. 
  • Hanana olana ianao rahampitso rehefa mahazo ny ampahany manaraka amin’ny angona avy amin’ny tatitra sy ny asa ary manapa-kevitra ny hampifanaraka azy ireo amin’ny angon-drakitra efa misy. 
  • Betsaka ny nuance momba ny tsy mifanandrify na ny fanovana ID aorian’ny fanodinana
  • Avy eo ho an’ny tsenan’ny OTC dia tsy mifanaraka mihitsy ny id.
  •  Ary koa ny nuances ny synchronizing fitaovana, izay indray dia tsy mifanojo, noho ny mampiavaka ny API. Tantara hafa anefa izany.

Andeha isika hanampy ny fahazoana fampahalalana momba ny asa amin’ny fampiharana. Ny fanontaniana lehibe dia ny hoe aiza no hikarakarana sy hitehirizana ny angona.

  •  Raha manao izany ho an’ny tenanao ianao dia handany data mitovy amin’ny fitaovana samihafa. Avy eo dia mila manamboatra sy mitahiry data amin’ny mpizara ianao.
  • Raha manana angon-drakitra maro samihafa lanin’ny mpampiasa maro samihafa ianao, dia mila manapa-kevitra ianao hoe inona no zava-dehibe kokoa: ny hafainganam-pandehan’ny mpampiasa na ny fitahirizana vy eo anilanao. Na iza na iza afaka mividy fitaovana tsy manam-petra dia manisa ny zava-drehetra ao amin’ny lohamiliny ary manao izany haingana be ho an’ny mpampiasa, mitahiry ny loharanon’ny mpampiasa, toy ny bateria sy ny fifamoivoizana, izay tena zava-dehibe amin’ny telefaona.

Ho setrin’izany, ny fanisana ao amin’ny navigateur dia tsy vahaolana tsara indrindra amin’ny fitsipika. Noho izany, izay tsy lafo dia heverintsika amin’ny mpizara. Avelanay ho an’ny mpanjifa ny ambiny. Tena te haka sy kajy ny vaomiera amin’ny server aho. Saingy tonga eto ny nuance antsoina hoe “interactivity”. Aoka hatao hoe manana asa an’arivony ianao ary dimy minitra vao mahazo azy ireo. Inona no ho azon’ny mpampiasa amin’izao fotoana izao? Spinner? Fandrosoana? Infa momba ny ohatrinona no nampidirina? Tena tsara ny mampiasa “fiandrasana mavitrika” rehefa afaka mahita zavatra ny mpampiasa ao anatin’ilay dingana. Ity ny valiny:Mamolavola serivisy micro izahay amin'ny alàlan'ny API Tinkoff Invest hanamafisana ny fiasana amin'ny tatitry ny brokerage sy ny kajy komisiona.

  • Fampidirana pejy
  • Angatahina ny faktiora rehetra
  • Aorian’izay dia angatahina ny fifampiraharahana rehetra miaraka amin’ny komisiona ho an’ny varotra vita amin’ny kaonty rehetra. Rehefa voaray ny angona dia adika ao amin’ny navigateur izany.

Mba tsy hanivana ny angon-drakitra isaky ny hetsika, dia misintona hetsika manokana ho an’ny kaonty tsirairay izahay. Toa izao:

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

Ny drafitra hatomboka dia eto: https://github.com/pskucherov/tcsstat/tree/step3 https://github.com/pskucherov/tcsstat/compare/step2…step3 Mandrosoa. Mahafinaritra fa namaky ity andalana ity ianao! 

Kajy sy famoahana ny vaovao mahaliana

Miankina amin’izay mila fanazavana inona. Noho izany, lazaiko aminao avy hatrany ny nuance lehibe izay ho hitanao.

Miasa amin’ny vidiny 

Ny olona rehetra miasa amin’ny fitantanam-bola dia mahafantatra fa ny fifampiraharahana amin’ny vola dia tokony hatao amin’ny isa manontolo. Noho ny tsy fahatomombanan’ny soatoavina aorian’ny teboka decimal sy ny fahadisoana mitambatra miaraka amin’ny asa marobe. Izany no mahatonga ny vidiny rehetra aseho amin’ny endrika MoneyValue manarakaMamolavola serivisy micro izahay amin'ny alàlan'ny API Tinkoff Invest hanamafisana ny fiasana amin'ny tatitry ny brokerage sy ny kajy komisiona.

SaHa karazana Description
Sandam-bola tady String ISO currency code
vondrona int64 Ampahany integer amin’ny fitambarana, mety ho isa ratsy
nano int32 Ny ampahany kely amin’ny vola, dia mety ho isa ratsy

Manaraka azy ireo izahay, avy eo mitondra azy ireo amin’ny sandan’ny vidiny:

quotation.units + quotation.nano / 1e9

Ny vidin’ny fifanarahana amin’ny hoavy

Ny vidin’ny hoavy dia aseho amin’ny teboka, rehefa manana vola ho avy ianao dia mila mahafantatra ny tahan’ny. Ary mazava ho azy ny vidiny amin’ny teboka sy ny dingana amin’ny vidiny. Rehefa manao kajy ny tombom-barotra amin’ny fifanakalozana, dia afaka mitifitra izany, satria. raha manao kajy ny totalin’ny vola ianao amin’ny fampitomboana ny vidiny amin’ny habetsahana. Eto ianao dia mila mitandrina. Hojerentsika aloha ny fandehany. Izany dia mihatra amin’ny vola ho avin’ny vola, any amin’ny toerana hafa dia mety ny zava-drehetra amin’izany.Mamolavola serivisy micro izahay amin'ny alàlan'ny API Tinkoff Invest hanamafisana ny fiasana amin'ny tatitry ny brokerage sy ny kajy komisiona. Mamolavola serivisy micro izahay amin'ny alàlan'ny API Tinkoff Invest hanamafisana ny fiasana amin'ny tatitry ny brokerage sy ny kajy komisiona.

tsena OTC

Ity tsena ity dia manana endri-javatra maro, noho izany dia andao isika handinika manokana ny asa momba azy. Rehefa manomboka mampifanaraka ny asa ianao dia ho hita fa mila mitondra figi / ticker amin’ny endrika mitovy ianao mba hifanaraka tsara amin’ilay fitaovana. Rehefa manomboka mampifanaraka izany amin’ny tatitry ny brokerage ianao dia ho hita fa ny tradeID amin’ny fifanakalozana mitovy dia manana taratasy any am-piandohana amin’ny fifampiraharahana ary tsy ao amin’ny tatitra brokerage izy ireo. Noho izany dia tsy azo ampitahaina izy ireo … ahem-ahem … raha ampitahaina! Nampifanaraka ny fotoana varotra aho, ticker ary mifanandrify amin’ny tradeId iray ao amin’ny iray hafa. Marina fa tsy fantatro. Na iza na iza sendra an’izany ary miraharaha izany, tongava amin’ny olana na manomboka vaovao.Mamolavola serivisy micro izahay amin'ny alàlan'ny API Tinkoff Invest hanamafisana ny fiasana amin'ny tatitry ny brokerage sy ny kajy komisiona.

Hetsika matematika amin’ny fitaovana

Tsy azo atao, raha tsy mijery, ny manao asa matematika miaraka amin’ny lisitra iray manontolo. Mba tsy hampidirana mafana amin’ny malefaka, dia manamarina foana ny vola sy ny fizotrany raha toa ka azo antoka fa mifanaraka ny vola, ary ny teboka dia avadika amin’ny vola irina. Miaraka amin’ny fahalalana momba ny fiasana amin’ny laharan’ny banky, dia hanao kajy ny vaomiera lany amin’ny kaonty tsirairay. Toy izao: https://github.com/pskucherov/tcsstat/tree/step4 https://github.com/pskucherov/tcsstat/compare/step3…step4Mamolavola serivisy micro izahay amin'ny alàlan'ny API Tinkoff Invest hanamafisana ny fiasana amin'ny tatitry ny brokerage sy ny kajy komisiona.    

Microservice dia vonona!

https://github.com/pskucherov/tcsstat Amin’ny maha entimody, azonao atao ny manamarina raha miasa amin’ny fifandraisana miadana ny serivisy, rehefa tapaka ny fifandraisana, rehefa tapaka ny Internet, rehefa misy hadisoana na fetra lany amin’ny ampahany amin’ny broker. 

Fehiny sy drafitra ho an’ny ho avy

  • Nianatra momba ny asa fototra sy ny fiaraha-miasa amin’ny Invest API
  • Fotoana lany ~ 10 ora
  • Ambaratonga fahasahiranana ~ zandriny+ / ambany afovoany 

Raha manohy manatsara ny microservice ianao dia mety hiafara amin’ny zavatra toy izao

https://opexbot.info

  Izany no fivoarana ho ahy, ho an’ireo izay kamo loatra ka mahazo, mihazakazaka ary manisa ny tenany. Mikasa ny hanampy analyse aho any noho ny fangatahan’ny mpampiasa. Raha tianao ilay lahatsoratra dia misoratra anarana amin’ny fantsona telegramako . Mamolavola serivisy micro izahay amin'ny alàlan'ny API Tinkoff Invest hanamafisana ny fiasana amin'ny tatitry ny brokerage sy ny kajy komisiona.

Pavel
Rate author
Add a comment

  1. Isakiiev

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

    Reply