យើងកំពុងបង្កើតសេវាកម្មខ្នាតតូចដោយប្រើ Tinkoff Invest API ដើម្បីធ្វើស្វ័យប្រវត្តិកម្មក្នុងការធ្វើការជាមួយរបាយការណ៍ឈ្មួញកណ្តាល និងការគណនាកម្រៃជើងសារ។

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

អ្នកបំផុសគំនិតនៅពីក្រោយការអភិវឌ្ឍន៍ សេវាកម្មស្ថិតិ សម្រាប់ Tinkoff Investments គឺ៖

តើ​អ្វី​នឹង​ត្រូវ​ពិភាក្សា?

  • មានតែផ្នែកដែលបានអនុវត្តប៉ុណ្ណោះអំពីការអភិវឌ្ឍន៍។
  • ចំណេះដឹង និងបទពិសោធន៍ពិតប្រាកដ ដែលមានសារៈសំខាន់ខ្លាំងណាស់ក្នុងការធ្វើការជាមួយឧបករណ៍ហិរញ្ញវត្ថុ។
  • ទិដ្ឋភាពទូទៅនៃបញ្ហាដែលត្រូវដំណើរការ

ដូច្នេះ ខ្ញុំចង់គណនាស្ថិតិពាណិជ្ជកម្ម ហើយធ្វើវាតាមរបៀបងាយស្រួល។ 

បង្កើតសេវាកម្មស្ថិតិមួយជំហានម្តងមួយៗ៖ 

  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 ខ្ញុំ tinkoff-sdk-grpc-js

កំពុងពិនិត្យ

const { createSdk } = require(‘tinkoff-sdk-grpc-js’);   // និមិត្តសញ្ញាដែលអាចទទួលបាន ដូចនេះ  const TOKEN = ‘YOURAPI’;   // ឈ្មោះកម្មវិធីដែលអ្នកអាចរកបាននៅក្នុងកំណត់ហេតុ TCS ។ const appName = ‘tcsstat’;   const sdk = createSdk(TOKEN, appName); (async () => {     console.log(await sdk.users.getAccounts()); })();

លទ្ធផល៖ បញ្ជីគណនីរបស់អ្នកនឹងត្រូវបានបង្ហាញនៅក្នុងកុងសូល។ ជាឧទាហរណ៍ ចូរយើង វិភាគ 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

យើងបន្តទៅជំហានមិត្តភាពបន្ទាប់ទៀត រន្ធ+investapi ហើយមើល ផ្នែក មានប្រយោជន៍ នៃជំហាននេះសម្រាប់ព័ត៌មានលម្អិតទាំងអស់។  ខ្ញុំនឹងរៀបរាប់លម្អិត៖ 

  • នៅផ្នែកខាង nodejs (server) មានឯកសារ pages/api/investapi.js។ នេះគឺជាកន្លែងដែលយើងបង្កើតម៉ាស៊ីនមេ socket.io ហើយភ្ជាប់ទៅ investapi ។
  • នៅផ្នែកកម្មវិធីរុករក (អតិថិជន) យើងភ្ជាប់ទៅម៉ាស៊ីនមេតាមរយៈរន្ធ និងស្នើសុំទិន្នន័យគណនីពីឈ្មួញកណ្តាល។ 
  • យើងទទួលបានទិន្នន័យពីឈ្មួញកណ្តាលនៅលើម៉ាស៊ីនមេ បន្ទាប់មកផ្ញើវាទៅអតិថិជន។ នៅពេលដែលពួកគេត្រូវបានទទួលនៅលើម៉ាស៊ីនភ្ញៀវពួកគេត្រូវបានបង្ហាញនៅក្នុងកម្មវិធីរុករក។ 

លទ្ធផល៖  នៅក្នុងកុងសូលកម្មវិធីរុករកតាមអ៊ីនធឺណិត យើងអាចមើលឃើញព័ត៌មានអំពីគណនី។ នោះគឺនៅជំហានចុងក្រោយ យើងបានឃើញព័ត៌មានអំពីគណនីនៅក្នុងកុងសូលម៉ាស៊ីនមេ (nodejs) ក្នុងជំហានបច្ចុប្បន្ន យើងបានផ្ទេរព័ត៌មាននេះទៅអតិថិជន (កម្មវិធីរុករក)។

យើងកំពុងបង្កើតសេវាកម្មខ្នាតតូចដោយប្រើ Tinkoff Invest API ដើម្បីធ្វើស្វ័យប្រវត្តិកម្មក្នុងការធ្វើការជាមួយរបាយការណ៍ឈ្មួញកណ្តាល និងការគណនាកម្រៃជើងសារ។

ឥឡូវនេះ ចូរបង្កើតវាដើម្បីឱ្យអ្នកអាចជ្រើសរើសគណនីមួយពីកម្មវិធីរុករក ហើយប្រសិនបើគ្មានសញ្ញាសម្ងាត់ទេនោះ កំហុសត្រូវបានផ្ញើទៅកុងសូល។ ការងារគឺសាមញ្ញ ហើយគ្មានអ្វីថ្មីទេ ដូច្នេះខ្ញុំផ្តល់តែតំណភ្ជាប់ទៅ commits ប៉ុណ្ណោះ។

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

មានប្រយោជន៍៖

  • របៀប​បង្កើត​មិត្ត​បន្ទាប់​និង​រន្ធ​ត្រូវ​បាន​ពិពណ៌នា​យ៉ាង​លម្អិត ​នៅ​ទីនេះ ។ 
  • លេខកូដមិត្តភាពបន្ទាប់+រន្ធ+investapi៖

https://github.com/pskucherov/tcsstat/commit/a443a4ac1bb4f0aa898f638128755fe7391ee381 សម្រាប់អ្នកដែលខាងលើពិបាក នោះយើងនៅតែស្ថិតក្នុងដំណាក់កាលនេះ ហើយដោះស្រាយជាមួយកូដ។ ប្រសិនបើអ្នកមានសំណួរ – សួរ។ https://github.com/pskucherov/tcsstat/tree/step2 https://github.com/pskucherov/tcsstat/compare/step1…step2

ទទួលរបាយការណ៍ឈ្មួញកណ្តាល និងប្រតិបត្តិការ

មាន វិធីបីយ៉ាង ក្នុងការទទួលរបាយការណ៍ឈ្មួញកណ្តាល និងប្រតិបត្តិការ

  1. របាយការណ៍ GetBroker
  2. ទទួលបានភាគលាភអ្នកចេញបរទេស
  3. GetOperationsByCursor

តាំងពីដំបូង វាជាការសំខាន់ដែលត្រូវដឹង៖ 

  • របាយការណ៍ឈ្មួញកណ្តាលត្រូវបានបង្កើតនៅក្នុងរបៀប T-3, i.e. ការជួញដូរត្រូវបានបង្ហាញនៅទីនោះបន្ទាប់ពីការប្រតិបត្តិពិតប្រាកដរបស់ពួកគេ។ 
  • ដូច្នោះហើយ ប្រសិនបើអ្នកស្នើសុំរបាយការណ៍នេះក្នុងរយៈពេលពីរថ្ងៃចុងក្រោយ វានឹងរួចរាល់ក្នុងរយៈពេលបីថ្ងៃ។ 
  • ដើម្បីធ្វើកិច្ចព្រមព្រៀងសម្រាប់ថ្ងៃចុងក្រោយ យើងប្រើវិធីសាស្រ្តសម្រាប់ការទទួលប្រតិបត្តិការ ប៉ុន្តែត្រូវចាំថាលេខសម្គាល់ និងខ្លឹមសាររបស់ពួកគេអាចផ្លាស់ប្តូរបន្ទាប់ពីការបង្កើតរបាយការណ៍ឈ្មួញកណ្តាល។

របាយការណ៍ GetBroker

ដើម្បីទទួលបានរបាយការណ៍ឈ្មួញកណ្តាល អ្នកត្រូវយកលេខសម្គាល់គណនី កាលបរិច្ឆេទចាប់ផ្តើម និងកាលបរិច្ឆេទបញ្ចប់នៃរបាយការណ៍ ប៉ុន្តែមិនលើសពី 31 ថ្ងៃ។ យើងផ្ញើសំណើដើម្បីបង្កើតរបាយការណ៍ទៅ API ក្នុង ការបង្កើត _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 time => {     return new Promise(resolve => setTimeout(ដោះស្រាយ, ពេលវេលា)); }   const getBrokerResponseByTaskId = async (taskId, page = 0) => {     try {         return wait (sdk.operations.getBrokerReport)({             getBrokerReportRequest: {                 taskId,                 page,             },         });     } catch (e) {         console.log(‘wait’, e);         រង់ចាំកម្មវិធីកំណត់ម៉ោង (10000);         ត្រឡប់មកវិញរង់ចាំ getBrokerResponseByTaskId(taskId, ទំព័រ);     } };

បន្ទាប់មកវេទមន្តដូចគ្នាកើតឡើង។ យើងបញ្ឈប់ស្គ្រីបរបស់យើង ចាប់ផ្តើមវាម្តងទៀត យើងមិនមាន taskId ទេ។ យើងប្រតិបត្តិកូដជាមួយសំណើ taskId ប៉ុន្តែយើងលែងទទួលបាន taskId ទៀតហើយ ប៉ុន្តែរាយការណ៍ភ្លាមៗ។ វេទមន្ត! ហើយអ្វីៗនឹងល្អប្រសិនបើវាតែងតែបែបនេះ។ ប៉ុន្តែក្នុងមួយខែនឹងមិនមានទិន្នន័យអ្វីទាំងអស់។ មានប្រយោជន៍

  • ទ្រឹស្ដីខ្លះត្រូវបានគូសបញ្ជាក់ នៅទីនេះ និង នៅទីនេះ
  • ការដាក់លេខកូដជាមួយគ្នា សេចក្តីព្រាងនឹងមើលទៅដូចនេះ។

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

  • ប្រសិន​បើ​នរណា​ម្នាក់​បាន​ជួប​នឹង​បញ្ហា​នេះ​, សូម​ស្វាគមន៍​មក​កាន់ ​បញ្ហា ​។ បន្ទាប់ពីពួកគេជួសជុលវេទមន្តនេះ វានឹងបាត់បង់ថាមពលរបស់វា ហើយនឹងខុសគ្នាខ្លះ។ ប៉ុន្តែនៅពេលនេះ (03/21/2023) វាដំណើរការដូចនោះ។

ទទួលបានភាគលាភអ្នកចេញបរទេស

នរណាម្នាក់អាចគិតថាវិធីសាស្រ្តនេះគឺស្រដៀងទៅនឹងវិធីមុន ហើយអ្នកអាចប្រើវិធីសាស្រ្តតែមួយដែលអ្នកគ្រាន់តែប្តូរឈ្មោះប្រតិបត្តិការប៉ុណ្ណោះ។ ប៉ុន្តែ​គេ​មិន​បាន​ស្មាន!  ការ​ដាក់​ឈ្មោះ​នៅ​ទី​នោះ​មាន​ភាព​ខុស​គ្នា​ខ្លាំង​ទាំង​ក្នុង​វិធី និង​ព័ត៌មាន​ដែល​បាន​ត្រឡប់។ ហើយចំនួនទំព័រចាប់ផ្តើមពី 0 បន្ទាប់មកពី 1។ ដើម្បីកុំឱ្យមានការភ័ន្តច្រឡំក្នុងរឿងទាំងអស់នេះ វាកាន់តែងាយស្រួលក្នុងការសរសេរវិធីពីរផ្សេងគ្នា។ ដែលចម្លែកព្រោះ តក្កវិជ្ជានៃការងារគឺដូចគ្នា។ ខ្ញុំស្តោះទឹកមាត់យូរហើយ ពេលខ្ញុំព្យាយាមបង្កើតវិធីសាស្រ្តមួយ ហើយមានកូដតិច។ វានឹងមិនមានឧទាហរណ៍នៅទីនេះទេ។

GetOperationsByCursor

សំណព្វរបស់ខ្ញុំទាំងបី។ ថ្វីត្បិតតែមិនមានភាពត្រឹមត្រូវបំផុត ប៉ុន្តែត្រឹមត្រូវបំផុត។ យើងធ្វើសំណើចាប់ពីពេលចាប់ផ្តើមបង្កើតគណនីរហូតដល់កាលបរិច្ឆេទអតិបរមាដែលអាចធ្វើបាន (បិទគណនី ឬគណនីបច្ចុប្បន្ន) យើងទទួលបានចម្លើយ យកទស្សន៍ទ្រនិច និងស្នើសុំឡើងវិញ ដរាបណាមានទិន្នន័យ។  ហើយ​កូដ​គឺ​សង្ខេប​ជាង​ក្នុង​ឧទាហរណ៍​ខាង​លើ។

const timer = async time => {     return new Promise(resolve => setTimeout(ដោះស្រាយ, ពេលវេលា)); }   const getOperationsByCursor = async (sdk, accountId, from, to, cursor = ”) => {     try {         const reqData = {             accountId,             from,             to,             limit: 1000,             state: sdk.OperationState.OPERATION_STATE_EXECUTED,             withoutCommissions: មិនពិត,             គ្មានការជួញដូរ៖ មិនពិត             គ្មានពេលយប់៖ មិនពិត             ទស្សន៍ទ្រនិច         };           ការត្រឡប់មកវិញកំពុងរង់ចាំ sdk.operations.getOperationsByCursor(reqData);     } catch (e) {         រង់ចាំកម្មវិធីកំណត់ម៉ោង (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 ចម្បងដែលអ្នកនឹងជួបប្រទះគឺដើម្បីកាវបិទប្រតិបត្តិការនិងរបាយការណ៍ឈ្មួញកណ្តាល។

  •  ប្រសិនបើថ្ងៃនេះអ្នកបានទទួលរបាយការណ៍ឈ្មួញកណ្តាល និងប្រតិបត្តិការសម្រាប់កាលបរិច្ឆេទដែលត្រូវការ ដាក់វាទាំងអស់នៅក្នុងមូលដ្ឋានទិន្នន័យ នោះមិនមានបញ្ហាអ្វីទេ។ 
  • អ្នកនឹងមានបញ្ហានៅថ្ងៃស្អែក នៅពេលអ្នកទទួលបានផ្នែកបន្ទាប់នៃទិន្នន័យពីរបាយការណ៍ និងប្រតិបត្តិការ ហើយសម្រេចចិត្តធ្វើសមកាលកម្មពួកវាជាមួយមូលដ្ឋានទិន្នន័យដែលមានស្រាប់។ 
  • ភាពខុសប្លែកគ្នាជាច្រើនអំពីការមិនត្រូវគ្នា ឬផ្លាស់ប្តូរលេខសម្គាល់បន្ទាប់ពីដំណើរការ
  • បន្ទាប់មកសម្រាប់ទីផ្សារ OTC លេខសម្គាល់មិនត្រូវគ្នាទាល់តែសោះ។
  •  ក៏ដូចជាភាពខុសប្លែកគ្នានៃឧបករណ៍ធ្វើសមកាលកម្ម ដែលជាថ្មីម្តងទៀតមិនស្របគ្នានោះទេ ដោយសារតែភាពប្លែកនៃ API ។ ប៉ុន្តែនោះជារឿងមួយទៀត។

ចូរបន្ថែមការទទួលបានព័ត៌មានអំពីប្រតិបត្តិការទៅកម្មវិធីរបស់យើង។ សំណួរចម្បងនឹងជាកន្លែងដែលទិន្នន័យនឹងត្រូវបានដំណើរការ និងរក្សាទុក។

  •  ប្រសិនបើអ្នកធ្វើវាដោយខ្លួនឯង អ្នកនឹងប្រើប្រាស់ទិន្នន័យដូចគ្នាពីឧបករណ៍ផ្សេងៗ។ បន្ទាប់មកអ្នកត្រូវដំណើរការ និងរក្សាទុកទិន្នន័យនៅលើម៉ាស៊ីនមេ។
  • ប្រសិនបើអ្នកមានទិន្នន័យខុសៗគ្នាជាច្រើនដែលប្រើប្រាស់ដោយអ្នកប្រើប្រាស់ផ្សេងៗគ្នា នោះអ្នកត្រូវសម្រេចចិត្តថាអ្វីដែលសំខាន់ជាងនេះទៅទៀតនោះគឺ ល្បឿនរបស់អ្នកប្រើប្រាស់ ឬការសន្សំដែកនៅខាងអ្នក។ អ្នកណាដែលអាចទិញបាននូវ Hardware ដែលគ្មានដែនកំណត់ រាប់អ្វីៗទាំងអស់នៅលើ Server របស់គាត់ ហើយធ្វើឱ្យវាលឿនបំផុតសម្រាប់អ្នកប្រើប្រាស់ ដោយសន្សំសំចៃធនធានអ្នកប្រើប្រាស់ ដូចជាថ្ម និងចរាចរណ៍ ដែលមានសារៈសំខាន់ខ្លាំងណាស់នៅលើទូរស័ព្ទ។

នៅក្នុងវេន ការរាប់នៅក្នុងកម្មវិធីរុករកមិនមែនជាដំណោះស្រាយដ៏ល្អបំផុតជាគោលការណ៍ទេ។ ដូច្នេះ​អ្វី​ដែល​មិន​ថ្លៃ យើង​ចាត់​ទុក​វា​នៅ​លើ​ម៉ាស៊ីន​បម្រើ​របស់​យើង។ យើងទុកនៅសល់ឱ្យអតិថិជន។ ខ្ញុំពិតជាចង់យក និងគណនាកម្រៃជើងសារនៅលើម៉ាស៊ីនមេ។ ប៉ុន្តែនៅទីនេះមកភាពខុសប្លែកគ្នាដែលហៅថា “អន្តរកម្ម” ។ ចូរនិយាយថាអ្នកមានប្រតិបត្តិការរាប់ពាន់ហើយវាត្រូវចំណាយពេលប្រាំនាទីដើម្បីទទួលបានពួកគេ។ តើ​អ្នក​ប្រើ​នឹង​មាន​អ្វី​នៅ​ពេល​នេះ? Spinner? វឌ្ឍនភាព? Infa ប្រហែល​ប៉ុន្មាន​ត្រូវ​បាន​បង្ហោះ? វាជាការល្អក្នុងការប្រើ “ការរង់ចាំសកម្ម” នៅពេលដែលអ្នកប្រើប្រាស់នៅក្នុងដំណើរការអាចមើលឃើញអ្វីមួយរួចហើយ។ នេះជា លទ្ធផល៖យើងកំពុងបង្កើតសេវាកម្មខ្នាតតូចដោយប្រើ Tinkoff Invest API ដើម្បីធ្វើស្វ័យប្រវត្តិកម្មក្នុងការធ្វើការជាមួយរបាយការណ៍ឈ្មួញកណ្តាល និងការគណនាកម្រៃជើងសារ។

  • កំពុងផ្ទុកទំព័រ
  • វិក្កយបត្រទាំងអស់ត្រូវបានស្នើសុំ
  • បន្ទាប់ពីនោះ រាល់ប្រតិបត្តិការដែលមានកម្រៃជើងសារសម្រាប់ប្រតិបត្តិការដែលបានប្រតិបត្តិត្រូវបានស្នើសុំសម្រាប់គណនីទាំងអស់។ នៅពេលដែលទិន្នន័យត្រូវបានទទួល វាត្រូវបានបង្ហាញនៅក្នុងកម្មវិធីរុករក។

ដើម្បីកុំឱ្យត្រងទិន្នន័យនៅក្នុងព្រឹត្តិការណ៍នីមួយៗ យើងទាញព្រឹត្តិការណ៍ផ្ទាល់ខ្លួនរបស់យើងសម្រាប់គណនីនីមួយៗ។ ដូចនេះ៖

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

ទីផ្សារនេះមានលក្ខណៈពិសេសជាច្រើន ដូច្នេះសូមសិក្សាប្រតិបត្តិការលើវាដោយឡែកពីគ្នា។ នៅពេលអ្នកចាប់ផ្តើមប្រតិបត្តិការធ្វើសមកាលកម្ម វានឹងបង្ហាញថាអ្នកត្រូវនាំយក figi/ticker ទៅជាទម្រង់ដូចគ្នា ដើម្បីផ្គូផ្គងឧបករណ៍ឱ្យបានត្រឹមត្រូវ។ នៅពេលអ្នកចាប់ផ្តើមធ្វើសមកាលកម្មវាជាមួយរបាយការណ៍ឈ្មួញកណ្តាល វានឹងបង្ហាញថាលេខសម្គាល់ពាណិជ្ជកម្មនៃប្រតិបត្តិការដូចគ្នាមានអក្សរនៅដើមក្នុងប្រតិបត្តិការ ហើយពួកវាមិនមាននៅក្នុងរបាយការណ៍ឈ្មួញកណ្តាលទេ។ ដូច្នេះ គេ​មិន​អាច​ប្រៀប​ផ្ទឹម​បាន​ទេ… អាហិម-អាម… ដោយ​ការ​ប្រៀប​ធៀប! ខ្ញុំបានផ្គូផ្គងម៉ោងពាណិជ្ជកម្ម សញ្ញាធីក និងការផ្គូផ្គងដែល TradeId មួយមាននៅក្នុងមួយផ្សេងទៀត។ ត្រូវហើយ ខ្ញុំមិនដឹងទេ។ អ្នក​ណា​ជួប​រឿង​នេះ ហើយ​អ្នក​ណា​ខ្វល់​ពី​វា​មក​រក ​បញ្ហា ឬ​ចាប់​ផ្ដើម​រឿង​ថ្មី។យើងកំពុងបង្កើតសេវាកម្មខ្នាតតូចដោយប្រើ Tinkoff Invest API ដើម្បីធ្វើស្វ័យប្រវត្តិកម្មក្នុងការធ្វើការជាមួយរបាយការណ៍ឈ្មួញកណ្តាល និងការគណនាកម្រៃជើងសារ។

ប្រតិបត្តិការគណិតវិទ្យាលើឧបករណ៍

វាមិនអាចទៅរួចទេបើគ្មានការរកមើលដើម្បីអនុវត្តប្រតិបត្តិការគណិតវិទ្យាជាមួយនឹងបញ្ជីទាំងមូល។ ដើម្បីមិនបន្ថែមភាពកក់ក្តៅទៅទន់ យើងតែងតែពិនិត្យមើលរូបិយប័ណ្ណ និងដំណើរការ លុះត្រាតែយើងប្រាកដថារូបិយប័ណ្ណត្រូវគ្នា ហើយពិន្ទុត្រូវបានបំប្លែងទៅជារូបិយប័ណ្ណដែលចង់បាន។ ប្រដាប់ដោយចំណេះដឹងអំពីការធ្វើការជាមួយលេខធនាគារ យើងនឹងគណនាកម្រៃជើងសារដែលបានចំណាយលើគណនីនីមួយៗ។ ដូចនេះ៖ https://github.com/pskucherov/tcsstat/tree/step4 https://github.com/pskucherov/tcsstat/compare/step3…step4យើងកំពុងបង្កើតសេវាកម្មខ្នាតតូចដោយប្រើ Tinkoff Invest API ដើម្បីធ្វើស្វ័យប្រវត្តិកម្មក្នុងការធ្វើការជាមួយរបាយការណ៍ឈ្មួញកណ្តាល និងការគណនាកម្រៃជើងសារ។    

សេវាមីក្រូរួចរាល់ហើយ!

https://github.com/pskucherov/tcsstat ជាកិច្ចការផ្ទះ អ្នកអាចពិនិត្យមើលថាតើសេវាកម្មនេះដំណើរការជាមួយការភ្ជាប់យឺត នៅពេលដែលការតភ្ជាប់ត្រូវបានខូច នៅពេលដែលអ៊ីនធឺណិតត្រូវបានផ្តាច់ នៅពេលដែលមានកំហុស ឬដែនកំណត់ផុតកំណត់នៅលើផ្នែកនៃឈ្មួញកណ្តាល។ 

សេចក្តីសន្និដ្ឋាន និងផែនការសម្រាប់អនាគត

  • បានសិក្សាអំពីប្រតិបត្តិការជាមូលដ្ឋាន និងធ្វើការជាមួយ Invest API
  • ពេលវេលាចំណាយ ~ 10 ម៉ោង។
  • កម្រិតលំបាក ~ junior+ / មធ្យមទាប 

ប្រសិនបើអ្នកបន្តកែលម្អសេវាកម្មខ្នាតតូច អ្នកអាចនឹងបញ្ចប់ដោយអ្វីមួយដូចនេះ

https://opexbot.info

  នេះជាការអភិវឌ្ឍន៍របស់ខ្ញុំសម្រាប់អ្នកដែលខ្ជិលយល់ រត់ និងពឹងលើខ្លួនឯង។ ខ្ញុំមានគម្រោងបន្ថែមការវិភាគនៅទីនោះតាមការស្នើសុំរបស់អ្នកប្រើប្រាស់។ ប្រសិនបើអ្នកចូលចិត្តអត្ថបទនោះ សូមជាវ ឆានែលតេឡេក្រាម របស់ខ្ញុំ ។ យើងកំពុងបង្កើតសេវាកម្មខ្នាតតូចដោយប្រើ Tinkoff Invest API ដើម្បីធ្វើស្វ័យប្រវត្តិកម្មក្នុងការធ្វើការជាមួយរបាយការណ៍ឈ្មួញកណ្តាល និងការគណនាកម្រៃជើងសារ។

Pavel
Rate author
Add a comment

  1. Isakiiev

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

    Reply