ພວກເຮົາກໍາລັງພັດທະນາບໍລິການຈຸລະພາກໂດຍໃຊ້ Tinkoff Invest API ເພື່ອອັດຕະໂນມັດການເຮັດວຽກກັບລາຍງານນາຍຫນ້າແລະການຄິດໄລ່ຄ່ານາຍຫນ້າ.

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

ແຮງບັນດານໃຈທີ່ຢູ່ເບື້ອງຫຼັງການພັດທະນາ ການບໍລິການສະຖິຕິ ສໍາລັບການລົງທຶນ Tinkoff ແມ່ນ:

ສິ່ງທີ່ຈະໄດ້ຮັບການປຶກສາຫາລື?

  • ພຽງແຕ່ສ່ວນທີ່ນໍາໃຊ້ກ່ຽວກັບການພັດທະນາ.
  • ຄວາມຮູ້ແລະປະສົບການທີ່ແທ້ຈິງ, ເຊິ່ງມີຄວາມສໍາຄັນຫຼາຍໃນການເຮັດວຽກກັບເຄື່ອງມືທາງດ້ານການເງິນ.
  • ພາບລວມຂອງບັນຫາທີ່ຈະເຮັດວຽກ

ດັ່ງນັ້ນ, ຂ້ອຍຕ້ອງການຄິດໄລ່ສະຖິຕິການຄ້າແລະເຮັດມັນດ້ວຍວິທີທີ່ສະດວກ. 

ການພັດທະນາການບໍລິການສະຖິຕິເທື່ອລະກ້າວ: 

  1. ການເຊື່ອມຕໍ່ກັບ Tinkoff Invest API
  2. ການແຕ້ມຂໍ້ມູນຈາກ Tinkoff Invest API ໃນຕົວທ່ອງເວັບ
  3. ຮັບລາຍງານນາຍໜ້າ ແລະທຸລະກຳ
  4. ການຄິດໄລ່ແລະຜົນຜະລິດຂອງຂໍ້ມູນຄວາມສົນໃຈ
  5. ບົດສະຫຼຸບແລະແຜນການສໍາລັບອະນາຄົດ

ການເຊື່ອມຕໍ່ກັບ Tinkoff Invest API

ເພື່ອເຊື່ອມຕໍ່ກັບ API, ທ່ານສາມາດເອົາ sdk ໃດໆຈາກເອກະສານ https://github.com/Tinkoff/investAPI#sdk . ຫຼືຊຸດ npm ` tinkoff-sdk-grpc-js` . ມັນເປັນສິ່ງສໍາຄັນທີ່ແພັກເກັດຖືກປັບປຸງເປັນສະບັບຫລ້າສຸດໂດຍນັກພັດທະນາ. ຕິດຕັ້ງ

npm i tinkoff-sdk-grpc-js

ກຳລັງກວດສອບ

const { createSdk } = require(‘tinkoff-sdk-grpc-js’);   // Token ທີ່ສາມາດໄດ້ຮັບ ເຊັ່ນນີ້  const TOKEN = ‘YOURAPI’;   // ຊື່ຂອງແອັບພລິເຄຊັນທີ່ທ່ານສາມາດພົບເຫັນຢູ່ໃນບັນທຶກ TCS. const appName = ‘tcsstat’;   const sdk = createSdk(TOKEN, appName); (async () => {     console.log(await sdk.users.getAccounts()); })();

ຜົນໄດ້ຮັບ: ບັນຊີລາຍຊື່ຂອງບັນຊີຂອງທ່ານຈະຖືກສະແດງຢູ່ໃນ console. ສໍາລັບຕົວຢ່າງ, ໃຫ້ພວກເຮົາ ວິເຄາະ nuances:ພວກເຮົາກໍາລັງພັດທະນາບໍລິການຈຸລະພາກໂດຍໃຊ້ Tinkoff Invest API ເພື່ອອັດຕະໂນມັດການເຮັດວຽກກັບລາຍງານນາຍຫນ້າແລະການຄິດໄລ່ຄ່ານາຍຫນ້າ.

  • ໃນບັນຊີລາຍຊື່ຂອງບັນຊີມີ “ທະນາຄານການລົງທຶນ”, ທີ່ທ່ານບໍ່ສາມາດເຮັດວຽກໂດຍໃຊ້ API ໄດ້
  • ກະ​ລຸ​ນາ​ສັງ​ເກດ​ວ່າ​ພາກ​ສະ​ຫນາມ​ມາ​ໃນ camelCase​, ໃນ​ຂະ​ນະ​ທີ່​ໃນ ​ເອ​ກະ​ສານ ​ພາກ​ສະ​ຫນາມ​ເຫຼົ່າ​ນີ້​ແມ່ນ​ໄດ້​ນໍາ​ສະ​ເຫນີ​ໃນ under_score​. 
  • ມັນຈະເປັນແບບນີ້ຢູ່ທົ່ວທຸກແຫ່ງ, ດັ່ງນັ້ນທ່ານບໍ່ສາມາດພຽງແຕ່ເອົາແລະສໍາເນົາພາກສະຫນາມຈາກເອກະສານ.

ທີ່ເປັນປະໂຫຍດ:

  • ທ່ານສາມາດຊອກຫາລະຫັດນີ້ຢູ່ໃນສາຂາໂຄງການ

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

ການແຕ້ມຂໍ້ມູນຈາກ Tinkoff Invest API ໃນຕົວທ່ອງເວັບ

ຂ້ອຍເອົາ next.js ແລະ socket.io. ນີ້ບໍ່ແມ່ນຄໍາແນະນໍາທີ່ເຂັ້ມແຂງ, ເລືອກຕາມການຕັດສິນໃຈຂອງທ່ານ. 

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

ພວກເຮົາສືບຕໍ່ໄປຫາຂັ້ນຕອນມິດຕະພາບຕໍ່ໄປ + socket + investapi, ແລະເບິ່ງ ສ່ວນ ທີ່ເປັນປະໂຫຍດ ຂອງຂັ້ນຕອນນີ້ສໍາລັບລາຍລະອຽດທັງຫມົດ.  ຂ້ອຍຈະອະທິບາຍລາຍລະອຽດ: 

  • ຢູ່ຂ້າງ nodejs (ເຊີບເວີ), ມີໄຟລ໌ pages/api/investapi.js. ນີ້ແມ່ນບ່ອນທີ່ພວກເຮົາສ້າງເຄື່ອງແມ່ຂ່າຍ socket.io ແລະເຊື່ອມຕໍ່ກັບ investapi.
  • ໃນດ້ານຂອງຕົວທ່ອງເວັບ (ລູກຄ້າ), ພວກເຮົາເຊື່ອມຕໍ່ກັບເຄື່ອງແມ່ຂ່າຍໂດຍຜ່ານ socket ແລະຮ້ອງຂໍຂໍ້ມູນບັນຊີຈາກນາຍຫນ້າ. 
  • ພວກເຮົາໄດ້ຮັບຂໍ້ມູນຈາກນາຍຫນ້າໃນເຄື່ອງແມ່ຂ່າຍ, ຫຼັງຈາກນັ້ນສົ່ງໃຫ້ລູກຄ້າ. ເມື່ອພວກເຂົາໄດ້ຮັບໃນລູກຄ້າ, ພວກເຂົາຖືກສະແດງຢູ່ໃນຕົວທ່ອງເວັບ. 

ຜົນໄດ້ຮັບ:  ໃນ browser console ພວກເຮົາສາມາດເບິ່ງຂໍ້ມູນກ່ຽວກັບບັນຊີ. ນັ້ນແມ່ນ, ໃນຂັ້ນຕອນສຸດທ້າຍ, ພວກເຮົາໄດ້ເຫັນຂໍ້ມູນກ່ຽວກັບບັນຊີໃນ server console (nodejs), ໃນຂັ້ນຕອນປະຈຸບັນ, ພວກເຮົາໄດ້ໂອນຂໍ້ມູນນີ້ໃຫ້ກັບລູກຄ້າ (ຕົວທ່ອງເວັບ).

ພວກເຮົາກໍາລັງພັດທະນາບໍລິການຈຸລະພາກໂດຍໃຊ້ Tinkoff Invest API ເພື່ອອັດຕະໂນມັດການເຮັດວຽກກັບລາຍງານນາຍຫນ້າແລະການຄິດໄລ່ຄ່ານາຍຫນ້າ.

ຕອນນີ້ໃຫ້ພວກເຮົາເຮັດໃຫ້ມັນເພື່ອໃຫ້ທ່ານສາມາດເລືອກບັນຊີຈາກຕົວທ່ອງເວັບ, ແລະຖ້າບໍ່ມີ token, ຂໍ້ຜິດພາດຈະຖືກສົ່ງໄປຫາ console. ການເຮັດວຽກແມ່ນງ່າຍດາຍແລະບໍ່ມີຫຍັງໃຫມ່, ສະນັ້ນຂ້າພະເຈົ້າໃຫ້ພຽງແຕ່ການເຊື່ອມຕໍ່ກັບຄໍາຫມັ້ນສັນຍາ

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

ທີ່ເປັນປະໂຫຍດ:

  • ວິ​ທີ​ການ​ເຮັດ​ໃຫ້​ຫມູ່​ເພື່ອນ​ຕໍ່​ໄປ​ແລະ​ເຕົ້າ​ຮັບ​ແມ່ນ​ອະ​ທິ​ບາຍ​ໃນ​ລາຍ​ລະ​ອຽດ ​ທີ່​ນີ້ ​. 
  • ລະຫັດມິດຕະພາບຕໍ່ໄປ+socket+investapi:

https://github.com/pskucherov/tcsstat/commit/a443a4ac1bb4f0aa898f638128755fe7391ee381 ສໍາລັບໃຜຂ້າງເທິງແມ່ນມີຄວາມຫຍຸ້ງຍາກ, ຫຼັງຈາກນັ້ນພວກເຮົາຍັງຄົງຢູ່ໃນຂັ້ນຕອນນີ້ແລະຈັດການກັບລະຫັດ. ຖ້າທ່ານມີຄໍາຖາມ – ຖາມ. https://github.com/pskucherov/tcsstat/tree/step2 https://github.com/pskucherov/tcsstat/compare/step1…step2

ຮັບລາຍງານນາຍໜ້າ ແລະທຸລະກຳ

ມີ ສາມວິທີ ທີ່ຈະໄດ້ຮັບລາຍງານນາຍຫນ້າແລະການເຮັດທຸລະກໍາ

  1. GetBrokerReport
  2. ໄດ້ຮັບເງິນປັນຜົນຂອງຜູ້ອອກຕ່າງປະເທດ
  3. GetOperationsByCursor

ຕັ້ງແຕ່ເລີ່ມຕົ້ນ ມັນເປັນສິ່ງສໍາຄັນທີ່ຈະຮູ້ວ່າ: 

  • ບົດລາຍງານນາຍຫນ້າແມ່ນຖືກສ້າງຂຶ້ນໃນໂຫມດ T-3, i.e. ການຄ້າໄດ້ຖືກສະແດງຢູ່ທີ່ນັ້ນຫຼັງຈາກການປະຕິບັດຕົວຈິງຂອງພວກເຂົາ. 
  • ຕາມ​ນັ້ນ​ແລ້ວ, ຖ້າ​ຫາກ​ທ່ານ​ຮ້ອງ​ຂໍ​ບົດ​ລາຍ​ງານ​ນີ້​ໃນ​ສອງ​ມື້​ສຸດ​ທ້າຍ, ມັນ​ຈະ​ມີ​ຄວາມ​ພ້ອມ​ໃນ​ສາມ​ມື້. 
  • ເພື່ອເຮັດໃຫ້ຂໍ້ສະເຫນີສໍາລັບມື້ສຸດທ້າຍ, ພວກເຮົານໍາໃຊ້ວິທີການສໍາລັບການໄດ້ຮັບການດໍາເນີນງານ, ແຕ່ຈື່ໄວ້ວ່າ id ແລະເນື້ອໃນຂອງເຂົາເຈົ້າອາດຈະມີການປ່ຽນແປງຫຼັງຈາກການສ້າງຕັ້ງຂອງບົດລາຍງານນາຍຫນ້າ.

GetBrokerReport

ເພື່ອໃຫ້ໄດ້ຮັບລາຍງານນາຍຫນ້າ, ທ່ານຈໍາເປັນຕ້ອງເອົາ id ບັນຊີ, ວັນທີເລີ່ມຕົ້ນແລະວັນທີສິ້ນສຸດຂອງບົດລາຍງານ, ແຕ່ບໍ່ເກີນ 31 ມື້. ພວກເຮົາສົ່ງຄໍາຮ້ອງຂໍເພື່ອສ້າງບົດລາຍງານໄປຫາ API ໃນ generate _broker_report_request , ໄດ້ຮັບ taskId ໃນການຕອບສະຫນອງ. ຫຼັງຈາກນັ້ນ, ການນໍາໃຊ້ taskId ນີ້, ພວກເຮົາໄດ້ຮັບຂໍ້ມູນຈາກ get _broker_report_response.

ສະ ນັ້ນ ເອ ກະ ສານ ເວົ້າ ວ່າ, ໃນ ຄວາມ ເປັນ ຈິງ ມີ nuances. ຈົ່ງ ເບິ່ງ ມື ຂອງ ທ່ານ:
  • ທ່ານຈໍາເປັນຕ້ອງບັນທຶກ TaskID ຕະຫຼອດໄປສໍາລັບວັນທີເຫຼົ່ານີ້. 
  • ເນື່ອງຈາກວ່າຖ້າທ່ານສູນເສຍມັນ, ຫຼັງຈາກນັ້ນສໍາລັບວັນທີທີ່ຮ້ອງຂໍ, ບົດລາຍງານຈະມາຄັ້ງທໍາອິດເພື່ອຕອບສະຫນອງຄໍາຮ້ອງຂໍການຜະລິດ, 
  • ແລະຫຼັງຈາກນັ້ນມັນຈະບໍ່ມາເລີຍ.
ມາເລີ່ມຂຽນລະຫັດກັນເລີຍ

ວິທີການສໍາລັບການໄດ້ຮັບວັນທີ, ຄໍານຶງເຖິງການຫັກລົບຈາກວັນທີປະຈຸບັນ

const getDateSubDay = (subDay = 5, start = true) => {     const date = new Date();     date.setUTCDate(date.getUTCDate() – subDay);       ຖ້າ (ເລີ່ມຕົ້ນ) {         date.setUTCHours(0, 0, 0, 0);     } else {         date.setUTCHours(23, 59, 59, 999);     }       ວັນທີກັບຄືນ; };

ລາຍງານການຮ້ອງຂໍການຜະລິດ 

const brokerReport = ລໍຖ້າ (sdk.operations.getBrokerReport)({         generateBrokerReportRequest: {             accountId,             from,             to,         }, });

ຜົນໄດ້ຮັບ:

  • ເປັນຜົນມາຈາກການປະຕິບັດຄໍາສັ່ງທໍາອິດ, ພວກເຮົາໄດ້ຮັບ taskId. 
  • ບົດລາຍງານເລີ່ມຖືກສ້າງຂື້ນໃນດ້ານຂອງນາຍຫນ້າ. ໃນເວລາທີ່ມັນກຽມພ້ອມແມ່ນບໍ່ຮູ້ຈັກ, ພວກເຮົາລໍຖ້າແລະເປັນໄລຍະໆດຶງ TaskId ໃນຄວາມຄາດຫວັງຂອງບົດລາຍງານ.
  • ເປັນຫຍັງ? ເນື່ອງຈາກວ່າຖ້າຫາກວ່າບົດລາຍງານບໍ່ພ້ອມ, ມັນຖິ້ມຄວາມຜິດພາດ. ຖ້າບົດລາຍງານບໍ່ກຽມພ້ອມໃນດ້ານຂອງນາຍຫນ້າ, ນີ້ແມ່ນຄວາມຜິດພາດໃນລະຫັດຂອງທ່ານ. ກະລຸນາປະມວນຜົນ: 30058|INVALID_ARGUMENT|ໜ້າວຽກຍັງບໍ່ສຳເລັດເທື່ອ, ກະລຸນາລອງໃໝ່ໃນພາຍຫຼັງ.

ລະຫັດສໍາລັບການລໍຖ້າແລະຮັບບົດລາຍງານມີລັກສະນະເປັນແບບນີ້.

const timer = ເວລາ async => {     return new Promise(ແກ້ໄຂ => setTimeout(ແກ້ໄຂ, ເວລາ)); }   const getBrokerResponseByTaskId = async (taskId, page = 0) => {     try {         return await (sdk.operations.getBrokerReport)({             getBrokerReportRequest: {                 taskId,                 page,             },         });     } catch (e) {         console.log(‘ລໍຖ້າ’, e);         ລໍຖ້າຈັບເວລາ (10000);         ກັບຄືນລໍຖ້າ getBrokerResponseByTaskId(taskId, ຫນ້າ);     } } ;

ຫຼັງຈາກນັ້ນ, magic ດຽວກັນເກີດຂຶ້ນ. ພວກເຮົາຢຸດສະຄຣິບຂອງພວກເຮົາ, ເລີ່ມຕົ້ນມັນອີກເທື່ອຫນຶ່ງ, ພວກເຮົາບໍ່ມີ taskId. ພວກເຮົາປະຕິບັດລະຫັດດ້ວຍການຮ້ອງຂໍ taskId, ແຕ່ພວກເຮົາບໍ່ໄດ້ຮັບ taskId, ແຕ່ລາຍງານທັນທີ. ວິເສດ! ແລະທຸກຢ່າງຈະດີຖ້າມັນເປັນແບບນີ້ສະເໝີ. ແຕ່ໃນເດືອນຫນຶ່ງຈະບໍ່ມີຂໍ້ມູນໃດໆ. ທີ່​ເປັນ​ປະ​ໂຫຍດ ​:

  • ທິດສະດີເລັກນ້ອຍແມ່ນໄດ້ອະທິບາຍ ຢູ່ທີ່ນີ້ ແລະ ທີ່ນີ້ .
  • ການວາງລະຫັດຮ່ວມກັນ, ຮ່າງຈະມີລັກສະນະແບບນີ້.

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

  • ຖ້າໃຜຜູ້ຫນຶ່ງມາພົບບັນຫານີ້, ຍິນດີຕ້ອນຮັບກັບ ບັນຫາ . ຫຼັງຈາກທີ່ພວກເຂົາສ້ອມແປງ magic ນີ້, ມັນຈະສູນເສຍພະລັງງານແລະຈະແຕກຕ່າງກັນ somehow. ແຕ່ໃນປັດຈຸບັນ (03/21/2023) ມັນເຮັດວຽກຄືກັນ.

ໄດ້ຮັບເງິນປັນຜົນຂອງຜູ້ອອກຕ່າງປະເທດ

ບາງຄົນອາດຈະຄິດວ່າວິທີການແມ່ນຄ້າຍຄືກັນກັບວິທີທີ່ຜ່ານມາແລະທ່ານສາມາດນໍາໃຊ້ວິທີດຽວທີ່ທ່ານພຽງແຕ່ປ່ຽນຊື່ຂອງການດໍາເນີນງານ. ແຕ່ພວກເຂົາບໍ່ໄດ້ເດົາ!  ການຕັ້ງຊື່ມີຄວາມແຕກຕ່າງຫຼາຍທັງໃນວິທີການແລະຂໍ້ມູນທີ່ສົ່ງຄືນ. ແລະການນັບຫນ້າເລີ່ມຕົ້ນຈາກ 0, ຫຼັງຈາກນັ້ນຈາກ 1. ເພື່ອບໍ່ໃຫ້ສັບສົນໃນທັງຫມົດນີ້, ມັນງ່າຍທີ່ຈະຂຽນສອງວິທີທີ່ແຕກຕ່າງກັນ. ເຊິ່ງເປັນເລື່ອງແປກ, ເພາະວ່າ ເຫດຜົນຂອງການເຮັດວຽກແມ່ນຄືກັນ. ຂ້າພະເຈົ້າ spat ເປັນເວລາດົນນານໃນເວລາທີ່ຂ້າພະເຈົ້າພະຍາຍາມເຮັດວິທີການຫນຶ່ງແລະມີລະຫັດຫນ້ອຍ. ຈະບໍ່ມີຕົວຢ່າງຢູ່ທີ່ນີ້.

GetOperationsByCursor

favorite ຂອງສາມ. ເຖິງແມ່ນວ່າບໍ່ຖືກຕ້ອງທີ່ສຸດ, ແຕ່ພຽງພໍທີ່ສຸດ. ພວກເຮົາເຮັດການຮ້ອງຂໍຕັ້ງແຕ່ເລີ່ມຕົ້ນຂອງການສ້າງບັນຊີເຖິງວັນທີສູງສຸດທີ່ເປັນໄປໄດ້ (ປິດບັນຊີຫຼືບັນຊີປະຈຸບັນ). ພວກເຮົາໄດ້ຮັບຄໍາຕອບ, ເອົາຕົວກະພິບແລະຄໍາຮ້ອງຂໍຄືນໃຫມ່ຕາບໃດທີ່ມີຂໍ້ມູນ.  ແລະລະຫັດແມ່ນ concise ກວ່າໃນຕົວຢ່າງຂ້າງເທິງ.

const timer = ເວລາ async => {     return new Promise(ແກ້ໄຂ => setTimeout(ແກ້ໄຂ, ເວລາ)); }   const getOperationsByCursor = async (sdk, accountId, from, to, cursor = ”) => {     try {         const reqData = {             accountId,             from,             to,             limit: 1000,             state: sdk.OperationState.OPERATION_STATE_EXECUTED,             withoutCommissions: false,             withoutTrades: false,             withoutOvernights: false,             cursor,         };           ກັບຄືນລໍຖ້າ sdk.operations.getOperationsByCursor(reqData);     } catch (e) {         awai timer(60000);         ກັບມາລໍຖ້າ getOperationsByCursor(sdk, accountId, from, to, cursor = ”);     } } ;

ຮ່າງເພື່ອດໍາເນີນການແມ່ນຢູ່ທີ່ນີ້: https://github.com/pskucherov/tcsstat/tree/step3.3 https://github.com/pskucherov/tcsstat/compare/step3.3 ຕອນນີ້ພວກເຮົາພ້ອມທີ່ຈະເພີ່ມການຮັບກັບ ຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ. ຖ້າເຮັດຢ່າງຖືກຕ້ອງ, ທ່ານຈໍາເປັນຕ້ອງໄດ້ຮັບລາຍງານນາຍຫນ້າສໍາລັບການມີຢູ່ທັງຫມົດຂອງບັນຊີ. ແລະສໍາລັບຂໍ້ມູນທີ່ຂາດຫາຍໄປ, T-3s ດຽວກັນ, ໂຫຼດຄືນຈາກການດໍາເນີນງານ. ແຕ່ນີ້ສາມາດແຍກອອກເປັນບົດຄວາມແຍກຕ່າງຫາກ. ຂອງ nuances ຕົ້ນຕໍທີ່ທ່ານຈະພົບແມ່ນການດໍາເນີນງານກາວແລະບົດລາຍງານນາຍຫນ້າ.

  •  ຖ້າມື້ນີ້ທ່ານໄດ້ຮັບລາຍງານນາຍຫນ້າແລະການເຮັດທຸລະກໍາສໍາລັບວັນທີທີ່ກໍານົດໄວ້, ເຮັດໃຫ້ມັນທັງຫມົດໃນຖານຂໍ້ມູນ, ຫຼັງຈາກນັ້ນບໍ່ມີບັນຫາ. 
  • ທ່ານຈະມີບັນຫາໃນມື້ອື່ນໃນເວລາທີ່ທ່ານໄດ້ຮັບສ່ວນຕໍ່ໄປຂອງຂໍ້ມູນຈາກບົດລາຍງານແລະການດໍາເນີນງານແລະຕັດສິນໃຈ synchronize ໃຫ້ເຂົາເຈົ້າກັບຖານຂໍ້ມູນທີ່ມີຢູ່ແລ້ວ. 
  • nuances ຫຼາຍກ່ຽວກັບການບໍ່ກົງກັນຫຼືການປ່ຽນແປງ id ຫຼັງຈາກປະມວນຜົນ
  • ຫຼັງຈາກນັ້ນ, ສໍາລັບຕະຫຼາດ OTC, id’s ບໍ່ກົງກັນທັງຫມົດ.
  •  ເຊັ່ນດຽວກັນກັບ nuances ຂອງເຄື່ອງມື synchronizing, ອີກເທື່ອຫນຶ່ງບໍ່ໄດ້ coincide, ເນື່ອງຈາກ peculiarities ຂອງ API. ແຕ່ນັ້ນແມ່ນເລື່ອງອື່ນ.

ໃຫ້ເພີ່ມການໄດ້ຮັບຂໍ້ມູນກ່ຽວກັບການດໍາເນີນງານໃສ່ຄໍາຮ້ອງສະຫມັກຂອງພວກເຮົາ. ຄໍາຖາມຕົ້ນຕໍແມ່ນບ່ອນທີ່ຂໍ້ມູນຈະຖືກປຸງແຕ່ງແລະເກັບຮັກສາໄວ້.

  •  ຖ້າທ່ານເຮັດມັນສໍາລັບຕົວທ່ານເອງ, ທ່ານຈະບໍລິໂພກຂໍ້ມູນດຽວກັນຈາກອຸປະກອນຕ່າງໆ. ຫຼັງຈາກນັ້ນ, ທ່ານຈໍາເປັນຕ້ອງປະມວນຜົນແລະເກັບຮັກສາຂໍ້ມູນໃນເຄື່ອງແມ່ຂ່າຍ.
  • ຖ້າທ່ານມີຂໍ້ມູນທີ່ແຕກຕ່າງກັນຫຼາຍທີ່ບໍລິໂພກໂດຍຜູ້ໃຊ້ທີ່ແຕກຕ່າງກັນຫຼາຍ, ຫຼັງຈາກນັ້ນທ່ານຈໍາເປັນຕ້ອງຕັດສິນໃຈວ່າສິ່ງທີ່ສໍາຄັນກວ່ານັ້ນແມ່ນຫຍັງ: ຄວາມໄວຂອງຜູ້ໃຊ້ຫຼືການປະຫຍັດທາດເຫຼັກໃນດ້ານຂອງທ່ານ. ໃຜກໍ່ຕາມທີ່ສາມາດມີຈໍານວນຮາດແວທີ່ບໍ່ມີຂອບເຂດນັບທຸກຢ່າງຢູ່ໃນເຄື່ອງແມ່ຂ່າຍຂອງລາວແລະເຮັດໃຫ້ຜູ້ໃຊ້ໄວທີ່ສຸດ, ປະຫຍັດຊັບພະຍາກອນຂອງຜູ້ໃຊ້, ເຊັ່ນແບດເຕີຣີແລະການຈະລາຈອນ, ເຊິ່ງເປັນສິ່ງສໍາຄັນຫຼາຍໃນໂທລະສັບ.

ໃນທາງກັບກັນ, ການນັບຢູ່ໃນຕົວທ່ອງເວັບບໍ່ແມ່ນການແກ້ໄຂທີ່ເຫມາະສົມທີ່ສຸດໃນຫຼັກການ. ດັ່ງນັ້ນ, ສິ່ງທີ່ບໍ່ແພງ, ພວກເຮົາພິຈາລະນາມັນຢູ່ໃນເຄື່ອງແມ່ຂ່າຍຂອງພວກເຮົາ. ພວກເຮົາປ່ອຍສ່ວນທີ່ເຫຼືອໃຫ້ກັບລູກຄ້າ. ຂ້າພະເຈົ້າກໍ່ຕ້ອງການເອົາແລະຄິດໄລ່ຄ່ານາຍຫນ້າຢູ່ໃນເຄື່ອງແມ່ຂ່າຍ. ແຕ່ນີ້ມາ nuance ເອີ້ນວ່າ “ການໂຕ້ຕອບ”. ໃຫ້ເວົ້າວ່າທ່ານມີການດໍາເນີນງານຫຼາຍພັນຄົນແລະມັນໃຊ້ເວລາຫ້ານາທີເພື່ອຮັບພວກມັນ. ຜູ້ໃຊ້ຈະມີຫຍັງແດ່ໃນເວລານີ້? Spinner? ຄວາມຄືບຫນ້າ? Infa ກ່ຽວກັບການອັບໂຫລດເທົ່າໃດ? ມັນເຫມາະສົມທີ່ຈະໃຊ້ “ລໍຖ້າຢ່າງຫ້າວຫັນ” ເມື່ອຜູ້ໃຊ້ໃນຂະບວນການສາມາດເຫັນບາງສິ່ງບາງຢ່າງແລ້ວ. ນີ້ແມ່ນ ຜົນໄດ້ຮັບ:ພວກເຮົາກໍາລັງພັດທະນາບໍລິການຈຸລະພາກໂດຍໃຊ້ Tinkoff Invest API ເພື່ອອັດຕະໂນມັດການເຮັດວຽກກັບລາຍງານນາຍຫນ້າແລະການຄິດໄລ່ຄ່ານາຍຫນ້າ.

  • ກຳລັງໂຫຼດໜ້າ
  • ໃບແຈ້ງໜີ້ທັງໝົດຖືກຮ້ອງຂໍ
  • ຫຼັງຈາກນັ້ນ, ການເຮັດທຸລະກໍາທັງຫມົດທີ່ມີຄ່າຄອມມິດຊັ່ນສໍາລັບທຸລະກໍາທີ່ປະຕິບັດໄດ້ຖືກຮ້ອງຂໍສໍາລັບບັນຊີທັງຫມົດ. ເມື່ອໄດ້ຮັບຂໍ້ມູນ, ມັນຖືກສະແດງຢູ່ໃນ browser.

ເພື່ອບໍ່ໃຫ້ການກັ່ນຕອງຂໍ້ມູນໃນເຫດການແຕ່ລະຄັ້ງ, ພວກເຮົາດຶງເຫດການຂອງຕົນເອງສໍາລັບແຕ່ລະບັນຊີ. ແບບນີ້:

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

ຮ່າງເພື່ອເປີດຕົວແມ່ນຢູ່ນີ້: https://github.com/pskucherov/tcsstat/tree/step3 https://github.com/pskucherov/tcsstat/compare/step2…step3 ກ້າວຕໍ່ໄປ. ມັນດີຫຼາຍທີ່ທ່ານໄດ້ອ່ານເສັ້ນນີ້! 

ການຄິດໄລ່ແລະຜົນຜະລິດຂອງຂໍ້ມູນຄວາມສົນໃຈ

ຂຶ້ນກັບວ່າໃຜຕ້ອງການຂໍ້ມູນອັນໃດ. ເພາະສະນັ້ນ, ຂ້າພະເຈົ້າທັນທີບອກທ່ານ nuances ຕົ້ນຕໍທີ່ທ່ານຈະພົບ.

ເຮັດວຽກກັບລາຄາ 

ທຸກໆຄົນທີ່ເຮັດວຽກກັບການເງິນຮູ້ວ່າການເຮັດທຸລະກໍາເງິນຄວນຈະຖືກປະຕິບັດດ້ວຍຕົວເລກທັງຫມົດເທົ່ານັ້ນ. ເນື່ອງຈາກຄວາມຖືກຕ້ອງຂອງຄ່າຫຼັງຈາກຈຸດທົດສະນິຍົມແລະຄວາມຜິດພາດສະສົມທີ່ມີຈໍານວນການດໍາເນີນງານຈໍານວນຫລາຍ. ນັ້ນແມ່ນເຫດຜົນທີ່ລາຄາທັງຫມົດຖືກນໍາສະເຫນີໃນ ຮູບແບບ MoneyValue ຕໍ່ໄປນີ້ພວກເຮົາກໍາລັງພັດທະນາບໍລິການຈຸລະພາກໂດຍໃຊ້ Tinkoff Invest API ເພື່ອອັດຕະໂນມັດການເຮັດວຽກກັບລາຍງານນາຍຫນ້າແລະການຄິດໄລ່ຄ່ານາຍຫນ້າ.

ພາກສະຫນາມປະເພດລາຍລະອຽດ
ເງິນຕາສາຍລະຫັດສະກຸນເງິນ ISO
ໜ່ວຍint64ສ່ວນຈຳນວນເຕັມຂອງຜົນບວກ, ສາມາດເປັນຕົວເລກລົບໄດ້
ນາໂນint32ສ່ວນເສດເຫຼືອຂອງຈໍານວນ, ສາມາດເປັນຕົວເລກລົບ

ພວກເຮົາປຸງແຕ່ງພວກມັນແຍກຕ່າງຫາກ, ຫຼັງຈາກນັ້ນນໍາພວກມັນໄປສູ່ມູນຄ່າລາຄາ:

quotation.units + quotation.nano / 1e9

ຄ່າໃຊ້ຈ່າຍຂອງສັນຍາໃນອະນາຄົດ

ລາຄາຂອງອະນາຄົດແມ່ນນໍາສະເຫນີໃນຈຸດ, ເມື່ອທ່ານມີອະນາຄົດຂອງສະກຸນເງິນ, ທ່ານຈໍາເປັນຕ້ອງຮູ້ອັດຕາ. ແລະແນ່ນອນລາຄາໃນຈຸດແລະຂັ້ນຕອນລາຄາ. ໃນເວລາທີ່ທ່ານຄິດໄລ່ກໍາໄລຈາກການເຮັດທຸລະກໍາ, ນີ້ສາມາດຫນໍ່ໄມ້ສ່ວນຫຼາຍ, ເພາະວ່າ. ຖ້າ​ຫາກ​ວ່າ​ທ່ານ​ຄິດ​ໄລ່​ຈໍາ​ນວນ​ທັງ​ຫມົດ​ໂດຍ​ການ​ຄູນ​ລາ​ຄາ​ໂດຍ​ປະ​ລິ​ມານ​. ໃນທີ່ນີ້ທ່ານຈໍາເປັນຕ້ອງລະມັດລະວັງ. ສໍາລັບໃນປັດຈຸບັນ, ພວກເຮົາຈະເບິ່ງວ່າມັນໄປແນວໃດ. ນີ້ໃຊ້ກັບອະນາຄົດຂອງສະກຸນເງິນ, ໃນສະຖານທີ່ອື່ນໆ, ທຸກສິ່ງທຸກຢ່າງແມ່ນເຫມາະສົມ.ພວກເຮົາກໍາລັງພັດທະນາບໍລິການຈຸລະພາກໂດຍໃຊ້ Tinkoff Invest API ເພື່ອອັດຕະໂນມັດການເຮັດວຽກກັບລາຍງານນາຍຫນ້າແລະການຄິດໄລ່ຄ່ານາຍຫນ້າ.ພວກເຮົາກໍາລັງພັດທະນາບໍລິການຈຸລະພາກໂດຍໃຊ້ Tinkoff Invest API ເພື່ອອັດຕະໂນມັດການເຮັດວຽກກັບລາຍງານນາຍຫນ້າແລະການຄິດໄລ່ຄ່ານາຍຫນ້າ.

ຕະຫຼາດ OTC

ຕະຫຼາດນີ້ມີຫຼາຍ peculiarities, ສະນັ້ນໃຫ້ພວກເຮົາສຶກສາການດໍາເນີນງານກ່ຽວກັບມັນແຍກຕ່າງຫາກ, ໃນເວລາທີ່ທ່ານເລີ່ມຕົ້ນ synchronizing ການດໍາເນີນງານ, ມັນຈະປາກົດວ່າທ່ານຈໍາເປັນຕ້ອງໄດ້ນໍາເອົາ figi / ticker ໃນຮູບແບບດຽວກັນເພື່ອໃຫ້ກົງກັບເຄື່ອງມືຢ່າງຖືກຕ້ອງ. ເມື່ອທ່ານເລີ່ມຕົ້ນ synchronizing ນີ້ກັບບົດລາຍງານນາຍຫນ້າ, ມັນຈະປາກົດວ່າ tradeID ຂອງທຸລະກໍາດຽວກັນມີຕົວອັກສອນຢູ່ໃນຕອນຕົ້ນຂອງທຸລະກໍາແລະພວກເຂົາບໍ່ໄດ້ຢູ່ໃນບົດລາຍງານນາຍຫນ້າ. ເພາະສະນັ້ນ, ເຂົາເຈົ້າບໍ່ສາມາດປຽບທຽບໄດ້ … ahem-ahem … ໂດຍການປຽບທຽບ! ຂ້າພະເຈົ້າໄດ້ຈັບຄູ່ເວລາການຄ້າ, ticker ແລະການຈັບຄູ່ທີ່ຫນຶ່ງ tradeId ແມ່ນບັນຈຸຢູ່ໃນອື່ນ. ຖືກ, ຂ້ອຍບໍ່ຮູ້. ໃຜພົບບັນຫານີ້ ແລະໃຜສົນໃຈກໍ່ເຂົ້າມາຫາ ບັນຫາ ຫຼືເລີ່ມໃໝ່.ພວກເຮົາກໍາລັງພັດທະນາບໍລິການຈຸລະພາກໂດຍໃຊ້ Tinkoff Invest API ເພື່ອອັດຕະໂນມັດການເຮັດວຽກກັບລາຍງານນາຍຫນ້າແລະການຄິດໄລ່ຄ່ານາຍຫນ້າ.

ການດໍາເນີນງານທາງຄະນິດສາດກ່ຽວກັບເຄື່ອງມື

ມັນເປັນໄປບໍ່ໄດ້, ໂດຍບໍ່ມີການຊອກຫາ, ເພື່ອປະຕິບັດການປະຕິບັດທາງຄະນິດສາດກັບບັນຊີລາຍຊື່ທັງຫມົດ. ໃນຄໍາສັ່ງທີ່ຈະບໍ່ເພີ່ມຄວາມອົບອຸ່ນກັບອ່ອນ, ພວກເຮົາສະເຫມີກວດເບິ່ງສະກຸນເງິນແລະຂະບວນການພຽງແຕ່ຖ້າພວກເຮົາແນ່ໃຈວ່າສະກຸນເງິນທີ່ກົງກັນ, ແລະຈຸດຖືກປ່ຽນເປັນສະກຸນເງິນທີ່ຕ້ອງການ. ປະກອບອາວຸດທີ່ມີຄວາມຮູ້ກ່ຽວກັບການເຮັດວຽກກັບຕົວເລກທະນາຄານ, ພວກເຮົາຈະຄິດໄລ່ຄ່ານາຍຫນ້າທີ່ໃຊ້ໃນແຕ່ລະບັນຊີ. ແບບນີ້: https://github.com/pskucherov/tcsstat/tree/step4 https://github.com/pskucherov/tcsstat/compare/step3…step4ພວກເຮົາກໍາລັງພັດທະນາບໍລິການຈຸລະພາກໂດຍໃຊ້ Tinkoff Invest API ເພື່ອອັດຕະໂນມັດການເຮັດວຽກກັບລາຍງານນາຍຫນ້າແລະການຄິດໄລ່ຄ່ານາຍຫນ້າ.   

Microservice ພ້ອມແລ້ວ!

https://github.com/pskucherov/tcsstat ໃນຖານະເປັນການເຮັດວຽກບ້ານ, ທ່ານສາມາດກວດເບິ່ງວ່າການບໍລິການເຮັດວຽກກັບການເຊື່ອມຕໍ່ຊ້າ, ເມື່ອການເຊື່ອມຕໍ່ຖືກຕັດ, ເມື່ອອິນເຕີເນັດຖືກຕັດ, ເມື່ອມີຂໍ້ຜິດພາດຫຼືກໍານົດຂອບເຂດຈໍາກັດຂອງນາຍຫນ້າ. 

ບົດສະຫຼຸບແລະແຜນການສໍາລັບອະນາຄົດ

  • ໄດ້ຮຽນຮູ້ກ່ຽວກັບການປະຕິບັດງານພື້ນຖານ ແລະການເຮັດວຽກກັບ Invest API
  • ທີ່ໃຊ້ເວລາໃຊ້ເວລາ ~ 10 ຊົ່ວໂມງ
  • ລະດັບຄວາມຫຍຸ້ງຍາກ ~ junior+ / ກາງຕ່ໍາ 

ຖ້າທ່ານສືບຕໍ່ປັບປຸງບໍລິການຈຸລະພາກ, ທ່ານອາດຈະຈົບລົງດ້ວຍບາງສິ່ງບາງຢ່າງເຊັ່ນນີ້

https://opexbot.info

  ນີ້ແມ່ນການພັດທະນາຂອງຂ້ອຍ, ສໍາລັບຜູ້ທີ່ຂີ້ກຽດເກີນໄປທີ່ຈະເຂົ້າໃຈ, ແລ່ນແລະນັບດ້ວຍຕົວເອງ. ຂ້ອຍວາງແຜນທີ່ຈະເພີ່ມການວິເຄາະຢູ່ທີ່ນັ້ນຕາມຄໍາຮ້ອງຂໍຂອງຜູ້ໃຊ້. ຖ້າທ່ານມັກບົດຄວາມ, ຫຼັງຈາກນັ້ນຈອງ ຊ່ອງທາງໂທລະເລກ ຂອງຂ້ອຍ . ພວກເຮົາກໍາລັງພັດທະນາບໍລິການຈຸລະພາກໂດຍໃຊ້ Tinkoff Invest API ເພື່ອອັດຕະໂນມັດການເຮັດວຽກກັບລາຍງານນາຍຫນ້າແລະການຄິດໄລ່ຄ່ານາຍຫນ້າ.

Pavel
Rate author
Add a comment

  1. Isakiiev

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

    Reply