Tinkoff বিনিয়োগের জন্য পরিসংখ্যান পরিষেবার বিকাশের পিছনে অনুপ্রেরণাকারীরা ছিল:
- হাবরে নিবন্ধ “টিঙ্কফ বিনিয়োগগুলি কী বলছে না”
- প্ল্যাটফর্ম ব্যবহারকারীদের ইচ্ছার বিশ্লেষণ
- কমিশনের গণনা সম্পর্কে একটি নিবন্ধ ।
- কি আলোচনা হবে?
- ধাপে ধাপে একটি পরিসংখ্যান পরিষেবা তৈরি করা:
- Tinkoff বিনিয়োগ API এর সাথে সংযোগ
- একটি ব্রাউজারে Tinkoff Invest API থেকে ডেটা অঙ্কন
- ব্রোকারেজ রিপোর্ট এবং লেনদেন গ্রহণ
- GetBrokerReport
- তারিখ পাওয়ার পদ্ধতি, বর্তমান তারিখ থেকে বিয়োগ বিবেচনা করে
- প্রতিবেদন প্রজন্মের অনুরোধ
- ফলাফল:
- লাভ ডিভিডেন্ড ফরেন ইস্যুয়ার
- GetOperations ByCursor
- আগ্রহের তথ্যের গণনা এবং আউটপুট
- দাম নিয়ে কাজ করা
- ফিউচার চুক্তির খরচ
- ওটিসি বাজার
- সরঞ্জামগুলিতে গাণিতিক ক্রিয়াকলাপ
- মাইক্রোসার্ভিস প্রস্তুত!
- ভবিষ্যতের জন্য উপসংহার এবং পরিকল্পনা
- https://opexbot.info
কি আলোচনা হবে?
- উন্নয়ন সম্পর্কে শুধুমাত্র প্রয়োগ অংশ.
- বাস্তব জ্ঞান এবং অভিজ্ঞতা, যা আর্থিক যন্ত্রের সাথে কাজ করার ক্ষেত্রে খুবই গুরুত্বপূর্ণ।
- কাজ করার জন্য সমস্যার ওভারভিউ
সুতরাং, আমি ট্রেড পরিসংখ্যান গণনা করতে চাই এবং এটি একটি সুবিধাজনক উপায়ে করতে চাই।
ধাপে ধাপে একটি পরিসংখ্যান পরিষেবা তৈরি করা:
- Tinkoff বিনিয়োগ API এর সাথে সংযোগ
- একটি ব্রাউজারে Tinkoff Invest API থেকে ডেটা অঙ্কন
- ব্রোকারেজ রিপোর্ট এবং লেনদেন গ্রহণ
- আগ্রহের তথ্যের গণনা এবং আউটপুট
- ভবিষ্যতের জন্য উপসংহার এবং পরিকল্পনা
Tinkoff বিনিয়োগ 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(await sdk.users.getAccounts()); })();
ফলাফল: আপনার অ্যাকাউন্টগুলির একটি তালিকা কনসোলে প্রদর্শিত হবে। উদাহরণস্বরূপ, এর সূক্ষ্মতা বিশ্লেষণ করা যাক:
- অ্যাকাউন্টগুলির তালিকায় একটি “বিনিয়োগ ব্যাঙ্ক” রয়েছে, যার সাথে আপনি 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-ক্লায়েন্ট
আমরা অবিলম্বে বন্ধুত্বের পরবর্তী ধাপে এগিয়ে যাই +সকেট+বিনিয়োগ, এবং সমস্ত বিবরণের জন্য এই ধাপের দরকারী বিভাগটি দেখুন। আমি বিস্তারিত বর্ণনা করব:
- nodejs (সার্ভার) পাশে, একটি pages/api/investapi.js ফাইল আছে। এখানেই আমরা socket.io সার্ভার তৈরি করি এবং investapi এর সাথে সংযোগ করি।
- ব্রাউজার (ক্লায়েন্ট) দিকে, আমরা একটি সকেটের মাধ্যমে সার্ভারের সাথে সংযোগ করি এবং ব্রোকারের কাছ থেকে অ্যাকাউন্ট ডেটার জন্য অনুরোধ করি।
- আমরা সার্ভারে ব্রোকার থেকে ডেটা পাই, তারপর ক্লায়েন্টের কাছে পাঠাই। যখন তারা ক্লায়েন্টে প্রাপ্ত হয়, তারা ব্রাউজারে প্রদর্শিত হয়।
ফলাফল: ব্রাউজার কনসোলে আমরা অ্যাকাউন্ট সম্পর্কে তথ্য দেখতে পারি। অর্থাৎ, শেষ ধাপে, আমরা সার্ভার কনসোলে (নোডেজ) অ্যাকাউন্ট সম্পর্কে তথ্য দেখেছি, বর্তমান ধাপে, আমরা এই তথ্যটি ক্লায়েন্টে (ব্রাউজার) স্থানান্তর করেছি।
এখন এটি তৈরি করা যাক যাতে আপনি ব্রাউজার থেকে একটি অ্যাকাউন্ট নির্বাচন করতে পারেন এবং যদি কোনও টোকেন না থাকে তবে কনসোলে একটি ত্রুটি পাঠানো হয়। কাজটি সহজ এবং নতুন কিছু নয়, তাই আমি শুধুমাত্র কমিটের লিঙ্ক দিই
- https://github.com/pskucherov/tcsstat/commit/7e1ac57061e5e971588479015b06d8814d6609a9
- 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
ব্রোকারেজ রিপোর্ট এবং লেনদেন গ্রহণ
ব্রোকারেজ রিপোর্ট এবং লেনদেন পাওয়ার জন্য তিনটি পদ্ধতি রয়েছে
প্রথম থেকেই এটি জানা গুরুত্বপূর্ণ:
- ব্রোকারেজ রিপোর্ট T-3 মোডে তৈরি হয়, অর্থাৎ বাণিজ্য তাদের প্রকৃত সম্পাদনের পরে সেখানে প্রদর্শিত হয়।
- তদনুসারে, আপনি যদি এই প্রতিবেদনটি গত দুই দিনের জন্য অনুরোধ করেন তবে এটি তিন দিনের মধ্যে প্রস্তুত হবে।
- শেষ দিনের জন্য চুক্তি করতে, আমরা অপারেশন গ্রহণের পদ্ধতি ব্যবহার করি, তবে মনে রাখবেন যে ব্রোকারেজ রিপোর্ট তৈরির পরে তাদের আইডি এবং বিষয়বস্তু পরিবর্তিত হতে পারে।
GetBrokerReport
একটি ব্রোকারেজ রিপোর্ট পেতে, আপনাকে অ্যাকাউন্ট আইডি, রিপোর্টের শুরুর তারিখ এবং শেষ তারিখ নিতে হবে, তবে 31 দিনের বেশি নয়। আমরা জেনারেট _broker_report_request এ API-তে একটি প্রতিবেদন তৈরি করার জন্য একটি অনুরোধ পাঠাই , প্রতিক্রিয়া হিসাবে একটি টাস্কআইডি পান। এর পরে, এই টাস্কআইডি ব্যবহার করে, আমরা get _broker_report_response থেকে ডেটা পাই। [স্পয়লার শিরোনাম=”সুতরাং ডকুমেন্টেশন বলছে, বাস্তবে কিছু সূক্ষ্মতা আছে। আপনার হাত দেখুন:”]
- এই তারিখগুলির জন্য আপনাকে চিরতরে টাস্কআইডি সংরক্ষণ করতে হবে।
- যেহেতু আপনি এটি হারান, তাহলে অনুরোধ করা তারিখগুলির জন্য প্রতিবেদনটি প্রথমে প্রজন্মের অনুরোধের প্রতিক্রিয়া হিসাবে আসবে,
- এবং তারপর এটি মোটেও আসবে না।
[/ 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 = await (sdk.operations.getBrokerReport)({ generateBrokerReportRequest: { accountId, from, to, }, });
ফলাফল:
- কমান্ডের প্রথম সঞ্চালনের ফলস্বরূপ, আমরা টাস্কআইডি পাই।
- দালালের পক্ষ থেকে প্রতিবেদন তৈরি করা শুরু হয়। যখন এটি প্রস্তুত হয় অজানা, আমরা অপেক্ষা করি এবং পর্যায়ক্রমে রিপোর্টের প্রত্যাশায় টাস্কআইডি টান।
- কেন? কারণ রিপোর্ট প্রস্তুত না হলে, এটি একটি ত্রুটি নিক্ষেপ করে। যদি প্রতিবেদনটি ব্রোকারের পক্ষে প্রস্তুত না হয়, তবে এটি আপনার কোডের একটি ত্রুটি। অনুগ্রহ করে প্রক্রিয়া করুন: 30058|INVALID_ARGUMENT|টাস্ক এখনও সম্পূর্ণ হয়নি, অনুগ্রহ করে পরে আবার চেষ্টা করুন
একটি রিপোর্ট অপেক্ষা করার এবং প্রাপ্তির জন্য কোডটি এরকম কিছু দেখায়।
const timer = async time => { নতুন প্রতিশ্রুতি ফিরিয়ে দিন(resolve => setTimeout(resolve, time)); } const getBrokerResponseByTaskId = async (taskId, পৃষ্ঠা = 0) => { চেষ্টা করুন { return await (sdk.operations.getBrokerReport)({ getBrokerReportRequest: { taskId, পৃষ্ঠা, }, }); } ধরা (ই) { console.log(‘wait’, e); টাইমার অপেক্ষা করুন (10000); ফিরে আসার অপেক্ষায় getBrokerResponseByTaskId(taskId, পৃষ্ঠা); } };
তারপর একই জাদু ঘটে। আমরা আমাদের স্ক্রিপ্ট বন্ধ করি, আবার শুরু করি, আমাদের কোনো টাস্কআইডি নেই। আমরা টাস্কআইডি অনুরোধের সাথে কোডটি কার্যকর করি, কিন্তু আমরা আর টাস্কআইডি পাই না, কিন্তু অবিলম্বে রিপোর্ট পাই। ম্যাজিক ! এবং সবকিছু ঠিক হবে যদি এটি সবসময় এই মত হয়। কিন্তু একমাসে কোনো ডাটা থাকবে না। দরকারী :
- এখানে এবং এখানে তত্ত্বের একটি বিট রূপরেখা দেওয়া হয়েছে ।
- কোডটি একসাথে রাখলে, খসড়াটি এরকম কিছু দেখাবে।
https://github.com/pskucherov/tcsstat/tree/step3.1 https://github.com/pskucherov/tcsstat/compare/step3.1
- যদি কেউ এটি জুড়ে আসে, তাহলে সমস্যাটিতে স্বাগতম । তারা এই জাদুটি মেরামত করার পরে, এটি তার শক্তি হারাবে এবং একরকম আলাদা হবে। কিন্তু বর্তমান মুহুর্তে (03/21/2023) এটি ঠিক সেই মতো কাজ করে।
লাভ ডিভিডেন্ড ফরেন ইস্যুয়ার
কেউ ভাবতে পারে যে পদ্ধতিটি আগেরটির মতো এবং আপনি একটি একক পদ্ধতি ব্যবহার করতে পারেন যাতে আপনি শুধুমাত্র অপারেশনগুলির নাম পরিবর্তন করেন। কিন্তু তারা অনুমান করেনি! সেখানে নামকরণ পদ্ধতি এবং প্রত্যাবর্তিত তথ্য উভয় ক্ষেত্রেই খুব আলাদা। এবং পৃষ্ঠা গণনা 0 থেকে শুরু হয়, তারপর 1 থেকে। এই সমস্ত কিছুতে বিভ্রান্ত না হওয়ার জন্য, দুটি ভিন্ন পদ্ধতি লেখা সহজ। যা অদ্ভুত, কারণ কাজের যুক্তি একই। যখন আমি একটি পদ্ধতি তৈরি করার চেষ্টা করেছি এবং কম কোড ছিল তখন আমি দীর্ঘ সময়ের জন্য থুথু ফেলেছিলাম। এখানে কোন উদাহরণ থাকবে না।
GetOperations ByCursor
তিনজনের মধ্যে আমার প্রিয়। যদিও সবচেয়ে সঠিক নয়, তবে সবচেয়ে পর্যাপ্ত। আমরা একটি অ্যাকাউন্ট তৈরির শুরু থেকে সর্বাধিক সম্ভাব্য তারিখ পর্যন্ত একটি অনুরোধ করি (একটি অ্যাকাউন্ট বা বর্তমানটি বন্ধ করা)। আমরা উত্তর পাই, কার্সার গ্রহণ করি এবং যতক্ষণ ডেটা থাকে ততক্ষণ পুনরায় অনুরোধ করি। এবং কোড উপরের উদাহরণের তুলনায় আরো সংক্ষিপ্ত.
const timer = async time => { নতুন প্রতিশ্রুতি ফিরিয়ে দিন(resolve => setTimeout(resolve, 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-3, অপারেশন থেকে পুনরায় লোড করুন। তবে এটি একটি পৃথক নিবন্ধে বিভক্ত করা যেতে পারে। আপনি সম্মুখীন হবেন যে প্রধান সূক্ষ্মতা হল আঠা অপারেশন এবং একটি দালালি রিপোর্ট.
- আজ যদি আপনি একটি ব্রোকারেজ রিপোর্ট এবং প্রয়োজনীয় তারিখগুলির জন্য লেনদেন পেয়ে থাকেন, তবে এটি সমস্ত ডাটাবেসে রাখুন, তাহলে কোনও সমস্যা নেই।
- আগামীকাল আপনার সমস্যা হবে যখন আপনি রিপোর্ট এবং অপারেশন থেকে ডেটার পরবর্তী অংশ পাবেন এবং বিদ্যমান ডাটাবেসের সাথে সিঙ্ক্রোনাইজ করার সিদ্ধান্ত নেবেন।
- প্রক্রিয়াকরণের পরে অমিল বা আইডি পরিবর্তন সম্পর্কে অনেক সূক্ষ্মতা
- তারপর ওটিসি বাজারের জন্য, আইডিটি একেবারেই মেলে না।
- সেইসাথে সিঙ্ক্রোনাইজিং যন্ত্রগুলির সূক্ষ্মতা, যা আবার এপিআই-এর অদ্ভুততার কারণে মিলিত হয় না। কিন্তু সেটা অন্য গল্প।
আমাদের অ্যাপ্লিকেশনে অপারেশন সম্পর্কে তথ্য যোগ করা যাক। মূল প্রশ্ন হবে ডেটা কোথায় প্রসেস এবং স্টোর করা হবে।
- আপনি যদি এটি নিজের জন্য করেন তবে আপনি বিভিন্ন ডিভাইস থেকে একই ডেটা ব্যবহার করবেন। তারপরে আপনাকে সার্ভারে ডেটা প্রক্রিয়া এবং সংরক্ষণ করতে হবে।
- যদি আপনার কাছে অনেকগুলি বিভিন্ন ব্যবহারকারীর দ্বারা গ্রাস করা বিভিন্ন ডেটা থাকে, তবে আপনাকে সিদ্ধান্ত নিতে হবে যে আরও গুরুত্বপূর্ণ কী: ব্যবহারকারীদের গতি বা আপনার পক্ষে আয়রন সংরক্ষণ। যে কেউ অসীম পরিমাণ হার্ডওয়্যার বহন করতে পারে সে তার সার্ভারে সমস্ত কিছু গণনা করে এবং ব্যবহারকারীদের জন্য এটিকে অতি দ্রুত করে তোলে, ব্যবহারকারীর সংস্থান যেমন ব্যাটারি এবং ট্র্যাফিক সংরক্ষণ করে, যা ফোনে অত্যন্ত গুরুত্বপূর্ণ।
পরিবর্তে, ব্রাউজারে গণনা নীতিগতভাবে সবচেয়ে অনুকূল সমাধান নয়। অতএব, যা ব্যয়বহুল নয়, আমরা তা আমাদের সার্ভারে বিবেচনা করি। বাকিটা আমরা ক্লায়েন্টের উপর ছেড়ে দিই। আমি সত্যিই সার্ভারে কমিশন নিতে এবং গণনা করতে চাই। কিন্তু এখানে “ইন্টারঅ্যাকটিভিটি” নামক সূক্ষ্মতা আসে। ধরা যাক আপনার হাজার হাজার অপারেশন আছে এবং সেগুলি পেতে পাঁচ মিনিট সময় লাগে। এই সময়ে ব্যবহারকারীর কী থাকবে? স্পিনার? অগ্রগতি? ইনফা কত আপলোড হয়েছে? যখন প্রক্রিয়ায় থাকা ব্যবহারকারী ইতিমধ্যে কিছু দেখতে পাচ্ছেন তখন “সক্রিয় অপেক্ষা” ব্যবহার করা আদর্শ। এখানে ফলাফল:
- পৃষ্ঠা লোড হচ্ছে
- সমস্ত চালান অনুরোধ করা হয়
- এর পরে, নির্বাহিত লেনদেনের জন্য কমিশন সহ সমস্ত লেনদেন সমস্ত অ্যাকাউন্টের জন্য অনুরোধ করা হয়। ডেটা প্রাপ্ত হওয়ার সাথে সাথে এটি ব্রাউজারে রেন্ডার করা হয়।
প্রতিবার ইভেন্টে ডেটা ফিল্টার না করার জন্য, আমরা প্রতিটি অ্যাকাউন্টের জন্য আমাদের নিজস্ব ইভেন্ট টানছি। এটার মত:
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 বিন্যাসে উপস্থাপন করা হয়েছে
ক্ষেত্র | প্রকার | বর্ণনা |
---|---|---|
মুদ্রা | স্ট্রিং | স্ট্রিং ISO কারেন্সি কোড |
ইউনিট | int64 | যোগফলের পূর্ণসংখ্যা অংশ, একটি ঋণাত্মক সংখ্যা হতে পারে |
ন্যানো | int32 | পরিমাণের ভগ্নাংশ, একটি ঋণাত্মক সংখ্যা হতে পারে |
আমরা সেগুলিকে আলাদাভাবে প্রসেস করি, তারপর সেগুলিকে দামের মানের দিকে নিয়ে যাই:
quotation.units + quotation.nano / 1e9
ফিউচার চুক্তির খরচ
ফিউচারের মূল্য পয়েন্টে উপস্থাপিত হয়, যখন আপনার একটি মুদ্রার ভবিষ্যত থাকে, তখন আপনাকে হার জানতে হবে। এবং অবশ্যই পয়েন্ট এবং মূল্য ধাপে মূল্য। যখন আপনি লেনদেন থেকে লাভ গণনা, এই অঙ্কুর করতে পারেন, কারণ. যদি আপনি মূল্যকে পরিমাণ দ্বারা গুণ করে মোট পরিমাণ গণনা করেন। এখানে আপনাকে সতর্ক থাকতে হবে। আপাতত, আমরা দেখব এটা কিভাবে যায়। এটি কারেন্সি ফিউচারের ক্ষেত্রে প্রযোজ্য, অন্যান্য জায়গায় এর সাথে সবকিছু ঠিক আছে।
ওটিসি বাজার
এই বাজারের অনেক অদ্ভুততা রয়েছে, তাই আসুন এটির উপর আলাদাভাবে ক্রিয়াকলাপগুলি অধ্যয়ন করি৷ আপনি যখন ক্রিয়াকলাপগুলিকে সিঙ্ক্রোনাইজ করা শুরু করেন, তখন দেখা যাবে যে যন্ত্রটির সাথে সঠিকভাবে মেলানোর জন্য আপনাকে একই ফর্মে ফিগি / টিকার আনতে হবে৷ আপনি যখন ব্রোকারেজ রিপোর্টের সাথে এটি সিঙ্ক্রোনাইজ করা শুরু করবেন, তখন দেখা যাবে যে একই লেনদেনের ট্রেডআইডি লেনদেনের শুরুতে অক্ষর রয়েছে এবং সেগুলি ব্রোকারেজ রিপোর্টে নেই। অতএব, তাদের তুলনা করা যায় না… আহেম-আহেম… তুলনা করে! আমি ট্রেডের সময়, টিকারের সাথে মিলেছি এবং এক ট্রেডআইডি অন্যটিতে রয়েছে। ঠিক, আমি জানি না. যে কেউ এটির মুখোমুখি হয় এবং যারা এটি সম্পর্কে যত্নশীল, সমস্যাটিতে আসুন বা একটি নতুন শুরু করুন।
সরঞ্জামগুলিতে গাণিতিক ক্রিয়াকলাপ
সম্পূর্ণ তালিকার সাথে গাণিতিক ক্রিয়াকলাপগুলি না দেখে, এটি অসম্ভব। নরম থেকে উষ্ণ যোগ না করার জন্য, আমরা সর্বদা মুদ্রা পরীক্ষা করি এবং কেবলমাত্র যদি আমরা নিশ্চিত হই যে মুদ্রা মিলছে এবং পয়েন্টগুলি পছন্দসই মুদ্রায় রূপান্তরিত হয়েছে। ব্যাঙ্ক নম্বরগুলির সাথে কাজ করার বিষয়ে জ্ঞানের সাথে সজ্জিত, আমরা প্রতিটি অ্যাকাউন্টে ব্যয় করা কমিশন গণনা করব। এই মত: https://github.com/pskucherov/tcsstat/tree/step4 https://github.com/pskucherov/tcsstat/compare/step3…step4
মাইক্রোসার্ভিস প্রস্তুত!
https://github.com/pskucherov/tcsstat হোমওয়ার্ক হিসাবে, আপনি চেক করতে পারেন যে পরিষেবাটি ধীর সংযোগের সাথে কাজ করে কিনা, কখন সংযোগ বিচ্ছিন্ন হয়, কখন ইন্টারনেট সংযোগ বিচ্ছিন্ন হয়, যখন ব্রোকারের পক্ষ থেকে ত্রুটি বা মেয়াদ শেষ হয়ে যায়।
ভবিষ্যতের জন্য উপসংহার এবং পরিকল্পনা
- বেসিক অপারেশন এবং ইনভেস্ট এপিআই এর সাথে কাজ করা সম্পর্কে শিখেছি
- সময় ~ 10 ঘন্টা অতিবাহিত
- অসুবিধার স্তর ~ জুনিয়র+ / নিম্ন মধ্যম
আপনি যদি মাইক্রোসার্ভিসকে পরিমার্জন করা চালিয়ে যান, তাহলে আপনি এইরকম কিছু নিয়ে শেষ করতে পারেন
https://opexbot.info
এটা আমার উন্নয়ন, যারা খুব অলস তাদের জন্য বুঝতে, দৌড়াতে এবং নিজের উপর গুনতে। আমি ব্যবহারকারীদের অনুরোধে সেখানে বিশ্লেষণ যোগ করার পরিকল্পনা করছি। আপনি যদি নিবন্ধটি পছন্দ করেন তবে আমার টেলিগ্রাম চ্যানেলটি সাবস্ক্রাইব করুন ।
Полезная статья. Не могу представить, сколько усилий автора потребовалось, чтобы все описать. Благодарю.