موږ د Tinkoff Invest API په کارولو سره د بروکرج راپورونو او محاسبې کمیسیونونو سره کار کولو اتومات کولو لپاره مایکرو خدمت رامینځته کوو.

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

د ټینکوف پانګې اچونې لپاره د احصایې خدماتو د پراختیا تر شا الهام اخیستونکي وو:

څه به پرې بحث وشي؟

  • یوازې د پراختیا په اړه پلي شوې برخه.
  • رښتینې پوهه او تجربه، کوم چې د مالي وسایلو سره کار کولو کې خورا مهم دي.
  • د کار کولو لپاره مسلو ته کتنه

نو، زه غواړم د سوداګرۍ احصایې محاسبه کړم او دا په مناسب ډول ترسره کړم. 

ګام په ګام د احصایې خدمت رامینځته کول: 

  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 } = اړتیا(‘tinkoff-sdk-grpc-js’);   // ټوکن چې د دې په څیر ترلاسه کیدی شي   const TOKEN = ‘YOURAPI’;   // د هغه غوښتنلیک نوم چې تاسو یې د TCS لاګونو کې موندلی شئ. const appName = ‘tcsstat’;   const sdk = createSdk(TOKEN, appName); (async () => {     console.log(انتظار 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

موږ سمدلاسه د ملګرتیا بل ګام ته لاړ شو + ساکټ + پانګونه ، او د ټولو توضیحاتو لپاره د دې مرحلې  ګټوره برخه وګورئ . زه به توضیحات بیان کړم: 

  • د نوډج (سرور) اړخ کې، د پاڼې/api/investapi.js فایل شتون لري. دا هغه ځای دی چې موږ د socket.io سرور رامینځته کوو او د پانګونې سره وصل کوو.
  • د براوزر (پیرودونکي) اړخ کې، موږ د ساکټ له لارې سرور سره وصل کوو او د بروکر څخه د حساب ډیټا غوښتنه کوو. 
  • موږ په سرور کې د بروکر څخه ډاټا ترلاسه کوو، بیا یې پیرودونکي ته لیږو. کله چې دوی په پیرودونکي کې ترلاسه کیږي، دوی په براوزر کې ښودل کیږي. 

پایله:  د براوزر کنسول کې موږ کولی شو د حسابونو په اړه معلومات وګورو. دا دی، په وروستي ګام کې، موږ په سرور کنسول (نوډجز) کې د حسابونو په اړه معلومات ولیدل، په اوسني مرحله کې، موږ دا معلومات پیرودونکي (براوزر) ته لیږدول.

موږ د Tinkoff Invest API په کارولو سره د بروکرج راپورونو او محاسبې کمیسیونونو سره کار کولو اتومات کولو لپاره مایکرو خدمت رامینځته کوو.

اوس راځئ چې دا جوړ کړو چې تاسو کولی شئ د براوزر څخه یو حساب وټاکئ، او که چیرې هیڅ نښه شتون ونلري، نو کنسول ته یوه تېروتنه لیږل کیږي. کار ساده دی او هیڅ نوی ندی، نو زه یوازې ژمنې ته لینکونه ورکوم

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

ګټور:

  • د راتلونکي ملګري او ساکټ جوړولو څرنګوالی دلته په تفصیل سره بیان شوی . 
  • د ملګرتیا کوډ بل + ساکټ + پانګه اچونه:

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. GetDivendsForeign Issuer
  3. GetOperations ByCursor

له پیل څخه دا مهمه ده چې پوه شئ: 

  • د بروکرج راپور په T-3 حالت کې رامینځته شوی ، د مثال په توګه. تجارتونه د دوی د حقیقي اجرا کولو وروسته هلته ښودل کیږي. 
  • په دې اساس، که تاسو د تیرو دوو ورځو لپاره د دې راپور غوښتنه وکړئ، دا به په دریو ورځو کې چمتو شي. 
  • د وروستیو ورځو لپاره د معاملو ترلاسه کولو لپاره، موږ د معاملو ترلاسه کولو طریقه کاروو، مګر په یاد ولرئ چې د دوی ID او مینځپانګې ممکن د بروکرج راپور رامینځته کیدو وروسته بدل شي.

GetBrokerReport

د بروکرج راپور ترلاسه کولو لپاره، تاسو اړتیا لرئ د حساب ID، د پیل نیټه او د راپور پای نیټه واخلئ، مګر د 31 ورځو څخه زیات نه. موږ په _broker_report_request generate کې API ته د راپور چمتو کولو لپاره غوښتنه لیږو ، په ځواب کې د کاري ID ترلاسه کړئ. له هغې وروسته، د دې کاري ID په کارولو سره، موږ د _broker_report_response ترلاسه کولو څخه ډاټا ترلاسه کوو .

نو اسناد وايي، په حقیقت کې باریکي شتون لري. خپل لاسونه وګورئ:

  • تاسو اړتیا لرئ د دې نیټو لپاره د تل لپاره TaskID خوندي کړئ. 
  • ځکه چې که تاسو دا له لاسه ورکړئ، نو د غوښتل شوي نیټې لپاره به راپور لومړی د نسل غوښتنې په ځواب کې راشي، 
  • او بیا به دا هیڅکله نه راځي.

[/ spoiler] راځئ چې د کوډ لیکل پیل کړو

د نیټې ترلاسه کولو طریقه، د اوسني نیټې څخه د کمولو په پام کې نیولو سره

const getDateSubDay = (subDay = 5, start = true) => {     const date = new date();     date.setUTCDate(date.getUTCDate() – فرعي ورځ؛       که (پیل) {         date.setUTCHours(0, 0, 0, 0);     } نور {         date.setUTCHours(23, 59, 59, 999);     د راستنیدو نیټه       ؛ };

د راپور تولید غوښتنه 

const brokerReport = انتظار (sdk.operations.getBrokerReport)({         generateBrokerReportRequest: {             accountId,             from,             to,         }, });

پایله:

  • د کمانډ د لومړي اجرا کولو په پایله کې، موږ د کاري ID ترلاسه کوو. 
  • راپور د بروکر په اړخ کې رامینځته کیدو پیل کوي. کله چې دا چمتو وي نامعلومه وي، موږ انتظار کوو او وخت په وخت د راپور په تمه د ټاسک آی ډي راوباسي.
  • ولې؟ ځکه چې که راپور چمتو نه وي، دا یوه تېروتنه کوي. که راپور د بروکر لوري ته چمتو نه وي، نو دا ستاسو په کوډ کې یوه تېروتنه ده. مهرباني وکړئ پروسس کړئ: 30058|INVALID_ARGUMENT| کار لا بشپړ شوی نه دی، مهرباني وکړئ وروسته بیا هڅه وکړئ

د انتظار او راپور ترلاسه کولو کوډ داسې ښکاري.

const timer = async time => {     نوې وعده بیرته راګرځول(حل => د وخت ټاکل (حل کول، وخت))؛ }   const getBrokerResponseByTaskId = async (taskId, page = 0) => {     هڅه وکړئ {         بیرته ستنیدو انتظار (sdk.operations.getBrokerReport)({             getBrokerReportRequest: {                 taskId,                 page,             },         });     } کیچ (e) {         console.log(‘انتظار’، e)؛         د انتظار وخت (10000)؛         بیرته ستنیدل getBrokerResponseByTaskId(taskId، پاڼه)؛     } } ;

بیا ورته جادو پیښیږي. موږ خپل سکریپټ ودروو، بیا یې پیل کړو، موږ ټاسک آیډ نلرو. موږ کوډ د taskId غوښتنې سره اجرا کوو، مګر موږ نور د taskId نه ترلاسه کوو، مګر سمدلاسه راپور. جادو! او هرڅه به سم وي که دا تل همداسې وي. مګر په یوه میاشت کې به هیڅ معلومات شتون ونلري. ګټور :

  • یو څه نظریه دلته او دلته بیان شوې ده .
  • د کوډ سره یوځای کول، مسوده به داسې ښکاري.

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

  • که څوک په دې اړه راشي، نو مسلې ته ښه راغلاست . وروسته له دې چې دوی دا جادو ترمیم کړي، دا به خپل ځواک له لاسه ورکړي او یو څه توپیر ولري. مګر په اوسني وخت کې (03/21/2023) دا ورته کار کوي.

GetDivendsForeign Issuer

یو څوک شاید فکر وکړي چې دا طریقه د تیر سره ورته ده او تاسو کولی شئ یو واحد میتود وکاروئ په کوم کې چې تاسو یوازې د عملیاتو نوم بدل کړئ. مګر دوی اټکل نه کاوه!  نوم ورکول په میتودونو او بیرته راستنیدونکو معلوماتو کې خورا توپیر لري. او د پاڼې شمیره له 0 څخه پیل کیږي، بیا له 1 څخه. د دې لپاره چې په دې ټولو کې ګډوډ نه شي، د دوو مختلفو میتودونو لیکل اسانه دي. کوم چې عجيب دی، ځکه د کار منطق یو شان دی. ما د اوږدې مودې لپاره سپک کړ کله چې ما د یوې میتود جوړولو هڅه وکړه او لږ کوډ شتون درلود. دلته به مثالونه نه وي.

GetOperations ByCursor

زما له دریو څخه غوره. که څه هم تر ټولو دقیق نه دی، مګر خورا مناسب. موږ د حساب جوړولو له پیل څخه تر اعظمي ممکنه نیټې پورې غوښتنه کوو (د حساب بندول یا اوسني حساب). موږ ځواب ترلاسه کوو، کرسر واخلو او بیا غوښتنه وکړو تر هغه چې معلومات شتون ولري.  او کوډ د پورته مثالونو په پرتله خورا لنډ دی.

const timer = async time => {     نوې وعده بیرته راګرځول(حل => د وخت ټاکل (حل کول، وخت))؛ }   const getOperationsByCursor = async (sdk, accountId, from, to, cursor = ”) => {     هڅه وکړئ {         const reqData = {             accountId,             from,             to,             limit: 1000,             state: sdk.OperationState.OPERATION_STATE_EXECUTED،             پرته له کمیسون: غلط             د تجارت پرته: دروغ،             د شپې پرته: غلط،             کرسر،         };           بیرته ستنیدل sdk.operations.getOperationsByCursor(reqData);     } کیچ (ای) {         د انتظار وخت (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 ځانګړتیاو له امله سره سمون نه لري. مګر دا بله کیسه ده.

راځئ چې زموږ غوښتنلیک کې د عملیاتو په اړه معلومات ترلاسه کړو. اصلي پوښتنه به دا وي چې معلومات به چیرې پروسس او زیرمه شي.

  •  که تاسو دا د ځان لپاره کوئ ، نو تاسو به ورته ډیټا د مختلف وسیلو څخه مصرف کړئ. بیا تاسو اړتیا لرئ په سرور کې ډاټا پروسس او ذخیره کړئ.
  • که تاسو د ډیری مختلف کاروونکو لخوا مصرف شوي ډیری مختلف ډیټا لرئ ، نو تاسو اړتیا لرئ پریکړه وکړئ چې څه مهم دي: د کاروونکو سرعت یا ستاسو په اړخ کې د اوسپنې خوندي کول. څوک چې د لامحدود هارډویر مصرف کولی شي په خپل سرور کې هرڅه حسابوي او دا د کاروونکو لپاره خورا ګړندي کوي ، د کارونکي سرچینې خوندي کوي ، لکه بیټرۍ او ترافیک ، کوم چې په تلیفونونو کې خورا مهم دی.

په بدل کې، په براوزر کې شمیرل په اصولو کې ترټولو غوره حل ندی. له همدې امله، هغه څه چې ګران ندي، موږ دا زموږ په سرور کې په پام کې نیسو. موږ پاتې پیرودونکي ته پریږدو. زه واقعیا غواړم په سرور کې کمیسیون واخلم او محاسبه کړم. مګر دلته د “متقابل عمل” په نوم یادښت راځي. راځئ چې ووایو تاسو زرګونه عملیات لرئ او د دوی ترلاسه کولو لپاره پنځه دقیقې وخت نیسي. په دې وخت کې به کاروونکي څه ولري؟ سپنر؟ پرمختګ؟ په دې اړه معلومات چې څومره اپلوډ شوي؟ دا د “فعال انتظار” کارولو لپاره مثالی دی کله چې په پروسه کې کارونکي دمخه یو څه لیدلی شي. دلته پایله ده:موږ د Tinkoff Invest API په کارولو سره د بروکرج راپورونو او محاسبې کمیسیونونو سره کار کولو اتومات کولو لپاره مایکرو خدمت رامینځته کوو.

  • د پاڼې پورته کول
  • ټول رسیدونه غوښتل شوي دي
  • له هغې وروسته، د ټولو حسابونو لپاره د اجرا شویو معاملو لپاره د کمیسیونونو سره ټولې معاملې غوښتنه کیږي. لکه څنګه چې ډاټا ترلاسه کیږي، دا په براوزر کې وړاندې کیږي.

د دې لپاره چې هر ځل په پیښو کې ډاټا فلټر نه کړو، موږ د هر حساب لپاره خپله پیښه راوباسئ. لکه دغه:

socket.emit(‘sdk:getOperationsCommissionResult_’ + accountId، {                 توکي: ډاټا؟. توکي،                 پرمختګ: بولین(nextCursor)، });

د لانچ کولو مسوده دلته ده: https://github.com/pskucherov/tcsstat/tree/step3 https://github.com/pskucherov/tcsstat/compare/step2…step3 پرمخ ځي. دا ښه ده چې تاسو دا کرښه ولوستله! 

د ګټو معلوماتو محاسبه او محصول

پدې پورې اړه لري چې څوک کوم معلوماتو ته اړتیا لري. له همدې امله ، زه سمدلاسه تاسو ته اصلي لنډیزونه وایم چې تاسو به ورسره مخ شئ.

د نرخونو سره کار کول 

هرڅوک چې د مالیې سره کار کوي پوهیږي چې د پیسو لیږد باید یوازې د ټولو شمیرو سره ترسره شي. د لسیزې نقطې وروسته د ارزښتونو د ناسموالي له امله او د لوی شمیر عملیاتو سره مجموعي غلطي. له همدې امله ټول نرخونه د پیسو ارزښت په لاندې شکل کې وړاندې کیږيموږ د Tinkoff Invest API په کارولو سره د بروکرج راپورونو او محاسبې کمیسیونونو سره کار کولو اتومات کولو لپاره مایکرو خدمت رامینځته کوو.

میدان ډول تفصیل
اسعارو تار String ISO اسعارو کوډ
واحدونه int64 د مجموعې بشپړ برخه، کیدای شي منفي شمیره وي
نانو int32 د مقدار جزئي برخه، کیدای شي منفي شمیره وي

موږ دوی په جلا توګه پروسس کوو، بیا یې د قیمت ارزښت ته راوړو:

quotation.units + quotation.nano / 1e9

د راتلونکي قراردادونو لګښت

د فیوچر قیمت په پوائنټونو کې وړاندې کیږي، کله چې تاسو د اسعارو راتلونکې لرئ، تاسو اړتیا لرئ نرخ پوه شئ. او البته نرخ په پوائنټونو او د نرخ مرحله. کله چې تاسو د معاملو څخه ګټه محاسبه کړئ، دا کولی شي ډزې وکړي، ځکه. که تاسو د مقدار لخوا قیمت ضرب کولو سره ټول مقدار محاسبه کړئ. دلته تاسو باید محتاط اوسئ. د اوس لپاره، موږ به وګورو چې دا څنګه پرمخ ځي. دا د اسعارو فیوچرونو باندې پلي کیږي ، په نورو ځایونو کې د دې سره هرڅه سم دي.موږ د Tinkoff Invest API په کارولو سره د بروکرج راپورونو او محاسبې کمیسیونونو سره کار کولو اتومات کولو لپاره مایکرو خدمت رامینځته کوو. موږ د Tinkoff Invest API په کارولو سره د بروکرج راپورونو او محاسبې کمیسیونونو سره کار کولو اتومات کولو لپاره مایکرو خدمت رامینځته کوو.

د OTC بازار

دا بازار ډیری ځانګړتیاوې لري، نو راځئ چې په جلا توګه عملیات مطالعه کړو، کله چې تاسو عملیات همغږي کول پیل کړئ، نو دا به معلومه شي چې تاسو اړتیا لرئ چې د وسیلې په سمه توګه سمون کولو لپاره ورته شکل ته فیګي / ټیکر راوړو. کله چې تاسو دا د بروکرج راپور سره همغږي کول پیل کړئ، نو دا به معلومه شي چې د ورته لیږد سوداګریز ID د لیږد په پیل کې لیکونه لري او دوی د بروکرج راپور کې ندي. له همدې امله، دوی نشي پرتله کیدی … احم-احمد … په پرتله! ما د سوداګرۍ وخت، ټیکر او میچ کول چې یو 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 د کور کار په توګه، تاسو کولی شئ وګورئ چې ایا خدمت د ورو پیوستون سره کار کوي، کله چې پیوستون مات شوی وي، کله چې انټرنیټ قطع شوی وي، کله چې د بروکر په برخه کې تېروتنې یا پای ته رسیدلي حدونه. 

د راتلونکي لپاره پایلې او پلانونه

  • د بنسټیزو عملیاتو او د پانګونې API سره کار کولو په اړه زده کړه
  • وخت ~ 10 ساعته مصرف شوی
  • د مشکل کچه ~ جونیئر + / ټیټ منځنی 

که تاسو د مایکروسافټ پاکولو ته دوام ورکړئ، تاسو ممکن د دې په څیر یو څه سره پای ته ورسیږئ

https://opexbot.info

  دا زما پرمختګ دی، د هغو کسانو لپاره چې په پوهیدو، چلولو او حساب کولو کې ډیر سست دي. زه پلان لرم چې د کاروونکو په غوښتنه هلته تحلیلونه اضافه کړم. که مقاله مو خوښه شوه نو زما د ټیلیګرام چینل سبسکرایب کړئ . موږ د Tinkoff Invest API په کارولو سره د بروکرج راپورونو او محاسبې کمیسیونونو سره کار کولو اتومات کولو لپاره مایکرو خدمت رامینځته کوو.

Pavel
Rate author
Add a comment

  1. Isakiiev

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

    Reply