ကျွန်ုပ်တို့သည် အရစ်ကျအစီရင်ခံစာများနှင့် ကော်မရှင်တွက်ချက်မှုများကို အလိုအလျောက်လုပ်ဆောင်ရန် Tinkoff Invest API ကို အသုံးပြု၍ အသေးစားဝန်ဆောင်မှုတစ်ခုကို ဖော်ဆောင်လျက်ရှိသည်။

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

Tinkoff Investments အတွက် စာရင်းအင်းဝန်ဆောင်မှု ဖွံ့ဖြိုးတိုးတက်ရေး နောက်ကွယ်မှ စိတ်အားထက်သန်သူ များမှာ-

Contents
  1. ဘာတွေ ဆွေးနွေးကြမလဲ။
  2. စာရင်းအင်းဝန်ဆောင်မှုကို အဆင့်တစ်ဆင့်ပြီးတစ်ဆင့် ဖော်ဆောင်နေသည်- 
  3. Tinkoff Invest API သို့ ချိတ်ဆက်မှု
  4. ဘရောက်ဆာတစ်ခုတွင် Tinkoff Invest API မှဒေတာဆွဲခြင်း။
  5. အရစ်ကျ အစီရင်ခံစာများနှင့် အရောင်းအဝယ်များကို လက်ခံခြင်း။
  6. GetBroker အစီရင်ခံစာ
  7. လက်ရှိရက်စွဲမှ အနုတ်ကို ထည့်သွင်းစဉ်းစား၍ ရက်စွဲကို ရယူရန် နည်းလမ်း
  8. မျိုးဆက်တောင်းဆိုမှုကို တိုင်ကြားပါ။ 
  9. ရလဒ်:
  10. နိုင်ငံခြားငွေထုတ်ပေးသူ
  11. GetOperationsByCursor
  12. စိတ်ပါဝင်စားသော အချက်အလက်များကို တွက်ချက်ခြင်းနှင့် ထုတ်ပေးခြင်း။
  13. စျေးနှုန်းများဖြင့် အလုပ်လုပ်ပါသည်။ 
  14. အနာဂတ်စာချုပ်များ၏ကုန်ကျစရိတ်
  15. OTC စျေးကွက်
  16. ကိရိယာများပေါ်တွင် သင်္ချာဆိုင်ရာ လုပ်ဆောင်ချက်များ
  17. Microservice အဆင်သင့်ဖြစ်ပါပြီ။
  18. နိဂုံးများနှင့် အနာဂတ်အတွက် အစီအစဉ်များ
  19. https://opexbot.info

ဘာတွေ ဆွေးနွေးကြမလဲ။

  • ဖွံ့ဖြိုးတိုးတက်မှုနှင့်ပတ်သက်ပြီး အသုံးချမှုအပိုင်းသာဖြစ်သည်။
  • ငွေရေးကြေးရေးဆိုင်ရာ တူရိယာများဖြင့် လုပ်ဆောင်ရာတွင် အလွန်အရေးကြီးသည့် အတွေ့အကြုံနှင့် အတွေ့အကြုံများ။
  • လုပ်ဆောင်ရမည့်ကိစ္စများကို ခြုံငုံသုံးသပ်ပါ။

ဒါကြောင့် ကုန်သွယ်မှုစာရင်းဇယားတွေကို တွက်ချက်ပြီး အဆင်ပြေတဲ့နည်းလမ်းနဲ့ လုပ်ချင်ပါတယ်။ 

စာရင်းအင်းဝန်ဆောင်မှုကို အဆင့်တစ်ဆင့်ပြီးတစ်ဆင့် ဖော်ဆောင်နေသည်- 

  1. Tinkoff Invest API သို့ ချိတ်ဆက်မှု
  2. ဘရောက်ဆာတစ်ခုတွင် Tinkoff Invest API မှဒေတာဆွဲခြင်း။
  3. အရစ်ကျ အစီရင်ခံစာများနှင့် အရောင်းအဝယ်များကို လက်ခံခြင်း။
  4. စိတ်ပါဝင်စားသော အချက်အလက်များကို တွက်ချက်ခြင်းနှင့် ထုတ်ပေးခြင်း။
  5. နိဂုံးများနှင့် အနာဂတ်အတွက် အစီအစဉ်များ

Tinkoff Invest API သို့ ချိတ်ဆက်မှု

API သို့ ချိတ်ဆက်ရန်၊ သင်သည် မည်သည့် sdk ကိုမဆို https://github.com/Tinkoff/investAPI#sdk စာရွက်စာတမ်းမှ ရယူနိုင်ပါသည် ။ သို့မဟုတ် npm package ` tinkoff-sdk-grpc-js` ။ အထုပ်ကို developer များမှ နောက်ဆုံးဗားရှင်းသို့ အပ်ဒိတ်လုပ်ရန် အရေးကြီးပါသည်။ တပ်ဆင်ပါ။

npm i 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(ait sdk.users.getAccounts()); })();

ရလဒ်- သင့်အကောင့်များစာရင်းကို ကွန်ဆိုးလ်တွင် ပြသပါမည်။ ဥပမာအားဖြင့်၊ ကွဲပြားမှုများကို ခွဲခြမ်းစိတ်ဖြာကြည့်ကြပါစို့။ကျွန်ုပ်တို့သည် အရစ်ကျအစီရင်ခံစာများနှင့် ကော်မရှင်တွက်ချက်မှုများကို အလိုအလျောက်လုပ်ဆောင်ရန် 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

ကျွန်ုပ်တို့သည် ချစ်ကြည်ရင်းနှီးမှုအဆင့်သို့ ချက်ချင်းဆက်သွားကာ နောက်ထပ် အသေးစိတ်အချက်အလက်များအတွက် ဤအဆင့်၏  အသုံးဝင်သော ကဏ္ဍကို ကြည့်ပါ။ အသေးစိတ်အချက်အလက်များကို ကျွန်ုပ်ဖော်ပြပါမည်။ 

  • nodejs (ဆာဗာ) ဘက်တွင်၊ pages/api/investapi.js ဖိုင်တစ်ခုရှိသည်။ ဤနေရာတွင် ကျွန်ုပ်တို့သည် socket.io ဆာဗာကို ဖန်တီးပြီး investapi သို့ ချိတ်ဆက်ပါသည်။
  • ဘရောက်ဆာ (ဖောက်သည်) ဘက်တွင်၊ ကျွန်ုပ်တို့သည် socket တစ်ခုမှတစ်ဆင့် ဆာဗာသို့ ချိတ်ဆက်ပြီး ပွဲစားထံမှ အကောင့်ဒေတာကို တောင်းဆိုပါသည်။ 
  • ကျွန်ုပ်တို့သည် ဆာဗာရှိ ပွဲစားထံမှ ဒေတာကို လက်ခံရရှိပြီးနောက် ၎င်းကို သုံးစွဲသူထံ ပေးပို့ပါ။ ၎င်းတို့ကို client တွင်လက်ခံရရှိသောအခါ၊ ၎င်းတို့ကို browser တွင်ပြသမည်ဖြစ်သည်။ 

ရလဒ်-  ဘရောက်ဆာကွန်ဆိုးလ်တွင် အကောင့်များနှင့်ပတ်သက်သည့် အချက်အလက်များကို ကျွန်ုပ်တို့ မြင်တွေ့နိုင်သည်။ ဆိုလိုသည်မှာ၊ နောက်ဆုံးအဆင့်တွင်၊ ဆာဗာကွန်ဆိုးလ် (nodejs) တွင် အကောင့်များအကြောင်း အချက်အလက်များကို ကျွန်ုပ်တို့တွေ့ခဲ့ရပြီး လက်ရှိအဆင့်တွင်၊ ဤအချက်အလက်ကို သုံးစွဲသူ (ဘရောက်ဆာ) သို့ လွှဲပြောင်းပေးပါသည်။

ကျွန်ုပ်တို့သည် အရစ်ကျအစီရင်ခံစာများနှင့် ကော်မရှင်တွက်ချက်မှုများကို အလိုအလျောက်လုပ်ဆောင်ရန် Tinkoff Invest API ကို အသုံးပြု၍ အသေးစားဝန်ဆောင်မှုတစ်ခုကို ဖော်ဆောင်လျက်ရှိသည်။

ယခု ဘရောက်ဆာမှ အကောင့်တစ်ခုကို ရွေးချယ်နိုင်စေရန်နှင့် တိုကင်မရှိပါက၊ အမှားတစ်ခု ကွန်ဆိုးလ်သို့ ပို့လိုက်ပါမည်။ အလုပ်သည် ရိုးရှင်းပြီး အသစ်အဆန်းမဟုတ်သောကြောင့် ကျွန်ုပ်သည် ကတိပြုရန်အတွက် လင့်များကိုသာ ပေးပါသည်။

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

အသုံးဝင်ပုံ-

  • သူငယ်ချင်းလုပ်နည်းနှင့် socket ကို ဤနေရာတွင် အသေးစိတ်ဖော်ပြထားပါသည် ။ 
  • ချစ်ကြည်ရေးကုဒ် နောက်တစ်ခု+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. GetBroker အစီရင်ခံစာ
  2. နိုင်ငံခြားငွေထုတ်ပေးသူ
  3. GetOperationsByCursor

အစကတည်းက သိထားဖို့ အရေးကြီးတယ်။ 

  • ပွဲစားအစီရင်ခံစာကို T-3 မုဒ်တွင်ထုတ်ပေးသည်၊ ဆိုလိုသည်မှာ၊ ၎င်းတို့၏ အမှန်တကယ် အကောင်အထည်ဖော်ပြီးနောက် ထိုနေရာတွင် ကုန်သွယ်မှုများကို ပြသသည်။ 
  • ထို့ကြောင့် သင်သည် ဤအစီရင်ခံစာကို နောက်ဆုံးနှစ်ရက်အတွက် တောင်းဆိုပါက၊ ၎င်းသည် သုံးရက်အတွင်း အဆင်သင့်ဖြစ်လိမ့်မည်။ 
  • နောက်ဆုံးသောနေ့ရက်များအတွက် အပေးအယူများပြုလုပ်ရန်၊ ကျွန်ုပ်တို့သည် လည်ပတ်မှုလက်ခံသည့်နည်းလမ်းကို အသုံးပြုသည်၊ သို့သော် အကျိုးဆောင်အစီရင်ခံစာဖွဲ့စည်းပြီးနောက် ၎င်းတို့၏ ID နှင့် အကြောင်းအရာများ ပြောင်းလဲသွားနိုင်သည်ကို သတိရပါ။

GetBroker အစီရင်ခံစာ

အရစ်ကျအစီရင်ခံစာတစ်ခုရရန်၊ အကောင့် ID၊ အစီရင်ခံစာ၏ စတင်သည့်ရက်စွဲနှင့် ပြီးဆုံးသည့်ရက်စွဲတို့ကို ယူရန် လိုအပ်သော်လည်း ၃၁ ရက်ထက် မပိုစေရ။ _broker_report_request တွင် generate _broker_report_request တွင် အစီရင်ခံစာတစ်ခုဖန်တီးရန် API သို့ တောင်းဆိုချက်တစ်ခု ၊ တုံ့ပြန်မှုတွင် taskId တစ်ခုရယူပါ။ ထို့နောက်၊ ဤ taskId ကို အသုံးပြု၍ get _broker_report_response မှ ဒေတာကို ကျွန်ုပ်တို့ ရရှိပါသည်။

ဒါကြောင့် စာရွက်စာတမ်းမှာ ကွဲလွဲမှုတွေ ရှိပါတယ်၊ လက်တွေ့မှာ ကွဲလွဲချက်တွေ ရှိပါတယ်။ မင်းလက်ကို ကြည့်ပါ-

  • ဤရက်စွဲများအတွက် TaskID ကို အတိအကျ ထာဝရသိမ်းဆည်းထားရန် လိုအပ်ပါသည်။ 
  • အကယ်၍ သင်ဆုံးရှုံးသွားပါက၊ တောင်းဆိုထားသည့်ရက်စွဲများအတွက် မျိုးဆက်တောင်းဆိုမှုကို တုံ့ပြန်သည့်အနေဖြင့် အစီရင်ခံစာသည် ဦးစွာရောက်ရှိလာမည်ဖြစ်သည်။ 
  • ပြီးတော့ လုံးဝမလာဘူး။

ကုဒ်ကို စရေးလိုက်ရအောင်

လက်ရှိရက်စွဲမှ အနုတ်ကို ထည့်သွင်းစဉ်းစား၍ ရက်စွဲကို ရယူရန် နည်းလမ်း

const getDateSubDay = (subDay = 5၊ start = true) => {     const date = new Date();     date.setUTCDate(date.getUTCDate() – subDay);       if (start) {         date.setUTCHours(0, 0, 0, 0);     } else {         date.setUTCHours(23၊ 59၊ 59၊ 999);     }       ပြန်လာမည့်ရက်စွဲ };

မျိုးဆက်တောင်းဆိုမှုကို တိုင်ကြားပါ။ 

const ပွဲစားအစီရင်ခံစာ = စောင့်မျှော်နေပါသည် (sdk.operations.getBrokerReport)({         generateBrokerReportRequest- {             accountId၊             from,             to,         }, });

ရလဒ်:

  • command ၏ပထမဆုံးလုပ်ဆောင်မှုရလဒ်အနေဖြင့်၊ ကျွန်ုပ်တို့သည် taskId ကိုရရှိသည်။ 
  • အစီရင်ခံစာကို ပွဲစားဘက်မှ စတင်ထုတ်ပေးပါသည်။ အဆင်သင့်ဖြစ်ပြီဟု မသိသောအခါ၊ ကျွန်ုပ်တို့သည် စောင့်ဆိုင်းပြီး အစီရင်ခံစာကို မျှော်လင့်ထားသည့် taskId အား အခါအားလျော်စွာ ဆွဲထုတ်ပါသည်။
  • အဘယ်ကြောင့်? ဘာကြောင့်လဲဆိုတော့ အစီရင်ခံစာက အဆင်သင့်မဖြစ်ရင် error တက်လို့ပါပဲ။ ပွဲစားဘက်မှ အစီရင်ခံစာ အဆင်သင့်မဖြစ်ပါက၊ ၎င်းသည် သင့်ကုဒ်တွင် အမှားအယွင်းတစ်ခုဖြစ်သည်။ ကျေးဇူးပြု၍ လုပ်ဆောင်ပါ- 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 မှစတင်သည်။ ဤအရာအားလုံးတွင် မရောထွေးစေရန်၊ မတူညီသောနည်းလမ်းနှစ်ခုကို ရေးရန်ပိုမိုလွယ်ကူသည်။ ဘာထူးဆန်းလို့လဲ။ အလုပ်ရဲ့ logic က အတူတူပါပဲ။ နည်းလမ်းတစ်ခုပြုလုပ်ရန် ကြိုးစားသောအခါတွင် အချိန်အတော်ကြာ တံတွေးထွေးပြီး ကုဒ်နည်းပါသည်။ ဤနေရာတွင် ဥပမာများ ရှိမည်မဟုတ်ပါ။

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- မှားသည်၊             without Trades: false,             without Overnights: false,             cursor,         };           sdk.operations.getOperationsByCursor(reqData);     } catch (e) {         wait 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 သည် လုပ်ဆောင်ချက်များမှ ပြန်လည်စတင်သည်။ ဒါပေမယ့် ဒါကို သီးခြားဆောင်းပါးအဖြစ် ခွဲခြားနိုင်ပါတယ်။ သင်ကြုံတွေ့ရမည့် အဓိက ကွဲလွဲချက်များမှာ ကော်လုပ်ငန်းများနှင့် အရစ်ကျအစီရင်ခံစာတစ်ခုဖြစ်သည်။

  •  အကယ်၍ သင်သည် ယနေ့တွင် လိုအပ်သည့်ရက်စွဲများအတွက် ပွဲစားအစီရင်ခံစာနှင့် အရောင်းအ၀ယ်များကို လက်ခံရရှိပါက၊ ၎င်းအားလုံးကို ဒေတာဘေ့စ်တွင် ထည့်ထားမည်ဆိုလျှင် ပြဿနာမရှိပါ။ 
  • အစီရင်ခံစာနှင့် လုပ်ဆောင်ချက်များမှ ဒေတာနောက်တစ်ပိုင်းကို လက်ခံရရှိပြီး ရှိပြီးသားဒေတာဘေ့စ်နှင့် တစ်ပြိုင်တည်းလုပ်ဆောင်ရန် ဆုံးဖြတ်သည့်အခါတွင် မနက်ဖြန်တွင် ပြဿနာများရှိလာပါမည်။ 
  • လုပ်ဆောင်ပြီးနောက် id နှင့် ကိုက်ညီမှုမရှိခြင်း သို့မဟုတ် ပြောင်းလဲခြင်းဆိုင်ရာ ကွဲလွဲချက်များစွာ
  • ထို့နောက် OTC စျေးကွက်အတွက် id သည် လုံးဝမကိုက်ညီပါ။
  •  API ၏ထူးခြားချက်များကြောင့် ထပ်တူထပ်မျှမဖြစ်နိုင်သော တူညီသောတူရိယာများ၏ ကွဲပြားချက်များ။ ဒါပေမယ့် အဲဒါက တခြားဇာတ်လမ်းတစ်ခုပါ။

ကျွန်ုပ်တို့၏ အပလီကေးရှင်းတွင် လုပ်ဆောင်ချက်များနှင့်ပတ်သက်သော အချက်အလက်ရယူခြင်းများကို ပေါင်းထည့်ကြပါစို့။ အဓိကမေးခွန်းမှာ ဒေတာများကို မည်သည့်နေရာတွင် စီမံပြီး သိမ်းဆည်းထားမည်နည်း။

  •  သင်ကိုယ်တိုင်ပြုလုပ်ပါက မတူညီသော စက်ပစ္စည်းများမှ တူညီသောဒေတာကို သုံးစွဲမည်ဖြစ်သည်။ ထို့နောက် ဆာဗာပေါ်တွင် ဒေတာများကို လုပ်ဆောင်ပြီး သိမ်းဆည်းရန် လိုအပ်သည်။
  • အကယ်၍ သင့်တွင် မတူညီသောအသုံးပြုသူများစွာစားသုံးသော မတူညီသောဒေတာများစွာရှိပါက၊ ထို့ထက်အရေးကြီးသောအရာကို သင်ဆုံးဖြတ်ရန်လိုသည်- သုံးစွဲသူများ၏အမြန်နှုန်း သို့မဟုတ် သံဓာတ်ကို သင့်ဘက်တွင် ချွေတာရန် လိုအပ်သည်။ အကန့်အသတ်မဲ့ ဟာ့ဒ်ဝဲပမာဏကို တတ်နိုင်သူ မည်သူမဆို မိမိဆာဗာပေါ်ရှိ အရာအားလုံးကို ရေတွက်ပြီး ဖုန်းများတွင် အလွန်အရေးကြီးသည့် ဘက်ထရီနှင့် အသွားအလာကဲ့သို့သော သုံးစွဲသူအရင်းအမြစ်များကို ချွေတာပြီး သုံးစွဲသူများအတွက် အလွန်မြန်ဆန်စေသည်။

တစ်ဖန်၊ ဘရောက်ဆာတွင် ရေတွက်ခြင်းသည် မူအရအားဖြင့် အကောင်းဆုံးဖြေရှင်းချက်မဟုတ်ပေ။ ထို့ကြောင့်၊ စျေးမကြီးသောအရာကိုကျွန်ုပ်တို့၏ဆာဗာတွင်ကျွန်ုပ်တို့စဉ်းစားသည်။ ကျန်တာကို Client ကို ချန်ထားပေးတယ်။ ဆာဗာပေါ်ရှိ ကော်မရှင်ကို ငါတကယ်ယူ၍ တွက်ချက်လိုပါသည်။ သို့သော် ဤတွင် “အပြန်အလှန်အကျိုးသက်ရောက်မှု” ဟုခေါ်သော ထူးခြားချက် ထွက်ပေါ်လာသည်။ သင့်တွင် လည်ပတ်မှု ထောင်ပေါင်းများစွာ ရှိပြီး ၎င်းတို့ကို လက်ခံရန် ငါးမိနစ်ခန့် ကြာသည် ဆိုကြပါစို့။ ဒီအချိန်မှာ အသုံးပြုသူ ဘာတွေရှိမလဲ။ 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 ရှေ့ဆက်သွားပါ။ ဒီစာကြောင်းကို ဖတ်ရတာ အရမ်းကောင်းပါတယ်။ 

စိတ်ပါဝင်စားသော အချက်အလက်များကို တွက်ချက်ခြင်းနှင့် ထုတ်ပေးခြင်း။

ဘယ်သူက ဘာအချက်အလက်တွေ လိုအပ်လဲဆိုတဲ့အပေါ်မှာ မူတည်တယ်။ ထို့ကြောင့်၊ သင်ကြုံတွေ့ရမည့် အဓိက ကွဲပြားချက်များကို ကျွန်ုပ်ချက်ချင်း ပြောပြပါမည်။

စျေးနှုန်းများဖြင့် အလုပ်လုပ်ပါသည်။ 

ငွေရေးကြေးရေးနဲ့ အလုပ်လုပ်သူတိုင်းက ငွေလွှဲတာကို နံပါတ်လုံးနဲ့သာ လုပ်ဆောင်သင့်တယ်ဆိုတာ သိတယ်။ ဒဿမအမှတ်ပြီးနောက် တန်ဖိုးများ မမှန်ကန်မှုကြောင့် လည်ပတ်မှုအများအပြားနှင့် တိုးပွားလာသော အမှား။ ထို့ကြောင့် စျေးနှုန်းအားလုံးကို အောက်ပါ MoneyValue ဖော်မတ်ဖြင့် တင်ပြထားပါသည်။ကျွန်ုပ်တို့သည် အရစ်ကျအစီရင်ခံစာများနှင့် ကော်မရှင်တွက်ချက်မှုများကို အလိုအလျောက်လုပ်ဆောင်ရန် Tinkoff Invest API ကို အသုံးပြု၍ အသေးစားဝန်ဆောင်မှုတစ်ခုကို ဖော်ဆောင်လျက်ရှိသည်။

လယ်ကွင်း အမျိုးအစား ဖော်ပြချက်
ငွေကြေး ကြိုးတစ်ချောင်း ISO ငွေကြေးကုဒ် စာတန်း
ယူနစ်များ int64 ပေါင်းလဒ်၏ ကိန်းပြည့်တစ်စိတ်တစ်ပိုင်းသည် အနှုတ်ကိန်းဖြစ်နိုင်သည်။
နာနို int32 ပမာဏ၏ အပိုင်းကိန်းသည် အနှုတ်ကိန်း ဖြစ်နိုင်သည်။

၎င်းတို့ကို သီးခြားစီလုပ်ဆောင်ပြီးနောက် ၎င်းတို့ကို စျေးနှုန်းတန်ဖိုးသို့ ယူဆောင်လာပါသည်-

quotation.units + quotation.nano / 1e9

အနာဂတ်စာချုပ်များ၏ကုန်ကျစရိတ်

အနာဂတ်၏စျေးနှုန်းကို အမှတ်များဖြင့် ဖော်ပြသည်၊ သင့်တွင် အနာဂတ်ငွေကြေးတစ်ခုရှိသည့်အခါ၊ နှုန်းထားကို သိရှိရန်လိုအပ်သည်။ အမှတ်စာရင်းနှင့် စျေးနှုန်းအဆင့်တွင် ပါ၀င်ပါသည်။ အရောင်းအ၀ယ်မှ အမြတ်ကို တွက်ချက်သောအခါတွင်၊ ဤအရာသည် ရိုက်နိုင်သောကြောင့် ဖြစ်သည်။ စျေးနှုန်းကို အရေအတွက်ဖြင့် မြှောက်ခြင်းဖြင့် စုစုပေါင်း ပမာဏကို တွက်ချက်ပါ။ ဒီနေရာမှာ သတိထားဖို့ လိုပါတယ်။ လောလောဆယ်တော့ ဘယ်လိုသွားမလဲဆိုတာ ကြည့်မယ်။ ၎င်းသည် ငွေကြေးအနာဂတ်နှင့် သက်ဆိုင်သည်၊ အခြားနေရာများတွင် ဤအရာအားလုံး အဆင်ပြေပါသည်။ကျွန်ုပ်တို့သည် အရစ်ကျအစီရင်ခံစာများနှင့် ကော်မရှင်တွက်ချက်မှုများကို အလိုအလျောက်လုပ်ဆောင်ရန် Tinkoff Invest API ကို အသုံးပြု၍ အသေးစားဝန်ဆောင်မှုတစ်ခုကို ဖော်ဆောင်လျက်ရှိသည်။ ကျွန်ုပ်တို့သည် အရစ်ကျအစီရင်ခံစာများနှင့် ကော်မရှင်တွက်ချက်မှုများကို အလိုအလျောက်လုပ်ဆောင်ရန် Tinkoff Invest API ကို အသုံးပြု၍ အသေးစားဝန်ဆောင်မှုတစ်ခုကို ဖော်ဆောင်လျက်ရှိသည်။

OTC စျေးကွက်

ဤစျေးကွက်တွင် ထူးခြားချက်များစွာရှိသည်၊ ထို့ကြောင့် ၎င်းနှင့်ပတ်သက်သည့် လုပ်ဆောင်ချက်များကို သီးခြားလေ့လာကြည့်ကြပါစို့။ သင်စင့်ခ်လုပ်ခြင်းလုပ်ငန်းများကို စတင်သောအခါ၊ တူရိယာကို မှန်ကန်စွာကိုက်ညီစေရန်အတွက် ဖီဂီ/လက်မှတ်ကို တူညီသောပုံစံသို့ ယူဆောင်လာရန် လိုအပ်ပါသည်။ ဤအရာကို ပွဲစားအစီရင်ခံစာနှင့် တစ်ပြိုင်တည်းစတင်သောအခါ၊ တူညီသောငွေပေးငွေယူ၏ကုန်သွယ်မှု ID တွင် အရောင်းအ၀ယ်များတွင်အစတွင် စာလုံးများပါရှိပြီး ၎င်းတို့သည် အရစ်ကျအစီရင်ခံစာတွင်မပါဝင်ကြောင်း တွေ့ရှိရမည်ဖြစ်ပါသည်။ ထို့ကြောင့် နှိုင်းယှဥ်၍ မရနိုင်ပေ။ TradeId တစ်ခုသည် အခြားတစ်ခုတွင်ပါရှိသော အရောင်းအ၀ယ်အချိန်၊ ticker နှင့် ကိုက်ညီပါသည်။ မှန်တယ်၊ မသိဘူး။ ဒါကို ကြုံဖူးသူတိုင်း ဂရုစိုက်တဲ့သူက ပြဿနာကို လာပြီး အသစ်တစ်ခု စတင်လိုက်ပါ။ကျွန်ုပ်တို့သည် အရစ်ကျအစီရင်ခံစာများနှင့် ကော်မရှင်တွက်ချက်မှုများကို အလိုအလျောက်လုပ်ဆောင်ရန် 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 နာရီ
  • ခက်ခဲမှုအဆင့် ~ အငယ်တန်း+ / အလယ်တန်းနိမ့် 

အကယ်၍ သင်သည် မိုက်ခရိုဝန်ဆောင်မှုကို ဆက်လက် ပြုပြင်နေပါက၊ သင်သည် ဤကဲ့သို့သော အရာနှင့် အဆုံးသတ်သွားနိုင်သည်။

https://opexbot.info

  ဒါက နားလည်ဖို့ ပျင်းလွန်းသူတွေ၊ ပြေးပြီး ကိုယ့်ဘာသာကိုယ် အားကိုးတတ်သူတွေအတွက် ငါ့ရဲ့ ဖွံ့ဖြိုးတိုးတက်မှုပါ။ အသုံးပြုသူများ၏ တောင်းဆိုချက်အရ ထိုနေရာတွင် ခွဲခြမ်းစိတ်ဖြာမှုများကို ထည့်သွင်းရန် စီစဉ်ထားပါသည်။ ဆောင်းပါးကို ကြိုက်နှစ်သက်ပါက ကျွန်ုပ်၏ တယ်လီဂရမ်ချန်နယ် သို့ စာရင်းသွင်းပါ ။ ကျွန်ုပ်တို့သည် အရစ်ကျအစီရင်ခံစာများနှင့် ကော်မရှင်တွက်ချက်မှုများကို အလိုအလျောက်လုပ်ဆောင်ရန် Tinkoff Invest API ကို အသုံးပြု၍ အသေးစားဝန်ဆောင်မှုတစ်ခုကို ဖော်ဆောင်လျက်ရှိသည်။

Pavel
Rate author
Add a comment

  1. Isakiiev

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

    Reply