ແຮງບັນດານໃຈທີ່ຢູ່ເບື້ອງຫຼັງການພັດທະນາ ການບໍລິການສະຖິຕິ ສໍາລັບການລົງທຶນ Tinkoff ແມ່ນ:
- ບົດຄວາມກ່ຽວກັບ Habre “ສິ່ງທີ່ Tinkoff ການລົງທຶນບໍ່ໄດ້ເວົ້າ”
- ການວິເຄາະ ຄວາມປາດຖະຫນາ ຂອງ ຜູ້ໃຊ້ ເວທີ
- ບົດຄວາມ ກ່ຽວກັບການຄິດໄລ່ຄະນະກໍາມະການ .
- ສິ່ງທີ່ຈະໄດ້ຮັບການປຶກສາຫາລື?
- ການພັດທະນາການບໍລິການສະຖິຕິເທື່ອລະກ້າວ:
- ການເຊື່ອມຕໍ່ກັບ Tinkoff Invest API
- ການແຕ້ມຂໍ້ມູນຈາກ Tinkoff Invest API ໃນຕົວທ່ອງເວັບ
- ຮັບລາຍງານນາຍໜ້າ ແລະທຸລະກຳ
- GetBrokerReport
- ວິທີການສໍາລັບການໄດ້ຮັບວັນທີ, ຄໍານຶງເຖິງການຫັກລົບຈາກວັນທີປະຈຸບັນ
- ລາຍງານການຮ້ອງຂໍການຜະລິດ
- ຜົນໄດ້ຮັບ:
- ໄດ້ຮັບເງິນປັນຜົນຂອງຜູ້ອອກຕ່າງປະເທດ
- GetOperationsByCursor
- ການຄິດໄລ່ແລະຜົນຜະລິດຂອງຂໍ້ມູນຄວາມສົນໃຈ
- ເຮັດວຽກກັບລາຄາ
- ຄ່າໃຊ້ຈ່າຍຂອງສັນຍາໃນອະນາຄົດ
- ຕະຫຼາດ OTC
- ການດໍາເນີນງານທາງຄະນິດສາດກ່ຽວກັບເຄື່ອງມື
- Microservice ພ້ອມແລ້ວ!
- ບົດສະຫຼຸບແລະແຜນການສໍາລັບອະນາຄົດ
- https://opexbot.info
ສິ່ງທີ່ຈະໄດ້ຮັບການປຶກສາຫາລື?
- ພຽງແຕ່ສ່ວນທີ່ນໍາໃຊ້ກ່ຽວກັບການພັດທະນາ.
- ຄວາມຮູ້ແລະປະສົບການທີ່ແທ້ຈິງ, ເຊິ່ງມີຄວາມສໍາຄັນຫຼາຍໃນການເຮັດວຽກກັບເຄື່ອງມືທາງດ້ານການເງິນ.
- ພາບລວມຂອງບັນຫາທີ່ຈະເຮັດວຽກ
ດັ່ງນັ້ນ, ຂ້ອຍຕ້ອງການຄິດໄລ່ສະຖິຕິການຄ້າແລະເຮັດມັນດ້ວຍວິທີທີ່ສະດວກ.
ການພັດທະນາການບໍລິການສະຖິຕິເທື່ອລະກ້າວ:
- ການເຊື່ອມຕໍ່ກັບ Tinkoff Invest API
- ການແຕ້ມຂໍ້ມູນຈາກ Tinkoff Invest API ໃນຕົວທ່ອງເວັບ
- ຮັບລາຍງານນາຍໜ້າ ແລະທຸລະກຳ
- ການຄິດໄລ່ແລະຜົນຜະລິດຂອງຂໍ້ມູນຄວາມສົນໃຈ
- ບົດສະຫຼຸບແລະແຜນການສໍາລັບອະນາຄົດ
ການເຊື່ອມຕໍ່ກັບ 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:
- ໃນບັນຊີລາຍຊື່ຂອງບັນຊີມີ “ທະນາຄານການລົງທຶນ”, ທີ່ທ່ານບໍ່ສາມາດເຮັດວຽກໂດຍໃຊ້ 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), ໃນຂັ້ນຕອນປະຈຸບັນ, ພວກເຮົາໄດ້ໂອນຂໍ້ມູນນີ້ໃຫ້ກັບລູກຄ້າ (ຕົວທ່ອງເວັບ).
ຕອນນີ້ໃຫ້ພວກເຮົາເຮັດໃຫ້ມັນເພື່ອໃຫ້ທ່ານສາມາດເລືອກບັນຊີຈາກຕົວທ່ອງເວັບ, ແລະຖ້າບໍ່ມີ token, ຂໍ້ຜິດພາດຈະຖືກສົ່ງໄປຫາ console. ການເຮັດວຽກແມ່ນງ່າຍດາຍແລະບໍ່ມີຫຍັງໃຫມ່, ສະນັ້ນຂ້າພະເຈົ້າໃຫ້ພຽງແຕ່ການເຊື່ອມຕໍ່ກັບຄໍາຫມັ້ນສັນຍາ
- https://github.com/pskucherov/tcsstat/commit/7e1ac57061e5e971588479015b06d8814d6609a9
- 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
ຮັບລາຍງານນາຍໜ້າ ແລະທຸລະກຳ
ມີ ສາມວິທີ ທີ່ຈະໄດ້ຮັບລາຍງານນາຍຫນ້າແລະການເຮັດທຸລະກໍາ
ຕັ້ງແຕ່ເລີ່ມຕົ້ນ ມັນເປັນສິ່ງສໍາຄັນທີ່ຈະຮູ້ວ່າ:
- ບົດລາຍງານນາຍຫນ້າແມ່ນຖືກສ້າງຂຶ້ນໃນໂຫມດ T-3, i.e. ການຄ້າໄດ້ຖືກສະແດງຢູ່ທີ່ນັ້ນຫຼັງຈາກການປະຕິບັດຕົວຈິງຂອງພວກເຂົາ.
- ຕາມນັ້ນແລ້ວ, ຖ້າຫາກທ່ານຮ້ອງຂໍບົດລາຍງານນີ້ໃນສອງມື້ສຸດທ້າຍ, ມັນຈະມີຄວາມພ້ອມໃນສາມມື້.
- ເພື່ອເຮັດໃຫ້ຂໍ້ສະເຫນີສໍາລັບມື້ສຸດທ້າຍ, ພວກເຮົານໍາໃຊ້ວິທີການສໍາລັບການໄດ້ຮັບການດໍາເນີນງານ, ແຕ່ຈື່ໄວ້ວ່າ id ແລະເນື້ອໃນຂອງເຂົາເຈົ້າອາດຈະມີການປ່ຽນແປງຫຼັງຈາກການສ້າງຕັ້ງຂອງບົດລາຍງານນາຍຫນ້າ.
GetBrokerReport
ເພື່ອໃຫ້ໄດ້ຮັບລາຍງານນາຍຫນ້າ, ທ່ານຈໍາເປັນຕ້ອງເອົາ id ບັນຊີ, ວັນທີເລີ່ມຕົ້ນແລະວັນທີສິ້ນສຸດຂອງບົດລາຍງານ, ແຕ່ບໍ່ເກີນ 31 ມື້. ພວກເຮົາສົ່ງຄໍາຮ້ອງຂໍເພື່ອສ້າງບົດລາຍງານໄປຫາ API ໃນ generate _broker_report_request , ໄດ້ຮັບ taskId ໃນການຕອບສະຫນອງ. ຫຼັງຈາກນັ້ນ, ການນໍາໃຊ້ taskId ນີ້, ພວກເຮົາໄດ້ຮັບຂໍ້ມູນຈາກ get _broker_report_response.
- ທ່ານຈໍາເປັນຕ້ອງບັນທຶກ 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 ກ່ຽວກັບການອັບໂຫລດເທົ່າໃດ? ມັນເຫມາະສົມທີ່ຈະໃຊ້ “ລໍຖ້າຢ່າງຫ້າວຫັນ” ເມື່ອຜູ້ໃຊ້ໃນຂະບວນການສາມາດເຫັນບາງສິ່ງບາງຢ່າງແລ້ວ. ນີ້ແມ່ນ ຜົນໄດ້ຮັບ:
- ກຳລັງໂຫຼດໜ້າ
- ໃບແຈ້ງໜີ້ທັງໝົດຖືກຮ້ອງຂໍ
- ຫຼັງຈາກນັ້ນ, ການເຮັດທຸລະກໍາທັງຫມົດທີ່ມີຄ່າຄອມມິດຊັ່ນສໍາລັບທຸລະກໍາທີ່ປະຕິບັດໄດ້ຖືກຮ້ອງຂໍສໍາລັບບັນຊີທັງຫມົດ. ເມື່ອໄດ້ຮັບຂໍ້ມູນ, ມັນຖືກສະແດງຢູ່ໃນ 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 ຕໍ່ໄປນີ້
ພາກສະຫນາມ | ປະເພດ | ລາຍລະອຽດ |
---|---|---|
ເງິນຕາ | ສາຍ | ລະຫັດສະກຸນເງິນ ISO |
ໜ່ວຍ | int64 | ສ່ວນຈຳນວນເຕັມຂອງຜົນບວກ, ສາມາດເປັນຕົວເລກລົບໄດ້ |
ນາໂນ | int32 | ສ່ວນເສດເຫຼືອຂອງຈໍານວນ, ສາມາດເປັນຕົວເລກລົບ |
ພວກເຮົາປຸງແຕ່ງພວກມັນແຍກຕ່າງຫາກ, ຫຼັງຈາກນັ້ນນໍາພວກມັນໄປສູ່ມູນຄ່າລາຄາ:
quotation.units + quotation.nano / 1e9
ຄ່າໃຊ້ຈ່າຍຂອງສັນຍາໃນອະນາຄົດ
ລາຄາຂອງອະນາຄົດແມ່ນນໍາສະເຫນີໃນຈຸດ, ເມື່ອທ່ານມີອະນາຄົດຂອງສະກຸນເງິນ, ທ່ານຈໍາເປັນຕ້ອງຮູ້ອັດຕາ. ແລະແນ່ນອນລາຄາໃນຈຸດແລະຂັ້ນຕອນລາຄາ. ໃນເວລາທີ່ທ່ານຄິດໄລ່ກໍາໄລຈາກການເຮັດທຸລະກໍາ, ນີ້ສາມາດຫນໍ່ໄມ້ສ່ວນຫຼາຍ, ເພາະວ່າ. ຖ້າຫາກວ່າທ່ານຄິດໄລ່ຈໍານວນທັງຫມົດໂດຍການຄູນລາຄາໂດຍປະລິມານ. ໃນທີ່ນີ້ທ່ານຈໍາເປັນຕ້ອງລະມັດລະວັງ. ສໍາລັບໃນປັດຈຸບັນ, ພວກເຮົາຈະເບິ່ງວ່າມັນໄປແນວໃດ. ນີ້ໃຊ້ກັບອະນາຄົດຂອງສະກຸນເງິນ, ໃນສະຖານທີ່ອື່ນໆ, ທຸກສິ່ງທຸກຢ່າງແມ່ນເຫມາະສົມ.
ຕະຫຼາດ OTC
ຕະຫຼາດນີ້ມີຫຼາຍ peculiarities, ສະນັ້ນໃຫ້ພວກເຮົາສຶກສາການດໍາເນີນງານກ່ຽວກັບມັນແຍກຕ່າງຫາກ, ໃນເວລາທີ່ທ່ານເລີ່ມຕົ້ນ synchronizing ການດໍາເນີນງານ, ມັນຈະປາກົດວ່າທ່ານຈໍາເປັນຕ້ອງໄດ້ນໍາເອົາ figi / ticker ໃນຮູບແບບດຽວກັນເພື່ອໃຫ້ກົງກັບເຄື່ອງມືຢ່າງຖືກຕ້ອງ. ເມື່ອທ່ານເລີ່ມຕົ້ນ synchronizing ນີ້ກັບບົດລາຍງານນາຍຫນ້າ, ມັນຈະປາກົດວ່າ tradeID ຂອງທຸລະກໍາດຽວກັນມີຕົວອັກສອນຢູ່ໃນຕອນຕົ້ນຂອງທຸລະກໍາແລະພວກເຂົາບໍ່ໄດ້ຢູ່ໃນບົດລາຍງານນາຍຫນ້າ. ເພາະສະນັ້ນ, ເຂົາເຈົ້າບໍ່ສາມາດປຽບທຽບໄດ້ … ahem-ahem … ໂດຍການປຽບທຽບ! ຂ້າພະເຈົ້າໄດ້ຈັບຄູ່ເວລາການຄ້າ, ticker ແລະການຈັບຄູ່ທີ່ຫນຶ່ງ tradeId ແມ່ນບັນຈຸຢູ່ໃນອື່ນ. ຖືກ, ຂ້ອຍບໍ່ຮູ້. ໃຜພົບບັນຫານີ້ ແລະໃຜສົນໃຈກໍ່ເຂົ້າມາຫາ ບັນຫາ ຫຼືເລີ່ມໃໝ່.
ການດໍາເນີນງານທາງຄະນິດສາດກ່ຽວກັບເຄື່ອງມື
ມັນເປັນໄປບໍ່ໄດ້, ໂດຍບໍ່ມີການຊອກຫາ, ເພື່ອປະຕິບັດການປະຕິບັດທາງຄະນິດສາດກັບບັນຊີລາຍຊື່ທັງຫມົດ. ໃນຄໍາສັ່ງທີ່ຈະບໍ່ເພີ່ມຄວາມອົບອຸ່ນກັບອ່ອນ, ພວກເຮົາສະເຫມີກວດເບິ່ງສະກຸນເງິນແລະຂະບວນການພຽງແຕ່ຖ້າພວກເຮົາແນ່ໃຈວ່າສະກຸນເງິນທີ່ກົງກັນ, ແລະຈຸດຖືກປ່ຽນເປັນສະກຸນເງິນທີ່ຕ້ອງການ. ປະກອບອາວຸດທີ່ມີຄວາມຮູ້ກ່ຽວກັບການເຮັດວຽກກັບຕົວເລກທະນາຄານ, ພວກເຮົາຈະຄິດໄລ່ຄ່ານາຍຫນ້າທີ່ໃຊ້ໃນແຕ່ລະບັນຊີ. ແບບນີ້: https://github.com/pskucherov/tcsstat/tree/step4 https://github.com/pskucherov/tcsstat/compare/step3…step4
Microservice ພ້ອມແລ້ວ!
https://github.com/pskucherov/tcsstat ໃນຖານະເປັນການເຮັດວຽກບ້ານ, ທ່ານສາມາດກວດເບິ່ງວ່າການບໍລິການເຮັດວຽກກັບການເຊື່ອມຕໍ່ຊ້າ, ເມື່ອການເຊື່ອມຕໍ່ຖືກຕັດ, ເມື່ອອິນເຕີເນັດຖືກຕັດ, ເມື່ອມີຂໍ້ຜິດພາດຫຼືກໍານົດຂອບເຂດຈໍາກັດຂອງນາຍຫນ້າ.
ບົດສະຫຼຸບແລະແຜນການສໍາລັບອະນາຄົດ
- ໄດ້ຮຽນຮູ້ກ່ຽວກັບການປະຕິບັດງານພື້ນຖານ ແລະການເຮັດວຽກກັບ Invest API
- ທີ່ໃຊ້ເວລາໃຊ້ເວລາ ~ 10 ຊົ່ວໂມງ
- ລະດັບຄວາມຫຍຸ້ງຍາກ ~ junior+ / ກາງຕ່ໍາ
ຖ້າທ່ານສືບຕໍ່ປັບປຸງບໍລິການຈຸລະພາກ, ທ່ານອາດຈະຈົບລົງດ້ວຍບາງສິ່ງບາງຢ່າງເຊັ່ນນີ້
https://opexbot.info
ນີ້ແມ່ນການພັດທະນາຂອງຂ້ອຍ, ສໍາລັບຜູ້ທີ່ຂີ້ກຽດເກີນໄປທີ່ຈະເຂົ້າໃຈ, ແລ່ນແລະນັບດ້ວຍຕົວເອງ. ຂ້ອຍວາງແຜນທີ່ຈະເພີ່ມການວິເຄາະຢູ່ທີ່ນັ້ນຕາມຄໍາຮ້ອງຂໍຂອງຜູ້ໃຊ້. ຖ້າທ່ານມັກບົດຄວາມ, ຫຼັງຈາກນັ້ນຈອງ ຊ່ອງທາງໂທລະເລກ ຂອງຂ້ອຍ .
Полезная статья. Не могу представить, сколько усилий автора потребовалось, чтобы все описать. Благодарю.