অ্যালগরিদমিক ট্রেডিং সিস্টেমের জন্য সেরা প্রোগ্রামিং ভাষা?

লেখক:ভাল, তৈরিঃ 2019-02-12 10:33:36, আপডেটঃ

মেইলব্যাগে আমি সবচেয়ে ঘন ঘন প্রশ্নগুলির মধ্যে একটি হল অ্যালগরিদমিক ট্রেডিংয়ের জন্য সেরা প্রোগ্রামিং ভাষা কি?। সংক্ষিপ্ত উত্তরটি হ'ল best ভাষা নেই। কৌশল পরামিতি, কর্মক্ষমতা, মডুলারিলিটি, উন্নয়ন, স্থিতিস্থাপকতা এবং ব্যয় সমস্ত বিবেচনা করা উচিত। এই নিবন্ধটি একটি অ্যালগরিদমিক ট্রেডিং সিস্টেমের আর্কিটেকচারের প্রয়োজনীয় উপাদানগুলি এবং বাস্তবায়ন সম্পর্কিত সিদ্ধান্তগুলি কীভাবে ভাষা পছন্দকে প্রভাবিত করে তা রূপরেখা করবে।

প্রথমত, একটি অ্যালগরিদমিক ট্রেডিং সিস্টেমের প্রধান উপাদানগুলি যেমন গবেষণা সরঞ্জাম, পোর্টফোলিও অপ্টিমাইজার, ঝুঁকি ব্যবস্থাপক এবং সম্পাদন ইঞ্জিন বিবেচনা করা হবে। পরবর্তীকালে, বিভিন্ন ট্রেডিং কৌশলগুলি পরীক্ষা করা হবে এবং তারা কীভাবে সিস্টেমের নকশা প্রভাবিত করে। বিশেষত ট্রেডিংয়ের ফ্রিকোয়েন্সি এবং সম্ভাব্য ট্রেডিং ভলিউম উভয়ই আলোচনা করা হবে।

ট্রেডিং কৌশলটি একবার নির্বাচিত হয়ে গেলে, পুরো সিস্টেমটি আর্কিটেকচার করা প্রয়োজন। এর মধ্যে হার্ডওয়্যার, অপারেটিং সিস্টেম (গুলি) এবং বিরল, সম্ভাব্য বিপর্যয়কর ইভেন্টগুলির বিরুদ্ধে সিস্টেমের স্থিতিস্থাপকতা অন্তর্ভুক্ত রয়েছে। আর্কিটেকচারটি বিবেচনা করার সময়, পারফরম্যান্সের প্রতি যথাযথ মনোযোগ দিতে হবে - গবেষণা সরঞ্জামগুলির পাশাপাশি লাইভ এক্সিকিউশন পরিবেশ উভয়ই।

ট্রেডিং সিস্টেম কি করার চেষ্টা করছে?

একটি স্বয়ংক্রিয় ট্রেডিং সিস্টেম লেখার জন্য সেরা ভাষাটি সিদ্ধান্ত নেওয়ার আগে প্রয়োজনীয়তাগুলি সংজ্ঞায়িত করা প্রয়োজন। সিস্টেমটি কি খাঁটি সম্পাদন ভিত্তিক হতে চলেছে? সিস্টেমের জন্য কি ঝুঁকি ব্যবস্থাপনা বা পোর্টফোলিও নির্মাণ মডিউল প্রয়োজন? সিস্টেমের জন্য কি উচ্চ-কার্যকারিতা ব্যাকটেস্টারের প্রয়োজন হবে? বেশিরভাগ কৌশলগুলির জন্য ট্রেডিং সিস্টেমটি দুটি বিভাগে বিভক্ত করা যেতে পারেঃ গবেষণা এবং সংকেত উত্পাদন।

গবেষণা ঐতিহাসিক তথ্য উপর একটি কৌশল কর্মক্ষমতা মূল্যায়ন নিয়ে উদ্বিগ্ন। পূর্ববর্তী বাজার তথ্য উপর একটি ট্রেডিং কৌশল মূল্যায়ন প্রক্রিয়া ব্যাকটেস্টিং হিসাবে পরিচিত হয়। তথ্য আকার এবং অ্যালগরিদমিক জটিলতা ব্যাকটেস্টার এর কম্পিউটিং তীব্রতা উপর একটি বড় প্রভাব আছে। CPU গতি এবং সমান্তরাল প্রায়ই গবেষণা সম্পাদন গতি অপ্টিমাইজ করার সীমাবদ্ধ কারণ।

সিগন্যাল জেনারেশন একটি অ্যালগরিদম থেকে ট্রেডিং সিগন্যালগুলির একটি সেট তৈরি এবং সাধারণত একটি ব্রোকারেজের মাধ্যমে বাজারে এই ধরনের অর্ডার প্রেরণের সাথে সম্পর্কিত। নির্দিষ্ট কৌশলগুলির জন্য একটি উচ্চ স্তরের কর্মক্ষমতা প্রয়োজন। নেটওয়ার্ক ব্যান্ডউইথ এবং বিলম্বের মতো I / O সমস্যাগুলি প্রায়শই এক্সিকিউশন সিস্টেমগুলিকে অনুকূল করার ক্ষেত্রে সীমাবদ্ধকারী কারণ। সুতরাং আপনার পুরো সিস্টেমের প্রতিটি উপাদানটির জন্য ভাষার পছন্দ বেশ আলাদা হতে পারে।

কৌশল প্রকার, ফ্রিকোয়েন্সি এবং পরিমাণ

ব্যবহৃত অ্যালগরিদমিক কৌশলটির ধরণটি সিস্টেমের নকশায় উল্লেখযোগ্য প্রভাব ফেলবে। ট্রেডিংয়ের বাজারগুলি, বাহ্যিক ডেটা বিক্রেতাদের সাথে সংযোগ, কৌশলটির ফ্রিকোয়েন্সি এবং ভলিউম, বিকাশের সহজতা এবং কর্মক্ষমতা অপ্টিমাইজেশনের মধ্যে বাণিজ্য-অফ, পাশাপাশি কোনও কাস্টম হার্ডওয়্যার, সহ-অবস্থানযুক্ত কাস্টম সার্ভার, জিপিইউ বা এফপিজিএ সহ যা প্রয়োজন হতে পারে তা বিবেচনা করা প্রয়োজন।

নিম্ন-ফ্রিকোয়েন্সিযুক্ত মার্কিন শেয়ার কৌশলগুলির জন্য প্রযুক্তির পছন্দগুলি ফিউচার বাজারে ট্রেডিংয়ের উচ্চ-ফ্রিকোয়েন্সিযুক্ত পরিসংখ্যানগত সালিসিয়াজ কৌশলগুলির থেকে ব্যাপকভাবে পৃথক হবে। ভাষা নির্বাচন করার আগে অনেক ডেটা বিক্রেতাদের মূল্যায়ন করা উচিত যা একটি সম্পর্কিত কৌশল হাতে।

বিক্রেতার সাথে সংযোগ, কোনও এপিআই এর কাঠামো, ডেটার সময়োপযোগীতা, স্টোরেজ প্রয়োজনীয়তা এবং একটি বিক্রেতার অফলাইনে যাওয়ার মুখোমুখি স্থিতিস্থাপকতা বিবেচনা করা দরকার। একাধিক বিক্রেতার দ্রুত অ্যাক্সেসের মালিক হওয়াও বুদ্ধিমান! বিভিন্ন যন্ত্রের নিজস্ব স্টোরেজ কুইক রয়েছে, যার উদাহরণগুলির মধ্যে রয়েছে ইক্যুইটিগুলির জন্য একাধিক টিকার প্রতীক এবং ফিউচারগুলির মেয়াদ শেষের তারিখগুলি (কোনও নির্দিষ্ট ওটিসি ডেটা উল্লেখ না করে) । প্ল্যাটফর্ম ডিজাইনে এটি বিবেচনা করা দরকার।

কৌশলটির ফ্রিকোয়েন্সি সম্ভবত প্রযুক্তি স্ট্যাকটি কীভাবে সংজ্ঞায়িত করা হবে তার অন্যতম প্রধান চালক। মিনিট বা দ্বিতীয়বারের চেয়ে বেশি ঘন ঘন ডেটা ব্যবহারকারী কৌশলগুলি কার্যকারিতার ক্ষেত্রে উল্লেখযোগ্য বিবেচনা প্রয়োজন।

একটি কৌশল দ্বিতীয়বার বার অতিক্রম করে (যেমন টিক ডেটা) প্রাথমিক প্রয়োজনীয়তা হিসাবে একটি কর্মক্ষমতা চালিত নকশা নেতৃত্ব দেয়। উচ্চ ফ্রিকোয়েন্সি কৌশল জন্য বাজারের তথ্য একটি উল্লেখযোগ্য পরিমাণ সংরক্ষণ এবং মূল্যায়ন করা প্রয়োজন হবে। এই ভূমিকা জন্য HDF5 বা kdb + মত সফ্টওয়্যার সাধারণত ব্যবহৃত হয়।

এইচএফটি অ্যাপ্লিকেশনগুলির জন্য প্রয়োজনীয় বিস্তৃত পরিমাণে ডেটা প্রক্রিয়া করার জন্য, একটি ব্যাপকভাবে অনুকূলিত ব্যাকটেস্টার এবং এক্সিকিউশন সিস্টেম ব্যবহার করা আবশ্যক। সি / সি ++ (সম্ভবত কিছু সমাবেশকারী সহ) সম্ভবত সবচেয়ে শক্তিশালী ভাষা প্রার্থী। অতি উচ্চ ফ্রিকোয়েন্সি কৌশলগুলির জন্য প্রায় অবশ্যই এফপিজিএ, এক্সচেঞ্জ কো-লোকেশন এবং কার্নেল / নেটওয়ার্ক ইন্টারফেস টিউনিংয়ের মতো কাস্টম হার্ডওয়্যার প্রয়োজন হবে।

গবেষণা ব্যবস্থা

গবেষণা সিস্টেমগুলি সাধারণত ইন্টারেক্টিভ ডেভেলপমেন্ট এবং স্বয়ংক্রিয় স্ক্রিপ্টিংয়ের মিশ্রণকে জড়িত করে। প্রথমটি প্রায়শই ভিজ্যুয়াল স্টুডিও, ম্যাটল্যাব বা আর স্টুডিওর মতো আইডিই-র মধ্যে ঘটে। পরেরটি অসংখ্য পরামিতি এবং ডেটা পয়েন্টের উপর বিস্তৃত সংখ্যাসূচক গণনা জড়িত। এটি কোড পরীক্ষার জন্য একটি সরল পরিবেশ সরবরাহ করে এমন একটি ভাষা পছন্দ করে, তবে একাধিক পরামিতি মাত্রার উপর কৌশলগুলি মূল্যায়নের জন্য পর্যাপ্ত পারফরম্যান্স সরবরাহ করে।

এই স্পেসে সাধারণ আইডিইগুলির মধ্যে মাইক্রোসফ্ট ভিজ্যুয়াল সি ++ / সি # অন্তর্ভুক্ত রয়েছে, যা বিস্তৃত ডিবাগিং ইউটিলিটি, কোড সমাপ্তির ক্ষমতা (Intellisense এর মাধ্যমে) এবং পুরো প্রকল্পের স্ট্যাকের সহজ ওভারভিউ (ডেটাবেস ORM, LINQ এর মাধ্যমে) রয়েছে; ম্যাটল্যাব, যা বিস্তৃত সংখ্যাসূচক রৈখিক বীজগণিত এবং ভেক্টরাইজড ক্রিয়াকলাপের জন্য ডিজাইন করা হয়েছে, তবে একটি ইন্টারেক্টিভ কনসোল পদ্ধতিতে; আর স্টুডিও, যা Rstatistical ভাষা কনসোলকে একটি সম্পূর্ণরূপে আইডিইতে আবৃত করে; জাভা লিনাক্স এবং সি ++ এর জন্য ইক্লিপস আইডিই; এবং আধা-মালিকানাধীন আইডিই যেমন এনথোথ ক্যানোপি ফর পাইথন, যার মধ্যে একক ইন্টারেক্টিভ (কনসোল) পরিবেশে NumPy, SciPy, scikit-learn এবং পান্ডাসের মতো ডেটা বিশ্লেষণ গ্রন্থাগার

সংখ্যাসূচক ব্যাকটেস্টিংয়ের জন্য, উপরের সমস্ত ভাষা উপযুক্ত, যদিও এটি একটি জিইউআই / আইডিই ব্যবহার করার প্রয়োজন নেই কারণ কোডটি ব্যাকগ্রাউন্ডে কার্যকর করা হবে। এই পর্যায়ে প্রধান বিবেচনা হ'ল কার্যকরকরণের গতি। ব্যাকটেস্টিং পরামিতির মাত্রা বড় হলে একটি সংকলিত ভাষা (যেমন সি ++) প্রায়শই দরকারী। মনে রাখবেন যে যদি এটি হয় তবে এই জাতীয় সিস্টেমগুলির বিষয়ে সতর্ক হওয়া দরকার!

পাইথনের মতো ব্যাখ্যা করা ভাষাগুলি প্রায়শই ব্যাকটেস্টিং ধাপের জন্য NumPy / panda এর মতো উচ্চ-পারফরম্যান্স লাইব্রেরি ব্যবহার করে, যাতে সংকলিত সমতুল্যগুলির সাথে যুক্তিসঙ্গত প্রতিযোগিতামূলকতা বজায় রাখা যায়। শেষ পর্যন্ত ব্যাকটেস্টিংয়ের জন্য নির্বাচিত ভাষা নির্দিষ্ট অ্যালগরিদমিক প্রয়োজনের পাশাপাশি ভাষায় উপলব্ধ লাইব্রেরির পরিসীমা দ্বারা নির্ধারিত হবে (নীচে আরও) । তবে, ব্যাকটেস্টার এবং গবেষণা পরিবেশের জন্য ব্যবহৃত ভাষাটি নির্মাণ পোর্টফোলিও, ঝুঁকি ব্যবস্থাপনা এবং সম্পাদন উপাদানগুলিতে ব্যবহৃতগুলির থেকে সম্পূর্ণ স্বাধীন হতে পারে, যেমনটি দেখা যাবে।

পোর্টফোলিও গঠন এবং ঝুঁকি ব্যবস্থাপনা

পোর্টফোলিও নির্মাণ এবং ঝুঁকি ব্যবস্থাপনা উপাদানগুলি প্রায়শই খুচরা অ্যালগরিদমিক ব্যবসায়ীদের দ্বারা উপেক্ষা করা হয়। এটি প্রায়শই একটি ভুল। এই সরঞ্জামগুলি এমন একটি প্রক্রিয়া সরবরাহ করে যার মাধ্যমে মূলধন সংরক্ষণ করা হবে। তারা কেবল ঝুঁকিপূর্ণ বাজিগুলির সংখ্যা হ্রাস করার চেষ্টা করে না, তবে ঝুঁকিপূর্ণ বাজিগুলির সংখ্যা হ্রাস করে,

এই উপাদানগুলির পরিশীলিত সংস্করণগুলি লাভজনকতার গুণমান এবং ধারাবাহিকতার উপর উল্লেখযোগ্য প্রভাব ফেলতে পারে। পোর্টফোলিও নির্মাণ প্রক্রিয়া এবং ঝুঁকি ব্যবস্থাপককে একাধিক সিস্টেম পরিচালনা করতে সহজেই সংশোধন করা যেতে পারে বলে কৌশলগুলির একটি স্থিতিশীল তৈরি করা সহজ। সুতরাং এগুলিকে অ্যালগরিদমিক ট্রেডিং সিস্টেমের নকশার শুরুতে প্রয়োজনীয় উপাদান হিসাবে বিবেচনা করা উচিত।

পোর্টফোলিও নির্মাণ ব্যবস্থার কাজ হল পছন্দসই ট্রেডের একটি সেট নেওয়া এবং প্রকৃত ট্রেডের সেট তৈরি করা যা চার্জকে হ্রাস করে, বিভিন্ন কারণের (যেমন সেক্টর, সম্পদ শ্রেণি, অস্থিরতা ইত্যাদি) এক্সপোজার বজায় রাখে এবং পোর্টফোলিওর বিভিন্ন কৌশলগুলিতে মূলধন বরাদ্দকে অনুকূল করে তোলে।

পোর্টফোলিও নির্মাণ প্রায়শই একটি রৈখিক বীজগণিত সমস্যা (যেমন একটি ম্যাট্রিক্স ফ্যাক্টরাইজেশন) এ হ্রাস পায় এবং তাই কর্মক্ষমতা উপলব্ধ সংখ্যাসূচক রৈখিক বীজগণিত বাস্তবায়নের কার্যকারিতার উপর অত্যন্ত নির্ভরশীল। সাধারণ লাইব্রেরিগুলির মধ্যে uBLAS, LAPACK এবং NAG রয়েছে। C ++ এর জন্য ম্যাটল্যাব ব্যাপকভাবে অনুকূলিত ম্যাট্রিক্স অপারেশনও রয়েছে। পাইথন এই ধরনের গণনার জন্য NumPy / SciPy ব্যবহার করে। একটি ঘন ঘন পুনরায় ভারসাম্যপূর্ণ পোর্টফোলিওতে এই পদক্ষেপটি সম্পাদন করার জন্য একটি কম্পাইল করা (এবং ভাল অনুকূলিত!

ঝুঁকি ব্যবস্থাপনা একটি অ্যালগরিদমিক ট্রেডিং সিস্টেমের আরেকটি অত্যন্ত গুরুত্বপূর্ণ অংশ। ঝুঁকি অনেক ফর্মে আসতে পারেঃ উদ্বায়ীতা বৃদ্ধি (যদিও এটি নির্দিষ্ট কৌশলগুলির জন্য পছন্দসই হিসাবে দেখা যেতে পারে!), সম্পদ শ্রেণীর মধ্যে ক্রমবর্ধমান সম্পর্ক, প্রতিপক্ষের ডিফল্ট, সার্ভার আউটপুট, black swan ঘটনা এবং ট্রেডিং কোডে সনাক্ত করা বাগ, কয়েকটি নাম উল্লেখ করার জন্য।

ঝুঁকি ব্যবস্থাপনা উপাদানগুলি অত্যধিক অস্থিরতা এবং সম্পদ শ্রেণীর মধ্যে সম্পর্ক এবং ট্রেডিং মূলধনের উপর তাদের পরবর্তী প্রভাবের প্রভাবগুলি প্রত্যাশার চেষ্টা করে। প্রায়শই এটি মন্টে কার্লো স্ট্রেস টেস্ট এর মতো পরিসংখ্যানগত গণনার একটি সেটে হ্রাস পায়। এটি একটি ডেরাইভেটিভ প্রাইসিং ইঞ্জিনের গণনার প্রয়োজনের সাথে খুব অনুরূপ এবং যেমনটি সিপিইউ-বাঁধা হবে। এই সিমুলেশনগুলি অত্যন্ত সমান্তরালযোগ্য (নীচে দেখুন) এবং একটি নির্দিষ্ট ডিগ্রীতে, সমস্যাটিতে হার্ডওয়্যার নিক্ষেপ করা সম্ভব।

কার্যকরকরণ ব্যবস্থা

এক্সিকিউশন সিস্টেমের কাজ হ'ল পোর্টফোলিও নির্মাণ এবং ঝুঁকি ব্যবস্থাপনা উপাদানগুলি থেকে ফিল্টারযুক্ত ট্রেডিং সংকেতগুলি গ্রহণ করা এবং এগুলি ব্রোকারেজ বা বাজারে অ্যাক্সেসের অন্যান্য উপায়ে প্রেরণ করা। বেশিরভাগ খুচরা অ্যালগরিদমিক ট্রেডিং কৌশলগুলির জন্য এটি ইন্টারেক্টিভ ব্রোকারগুলির মতো একটি ব্রোকারেজের সাথে একটি এপিআই বা ফিক্স সংযোগ জড়িত। একটি ভাষা সিদ্ধান্ত নেওয়ার সময় প্রাথমিক বিবেচনাগুলির মধ্যে রয়েছে এপিআইয়ের গুণমান, একটি এপিআইয়ের জন্য ভাষা-উপলব্ধতার প্রাপ্যতা, সম্পাদনের ফ্রিকোয়েন্সি এবং প্রত্যাশিত স্লিপজ।

এপিআই এর গুণমান এটি কতটা ডকুমেন্ট করা হয়েছে, এটি কী ধরণের কর্মক্ষমতা সরবরাহ করে, এটি অ্যাক্সেস করার জন্য স্বতন্ত্র সফ্টওয়্যার প্রয়োজন কিনা বা কোনও গেটওয়ে হেডলেস ফ্যাশনে প্রতিষ্ঠিত হতে পারে কিনা (যেমন কোনও জিইউআই নেই) । ইন্টারেক্টিভ ব্রোকারদের ক্ষেত্রে, ট্রেডার ওয়ার্কস্টেশন সরঞ্জামটি তাদের এপিআই অ্যাক্সেস করার জন্য একটি জিইউআই পরিবেশে চলতে হবে। আমি একবার অ্যামাজন ক্লাউড সার্ভারে একটি ডেস্কটপ উবুন্টু সংস্করণ ইনস্টল করতে হয়েছিল ইন্টারেক্টিভ ব্রোকারগুলি দূরবর্তীভাবে অ্যাক্সেস করতে, কেবল এই কারণে!

বেশিরভাগ এপিআই একটি সি ++ এবং / অথবা জাভা ইন্টারফেস সরবরাহ করবে। এটি সাধারণত সি #, পাইথন, আর, এক্সেল এবং ম্যাটল্যাবের জন্য ভাষা-নির্দিষ্ট মোড়কগুলি বিকাশের জন্য সম্প্রদায়ের উপর নির্ভর করে। নোট করুন যে প্রতিটি অতিরিক্ত প্লাগইন ব্যবহারের সাথে (বিশেষত এপিআই মোড়কগুলি) সিস্টেমে বাগগুলি সরে যাওয়ার সুযোগ রয়েছে। সর্বদা এই ধরণের প্লাগইনগুলি পরীক্ষা করুন এবং নিশ্চিত করুন যে সেগুলি সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয়। একটি মূল্যবান গেজটি সাম্প্রতিক মাসগুলিতে কোডবেসের কতগুলি নতুন আপডেট করা হয়েছে তা দেখার জন্য।

এক্সিকিউশন অ্যালগরিদমের মধ্যে এক্সিকিউশন ফ্রিকোয়েন্সি অত্যন্ত গুরুত্বপূর্ণ। মনে রাখবেন যে প্রতি মিনিটে শত শত অর্ডার পাঠানো যেতে পারে এবং যেমন কর্মক্ষমতা সমালোচনামূলক। একটি খারাপ পারফরম্যান্স এক্সিকিউশন সিস্টেমের মাধ্যমে স্লিপিং ঘটবে এবং এর লাভজনকতার উপর নাটকীয় প্রভাব পড়বে।

স্ট্যাটিকলি টাইপ করা ভাষা (নীচে দেখুন) যেমন সি ++ / জাভা সাধারণত কার্যকর করার জন্য অনুকূল তবে বিকাশের সময়, পরীক্ষা এবং রক্ষণাবেক্ষণের সহজতার ক্ষেত্রে একটি বাণিজ্য রয়েছে। গতিশীলভাবে টাইপ করা ভাষা, যেমন পাইথন এবং পার্ল এখন সাধারণত যথেষ্ট দ্রুত। সর্বদা নিশ্চিত করুন যে উপাদানগুলি মডুলার ফ্যাশনে ডিজাইন করা হয়েছে (নীচে দেখুন) যাতে তারা সিস্টেম স্কেল হিসাবে আউট-আউট আউট হতে পারে।

স্থাপত্য পরিকল্পনা ও উন্নয়ন প্রক্রিয়া

একটি ট্রেডিং সিস্টেমের উপাদান, এর ফ্রিকোয়েন্সি এবং ভলিউম প্রয়োজনীয়তা উপরে আলোচনা করা হয়েছে, কিন্তু সিস্টেম অবকাঠামো এখনও আচ্ছাদিত করা হয় নি। যারা খুচরা ব্যবসায়ী হিসাবে কাজ করে বা একটি ছোট তহবিলে কাজ করে তারা সম্ভবত অনেক টুপি পরবে। আলফা মডেল, ঝুঁকি ব্যবস্থাপনা এবং সম্পাদন পরামিতিগুলি এবং সিস্টেমের চূড়ান্ত বাস্তবায়নও আবরণ করা প্রয়োজন হবে। নির্দিষ্ট ভাষাগুলিতে গভীর হওয়ার আগে একটি অনুকূল সিস্টেম আর্কিটেকচারের নকশা নিয়ে আলোচনা করা হবে।

উদ্বেগের বিচ্ছেদ

একটি ট্রেডিং সিস্টেমের সবচেয়ে গুরুত্বপূর্ণ সিদ্ধান্তগুলির মধ্যে একটি হ'ল কীভাবে বিচ্ছেদ করা যায়। সফ্টওয়্যার বিকাশের ক্ষেত্রে, এর অর্থ হ'ল কীভাবে ট্রেডিং সিস্টেমের বিভিন্ন দিককে পৃথক মডুলার উপাদানগুলিতে বিভক্ত করা যায়।

প্রতিটি উপাদানগুলিতে ইন্টারফেসগুলি প্রকাশ করে, কোনও বাহ্যিক নির্ভরতা কোড পরিবর্তন না করে, সিস্টেমের অন্যান্য সংস্করণগুলির জন্য সিস্টেমের অংশগুলি প্রতিস্থাপন করা সহজ। এটি এই জাতীয় সিস্টেমের জন্য "সেরা অনুশীলন" । নিম্ন ফ্রিকোয়েন্সিতে কৌশলগুলির জন্য এই জাতীয় অনুশীলনগুলি সুপারিশ করা হয়। অতি উচ্চ ফ্রিকোয়েন্সি ট্রেডিংয়ের জন্য আরও বেশি পারফরম্যান্সের জন্য সিস্টেমটি টুইট করার ব্যয়ে নিয়ম পুস্তিকাকে উপেক্ষা করতে হতে পারে। আরও শক্তভাবে সংযুক্ত সিস্টেম পছন্দসই হতে পারে।

একটি অ্যালগরিদমিক ট্রেডিং সিস্টেমের একটি উপাদান মানচিত্র তৈরি করা নিজেই একটি নিবন্ধের মূল্যবান। তবে, একটি সর্বোত্তম পদ্ধতি হ'ল historicalতিহাসিক এবং রিয়েল-টাইম বাজার ডেটা ইনপুট, ডেটা স্টোরেজ, ডেটা অ্যাক্সেস এপিআই, ব্যাকটেস্টার, কৌশল পরামিতি, পোর্টফোলিও নির্মাণ, ঝুঁকি ব্যবস্থাপনা এবং স্বয়ংক্রিয় সম্পাদন সিস্টেমের জন্য পৃথক উপাদান রয়েছে তা নিশ্চিত করা।

উদাহরণস্বরূপ, যদি ব্যবহৃত ডেটা স্টোরটি বর্তমানে অপ্টিমাইজেশনের উল্লেখযোগ্য স্তরেও কম পারফরম্যান্স করে থাকে তবে এটি ডেটা ইনজেকশন বা ডেটা অ্যাক্সেস এপিআইতে ন্যূনতম পুনর্লিখনের সাথে প্রতিস্থাপন করা যেতে পারে। যতদূর ব্যাকটেস্টার এবং পরবর্তী উপাদানগুলি উদ্বিগ্ন, সেখানে কোনও পার্থক্য নেই।

পৃথক উপাদানগুলির আরেকটি সুবিধা হ'ল এটি সামগ্রিক সিস্টেমে বিভিন্ন প্রোগ্রামিং ভাষার ব্যবহারের অনুমতি দেয়। উপাদানগুলির যোগাযোগ পদ্ধতিটি ভাষা স্বাধীন হলে একক ভাষায় সীমাবদ্ধ হওয়ার দরকার নেই। এটি যদি তারা টিসিপি / আইপি, জিরোএমকিউ বা অন্য কোনও ভাষা-নিরপেক্ষ প্রোটোকলের মাধ্যমে যোগাযোগ করে থাকে তবে এটি হবে।

একটি বাস্তব উদাহরণ হিসাবে, একটি ব্যাকটেস্টিং সিস্টেম C ++ এ লেখা হচ্ছে number crunching পারফরম্যান্সের জন্য, যখন পোর্টফোলিও ম্যানেজার এবং এক্সিকিউশন সিস্টেমগুলি SciPy এবং IBPy ব্যবহার করে পাইথনে লেখা হয়।

পারফরম্যান্স বিবেচনা

পারফরম্যান্স বেশিরভাগ ট্রেডিং কৌশলগুলির জন্য একটি গুরুত্বপূর্ণ বিবেচ্য বিষয়। উচ্চতর ফ্রিকোয়েন্সি কৌশলগুলির জন্য এটি সবচেয়ে গুরুত্বপূর্ণ কারণ। পারফরম্যান্স অ্যালগরিদমিক এক্সিকিউশন গতি, নেটওয়ার্ক লেটেন্সি, ব্যান্ডউইথ, ডেটা আই / ও, সমান্তরালতা / সমান্তরালতা এবং স্কেলিংয়ের মতো বিস্তৃত বিষয়গুলিকে কভার করে। এই ক্ষেত্রগুলির প্রতিটি পৃথকভাবে বড় পাঠ্যপুস্তক দ্বারা আচ্ছাদিত, তাই এই নিবন্ধটি কেবল প্রতিটি বিষয়ের পৃষ্ঠকে স্ক্র্যাচ করবে। আর্কিটেকচার এবং ভাষা পছন্দ এখন পারফরম্যান্সে তাদের প্রভাবের দিক থেকে আলোচনা করা হবে।

কম্পিউটার সায়েন্সের অন্যতম জনক ডোনাল্ড নথের মতে, প্রচলিত জ্ঞান হল যে অকাল অপ্টিমাইজেশান সব মন্দের মূল। এটি প্রায় সর্বদা সত্য - উচ্চ ফ্রিকোয়েন্সি ট্রেডিং অ্যালগরিদম তৈরির ক্ষেত্রে ব্যতীত! যারা নিম্ন ফ্রিকোয়েন্সি কৌশলগুলিতে আগ্রহী তাদের জন্য, একটি সাধারণ পদ্ধতি হ'ল একটি সিস্টেমটি যতটা সম্ভব সহজ উপায়ে তৈরি করা এবং বোতলঘাটগুলি উপস্থিত হওয়ার সাথে সাথে অপ্টিমাইজ করা।

প্রোফাইলিং সরঞ্জামগুলি কোথায় বোতল ঘাঁটি দেখা দেয় তা নির্ধারণ করতে ব্যবহৃত হয়। এমএস উইন্ডোজ বা লিনাক্স পরিবেশে উপরে তালিকাভুক্ত সমস্ত কারণের জন্য প্রোফাইল তৈরি করা যেতে পারে। এটি করার জন্য অনেকগুলি অপারেটিং সিস্টেম এবং ভাষা সরঞ্জাম উপলব্ধ রয়েছে, পাশাপাশি তৃতীয় পক্ষের ইউটিলিটি। ভাষা পছন্দ এখন পারফরম্যান্সের প্রেক্ষাপটে আলোচনা করা হবে।

সি++, জাভা, পাইথন, আর এবং ম্যাটল্যাব সবগুলোতে বেসিক ডেটা স্ট্রাকচার এবং অ্যালগরিদমিক কাজের জন্য উচ্চ-কার্যকারিতা লাইব্রেরি রয়েছে। সি++ স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরির সাথে আসে, যখন পাইথনে NumPy/SciPy থাকে। সাধারণ গাণিতিক কাজগুলি এই লাইব্রেরিতে পাওয়া যায় এবং এটি খুব কমই একটি নতুন বাস্তবায়ন লিখতে উপকারী।

একটি ব্যতিক্রম হ'ল যদি অত্যন্ত কাস্টমাইজড হার্ডওয়্যার আর্কিটেকচারের প্রয়োজন হয় এবং একটি অ্যালগরিদম মালিকানাধীন এক্সটেনশানগুলি (যেমন কাস্টম ক্যাশে) ব্যাপকভাবে ব্যবহার করে। তবে, প্রায়শই চাকাটির পুনরায় আবিষ্কার এমন সময় নষ্ট করে যা ট্রেডিং অবকাঠামোর অন্যান্য অংশগুলি বিকাশ এবং অনুকূলিতকরণে আরও ভালভাবে ব্যয় করা যেতে পারে। বিশেষত একক বিকাশকারীদের প্রেক্ষিতে বিকাশের সময় অত্যন্ত মূল্যবান।

বিলম্ব প্রায়শই এক্সিকিউশন সিস্টেমের একটি সমস্যা কারণ গবেষণা সরঞ্জামগুলি সাধারণত একই মেশিনে অবস্থিত। প্রথমটির জন্য, বিলম্ব এক্সিকিউশন পথের একাধিক পয়েন্টে ঘটতে পারে। ডাটাবেসগুলি অনুসন্ধান করতে হবে (ডিস্ক / নেটওয়ার্ক বিলম্ব), সংকেতগুলি উত্পন্ন করতে হবে (অপারেশন সিস্টেম, কার্নেল মেসেজিং বিলম্ব), বাণিজ্য সংকেত প্রেরণ করা হবে (এনআইসি বিলম্ব) এবং আদেশগুলি প্রক্রিয়াজাত করা হবে (এক্সচেঞ্জ সিস্টেম অভ্যন্তরীণ বিলম্ব) ।

উচ্চতর ফ্রিকোয়েন্সি অপারেশনগুলির জন্য কার্নেল অপ্টিমাইজেশান এবং নেটওয়ার্ক ট্রান্সমিশনের অপ্টিমাইজেশনের সাথে ঘনিষ্ঠভাবে পরিচিত হওয়া প্রয়োজন। এটি একটি গভীর ক্ষেত্র এবং নিবন্ধের আওতার বাইরে উল্লেখযোগ্যভাবে তবে যদি একটি ইউএইচএফটি অ্যালগরিদম পছন্দ করা হয় তবে প্রয়োজনীয় জ্ঞানের গভীরতার বিষয়ে সচেতন হন!

ক্যাচিং একটি পরিমাণগত ট্রেডিং ডেভেলপারের টুলকিটে খুব দরকারী। ক্যাচিং এমন একটি ধারণাকে বোঝায় যা প্রায়শই অ্যাক্সেস করা ডেটাকে এমনভাবে সঞ্চয় করে যা ডেটাগুলির সম্ভাব্য স্টাল্যান্সের ব্যয়ে উচ্চতর পারফরম্যান্স অ্যাক্সেসের অনুমতি দেয়। একটি সাধারণ ব্যবহারের ক্ষেত্রে ওয়েব ডেভেলপমেন্টে ঘটে যখন ডিস্ক-ব্যাকড রিলেশনাল ডাটাবেস থেকে ডেটা নেওয়া হয় এবং এটিকে মেমরিতে রাখা হয়। ডেটাটির জন্য পরবর্তী যে কোনও অনুরোধের ডাটাবেস আঘাত করতে হবে না এবং তাই পারফরম্যান্স লাভ উল্লেখযোগ্য হতে পারে।

ট্রেডিং পরিস্থিতির জন্য ক্যাশিং অত্যন্ত উপকারী হতে পারে। উদাহরণস্বরূপ, একটি কৌশল পোর্টফোলিওর বর্তমান অবস্থা একটি ক্যাশে সংরক্ষণ করা যেতে পারে যতক্ষণ না এটি পুনরায় ভারসাম্যপূর্ণ হয়, যাতে তালিকাটি ট্রেডিং অ্যালগরিদমের প্রতিটি লুপে পুনর্জন্মের প্রয়োজন হয় না। এই পুনর্জন্মটি সম্ভবত একটি উচ্চ সিপিইউ বা ডিস্ক আই / ও অপারেশন হবে।

ক্যাশে স্টোরেজের ভয়াবহ প্রকৃতির কারণে, ক্যাশে ডেটা একসাথে পুনর্জন্ম অবকাঠামোর উপর উল্লেখযোগ্য চাহিদা রাখতে পারে। আরেকটি সমস্যা হ'ল কুকুরের স্তূপ, যেখানে একটি নতুন ক্যাশে অনুলিপিটির একাধিক প্রজন্ম অত্যন্ত উচ্চ লোডের অধীনে পরিচালিত হয়, যা ক্যাসকেড ব্যর্থতার দিকে পরিচালিত করে।

ডায়নামিক মেমরি বরাদ্দ সফ্টওয়্যার এক্সিকিউশনে একটি ব্যয়বহুল অপারেশন। সুতরাং উচ্চতর পারফরম্যান্স ট্রেডিং অ্যাপ্লিকেশনগুলির জন্য প্রোগ্রামের প্রবাহের সময় কীভাবে মেমরি বরাদ্দ করা হচ্ছে এবং ডিল্লোকেশন করা হচ্ছে তা ভালভাবে সচেতন হওয়া জরুরি। জাভা, সি # এবং পাইথনের মতো নতুন ভাষা স্ট্যান্ডার্ডগুলি স্বয়ংক্রিয় আবর্জনা সংগ্রহ সম্পাদন করে, যা বস্তুগুলির আওতার বাইরে যাওয়ার সময় গতিশীলভাবে বরাদ্দ মেমরির ডিল্লোকেশনকে বোঝায়।

জাভাতে, উদাহরণস্বরূপ, আবর্জনা সংগ্রাহক এবং হ্যাপ কনফিগারেশন টিউন করে, এইচএফটি কৌশলগুলির জন্য উচ্চ কার্যকারিতা অর্জন করা সম্ভব।

সি++ একটি নেটিভ আবর্জনা সংগ্রাহক সরবরাহ করে না এবং তাই এটি একটি বস্তুর বাস্তবায়নের অংশ হিসাবে সমস্ত মেমরি বরাদ্দ / deallocation পরিচালনা করা প্রয়োজন। যদিও সম্ভাব্য ত্রুটি প্রবণ (সম্ভাব্যভাবে ঝুলন্ত পয়েন্টারগুলির দিকে পরিচালিত করে) নির্দিষ্ট অ্যাপ্লিকেশনগুলির জন্য হ্যাপে কীভাবে বস্তুগুলি প্রদর্শিত হয় তার সূক্ষ্ম-আণু নিয়ন্ত্রণ থাকা অত্যন্ত দরকারী। একটি ভাষা নির্বাচন করার সময় আবর্জনা সংগ্রাহক কীভাবে কাজ করে এবং এটি একটি নির্দিষ্ট ব্যবহারের ক্ষেত্রে অনুকূলিতকরণের জন্য সংশোধন করা যেতে পারে কিনা তা অধ্যয়ন করতে ভুলবেন না।

অ্যালগরিদমিক ট্রেডিং সিস্টেমের অনেক অপারেশন সমান্তরালীকরণের জন্য অনুকূল। এটি একই সময়ে একাধিক প্রোগ্রাম্যাটিক অপারেশন সম্পাদন করার ধারণাকে বোঝায়, অর্থাৎ সমান্তরাল । তথাকথিত embarrassingly parallel অ্যালগরিদমগুলিতে এমন পদক্ষেপ অন্তর্ভুক্ত রয়েছে যা অন্যান্য পদক্ষেপের থেকে সম্পূর্ণ স্বাধীনভাবে গণনা করা যায়। কিছু পরিসংখ্যানগত অপারেশন, যেমন মন্টে কার্লো সিমুলেশন, embarrassingly সমান্তরাল অ্যালগরিদমের একটি ভাল উদাহরণ কারণ প্রতিটি এলোমেলো ড্র এবং পরবর্তী পথ অপারেশন অন্যান্য পথের জ্ঞান ছাড়াই গণনা করা যেতে পারে।

অন্যান্য অ্যালগরিদমগুলি কেবল আংশিকভাবে সমান্তরালীকরণযোগ্য। তরল গতিবিদ্যা সিমুলেশনগুলি এমন একটি উদাহরণ, যেখানে গণনার ডোমেনকে উপবিভাজিত করা যেতে পারে, তবে শেষ পর্যন্ত এই ডোমেনগুলিকে একে অপরের সাথে যোগাযোগ করতে হবে এবং সুতরাং ক্রিয়াকলাপগুলি আংশিকভাবে ক্রমিক। সমান্তরালীকরণযোগ্য অ্যালগরিদমগুলি আমদালের আইন সাপেক্ষে, যা এনএন পৃথক প্রক্রিয়াগুলির সাপেক্ষে (যেমন সিপিইউ কোর বা থ্রেডে) সমান্তরাল অ্যালগরিদমের পারফরম্যান্স বৃদ্ধির একটি তাত্ত্বিক উপরের সীমা সরবরাহ করে।

সমান্তরালীকরণ অপ্টিমাইজেশনের উপায় হিসাবে ক্রমবর্ধমান গুরুত্বপূর্ণ হয়ে উঠেছে যেহেতু প্রসেসর ঘড়ির গতি স্থবির হয়ে পড়েছে, কারণ নতুন প্রসেসরগুলিতে সমান্তরাল গণনা সম্পাদন করার জন্য অনেকগুলি কোর রয়েছে। ভোক্তা গ্রাফিক্স হার্ডওয়্যারের উত্থান (প্রধানত ভিডিও গেমের জন্য) গ্রাফিকাল প্রসেসিং ইউনিট (জিপিইউ) এর বিকাশের দিকে পরিচালিত করেছে, যা অত্যন্ত সমান্তরাল ক্রিয়াকলাপের জন্য শত শত কোর রয়েছে। এই জাতীয় জিপিইউ এখন খুব সাশ্রয়ী মূল্যের। এনভিডিয়া এর CUDA এর মতো উচ্চ স্তরের ফ্রেমওয়ার্কগুলি একাডেমিক ও ফিনান্সে ব্যাপক গ্রহণের দিকে পরিচালিত করেছে।

এই ধরনের জিপিইউ হার্ডওয়্যার সাধারণত পরিমাণগত অর্থের গবেষণার দিকের জন্য উপযুক্ত, যখন অন্যান্য আরও বিশেষায়িত হার্ডওয়্যার (ফিল্ড-প্রোগ্রামযোগ্য গেট অ্যারে সহ - এফপিজিএ) (ইউ) এইচএফটি) এর জন্য ব্যবহৃত হয়। আজকাল, বেশিরভাগ আধুনিক ল্যাঙ্গুয়েজগুলি একক / মাল্টিথ্রেডিংয়ের একটি ডিগ্রি সমর্থন করে। সুতরাং এটি একটি ব্যাকটেস্টারকে অনুকূলিতকরণ করা সহজ, যেহেতু সমস্ত গণনা সাধারণত অন্যদের থেকে স্বাধীন।

সফটওয়্যার ইঞ্জিনিয়ারিং এবং অপারেশনে স্কেলিং বলতে সিস্টেমের ক্রমাগত বর্ধমান লোডগুলিকে বৃহত্তর অনুরোধ, উচ্চতর প্রসেসর ব্যবহার এবং আরও মেমরি বরাদ্দের আকারে পরিচালনা করার ক্ষমতা বোঝায়। অ্যালগরিদমিক ট্রেডিংয়ে একটি কৌশল স্কেল করতে সক্ষম হয় যদি এটি বৃহত্তর পরিমাণে মূলধন গ্রহণ করতে পারে এবং এখনও ধারাবাহিক রিটার্ন উত্পাদন করে। ট্রেডিং প্রযুক্তি স্ট্যাক স্কেল করে যদি এটি বৃহত্তর বাণিজ্য ভলিউম এবং বর্ধিত বিলম্ব সহ্য করতে পারে, বোতলঘাট ছাড়াই।

যদিও সিস্টেমগুলি স্কেল করার জন্য ডিজাইন করা উচিত, তবে প্রায়শই একটি বোতল ঘাঁটি কোথায় ঘটবে তা পূর্বাভাস দেওয়া কঠিন। কঠোর লগিং, পরীক্ষা, প্রোফাইলিং এবং পর্যবেক্ষণ একটি সিস্টেমকে স্কেল করার অনুমতি দিতে ব্যাপকভাবে সহায়তা করবে। ভাষা নিজেই প্রায়শই unscalable হিসাবে বর্ণনা করা হয়। এটি সাধারণত হার্ড ফ্যাক্টের পরিবর্তে ভুল তথ্যের ফলাফল। এটি মোট প্রযুক্তি স্ট্যাক যা স্কেলযোগ্যতার জন্য নিশ্চিত করা উচিত, ভাষা নয়। স্পষ্টতই নির্দিষ্ট ব্যবহারের ক্ষেত্রে নির্দিষ্ট ভাষাগুলির তুলনায় অন্যের চেয়ে বেশি পারফরম্যান্স রয়েছে, তবে একটি ভাষা সর্বদা অন্যের চেয়ে উন্নত হয় না।

স্কেল পরিচালনার একটি উপায় হ'ল উপরে উল্লিখিত হিসাবে উদ্বেগগুলি পৃথক করা। সিস্টেমে স্পাইক পরিচালনা করার ক্ষমতা আরও প্রবর্তন করার জন্য (যেমন হঠাৎ অস্থিরতা যা ট্রেডের একটি বটানকে ট্রিগার করে), এটি একটি বার্তা ক্যু আর্কিটেকচার তৈরি করা দরকার। এর অর্থ কেবল উপাদানগুলির মধ্যে একটি বার্তা ক্যু সিস্টেম স্থাপন করা যাতে একটি নির্দিষ্ট উপাদান যদি অনেকগুলি অনুরোধ প্রক্রিয়া করতে অক্ষম হয় তবে অর্ডারগুলি স্ট্যাক আপ হয়।

অনুরোধগুলি হারিয়ে যাওয়ার পরিবর্তে, বার্তাটি পরিচালনা না হওয়া পর্যন্ত সেগুলি কেবল স্ট্যাকে রাখা হয়। এটি একটি এক্সিকিউশন ইঞ্জিনে ট্রেড প্রেরণের জন্য বিশেষভাবে কার্যকর। যদি ইঞ্জিনটি ভারী বিলম্বের অধীনে ভোগে তবে এটি ব্যবসায়ের ব্যাকআপ নেবে। ট্রেড সিগন্যাল জেনারেটর এবং এক্সিকিউশন এপিআইয়ের মধ্যে একটি সারি সম্ভাব্য বাণিজ্য স্লিপিংয়ের ব্যয়ে এই সমস্যাটি হ্রাস করবে। একটি সম্মানিত ওপেন সোর্স বার্তা সারি ব্রোকার হলেন রাব্বিটএমকিউ।

হার্ডওয়্যার এবং অপারেটিং সিস্টেম

আপনার কৌশল চালানো হার্ডওয়্যারটি আপনার অ্যালগরিদমের লাভজনকতার উপর উল্লেখযোগ্য প্রভাব ফেলতে পারে। এটি উচ্চ ফ্রিকোয়েন্সি ব্যবসায়ীদের মধ্যে সীমাবদ্ধ একটি সমস্যা নয়। হার্ডওয়্যার এবং অপারেটিং সিস্টেমের একটি খারাপ পছন্দ সবচেয়ে অনুপযুক্ত মুহুর্তে মেশিন ক্র্যাশ বা পুনরায় বুট হতে পারে। সুতরাং আপনার অ্যাপ্লিকেশনটি কোথায় থাকবে তা বিবেচনা করা প্রয়োজন। পছন্দটি সাধারণত একটি ব্যক্তিগত ডেস্কটপ মেশিন, একটি রিমোট সার্ভার, একটি cloud সরবরাহকারী বা একটি এক্সচেঞ্জ কো-অবস্থিত সার্ভার এর মধ্যে হয়।

ডেস্কটপ মেশিনগুলি ইনস্টল করা এবং পরিচালনা করা সহজ, বিশেষত উইন্ডোজ 7/8, ম্যাক ওএসএক্স এবং উবুন্টুর মতো নতুন ব্যবহারকারী বান্ধব অপারেটিং সিস্টেমের সাথে। ডেস্কটপ সিস্টেমগুলির কিছু উল্লেখযোগ্য অসুবিধা রয়েছে। তবে সবচেয়ে গুরুত্বপূর্ণ বিষয় হ'ল ডেস্কটপ মেশিনগুলির জন্য ডিজাইন করা অপারেটিং সিস্টেমের সংস্করণগুলি পুনরায় বুট / প্যাচিংয়ের প্রয়োজন হতে পারে (এবং প্রায়শই সবচেয়ে খারাপ সময়ে) । গ্রাফিকাল ইউজার ইন্টারফেস (জিইউআই) প্রয়োজন হওয়ার কারণে তারা আরও বেশি কম্পিউটিং সংস্থান ব্যবহার করে।

একটি হোম (বা স্থানীয় অফিস) পরিবেশে হার্ডওয়্যার ব্যবহার ইন্টারনেট সংযোগ এবং শক্তি আপটাইম সমস্যা হতে পারে। একটি ডেস্কটপ সিস্টেমের প্রধান সুবিধা হল যে একটি উল্লেখযোগ্য কম্পিউটিং অশ্বশক্তি তুলনামূলক গতির একটি দূরবর্তী ডেডিকেটেড সার্ভারের (বা ক্লাউড ভিত্তিক সিস্টেম) খরচের একটি ভগ্নাংশের জন্য ক্রয় করা যেতে পারে।

ডেডিকেটেড সার্ভার বা ক্লাউড-ভিত্তিক মেশিন, যদিও ডেস্কটপ বিকল্পের তুলনায় প্রায়শই বেশি ব্যয়বহুল, স্বয়ংক্রিয় ডেটা ব্যাকআপের মতো আরও উল্লেখযোগ্য রিডান্ডান্সি অবকাঠামোর অনুমতি দেয়, আরও সহজেই আপটাইম এবং দূরবর্তী পর্যবেক্ষণ নিশ্চিত করার ক্ষমতা। অপারেটিং সিস্টেমের দূরবর্তী লগইন সক্ষমতা ব্যবহার করার ক্ষমতা প্রয়োজন হওয়ায় এগুলি পরিচালনা করা আরও কঠিন।

উইন্ডোজে এটি সাধারণত জিইউআই রিমোট ডেস্কটপ প্রোটোকল (আরডিপি) এর মাধ্যমে হয়। ইউনিক্স-ভিত্তিক সিস্টেমে কমান্ড-লাইন সিকিউর শেল (এসএসএইচ) ব্যবহার করা হয়। ইউনিক্স-ভিত্তিক সার্ভার অবকাঠামো প্রায় সর্বদা কমান্ড-লাইন ভিত্তিক যা অবিলম্বে জিইউআই-ভিত্তিক প্রোগ্রামিং সরঞ্জামগুলি (যেমন ম্যাটল্যাব বা এক্সেল) ব্যবহারযোগ্য নয়।

মূলধন বাজারে ব্যবহৃত বাক্যাংশ হিসাবে, একটি সহ-অবস্থিত সার্ভার কেবলমাত্র একটি ডেডিকেটেড সার্ভার যা ট্রেডিং অ্যালগরিদমের বিলম্ব হ্রাস করার জন্য একটি এক্সচেঞ্জের মধ্যে থাকে। এটি নির্দিষ্ট উচ্চ ফ্রিকোয়েন্সি ট্রেডিং কৌশলগুলির জন্য একেবারে প্রয়োজনীয়, যা আলফা তৈরির জন্য কম বিলম্বের উপর নির্ভর করে।

হার্ডওয়্যার পছন্দ এবং প্রোগ্রামিং ভাষার পছন্দ করার চূড়ান্ত দিকটি প্ল্যাটফর্ম-স্বাধীনতা। কোডটি একাধিক বিভিন্ন অপারেটিং সিস্টেমে চালানোর প্রয়োজন আছে কি? কোডটি একটি নির্দিষ্ট ধরণের প্রসেসর আর্কিটেকচারে চালানোর জন্য ডিজাইন করা হয়েছে, যেমন ইন্টেল এক্স 86 / এক্স 64 বা এটি আরএম দ্বারা উত্পাদিত যেমন আরআইএসসি প্রসেসরগুলিতে চালানো সম্ভব হবে? এই বিষয়গুলি বাস্তবায়িত কৌশলটির ফ্রিকোয়েন্সি এবং ধরণের উপর অত্যন্ত নির্ভরশীল হবে।

স্থিতিস্থাপকতা এবং পরীক্ষা

অ্যালগরিদমিক ট্রেডিংয়ে প্রচুর অর্থ হারানোর অন্যতম সেরা উপায় হ'ল কোনও স্থিতিস্থাপকতা ছাড়াই একটি সিস্টেম তৈরি করা। এটি বিরল ইভেন্টগুলির সাপেক্ষে সিস্টেমের স্থায়িত্বকে বোঝায়, যেমন ব্রোকারেজের দেউলিয়া, হঠাৎ অতিরিক্ত অস্থিরতা, ক্লাউড সার্ভার সরবরাহকারীর জন্য অঞ্চল-ব্যাপী ডাউনটাইম বা পুরো ট্রেডিং ডাটাবেসের দুর্ঘটনাক্রমে মুছে ফেলা। দুর্বল ডিজাইন করা আর্কিটেকচারের সাহায্যে কয়েক সেকেন্ডের মধ্যে বহু বছরের মুনাফা নির্মূল করা যেতে পারে। আপনার সিস্টেমের মূল উপাদান হিসাবে ডিবাগিং, পরীক্ষা, লগিং, ব্যাকআপ, উচ্চ-প্রাপ্যতা এবং পর্যবেক্ষণের মতো বিষয়গুলি বিবেচনা করা একেবারে প্রয়োজনীয়।

এটি সম্ভবত যে কোনও যুক্তিসঙ্গতভাবে জটিল কাস্টম পরিমাণগত ট্রেডিং অ্যাপ্লিকেশন কমপক্ষে 50% বিকাশের সময় ডিবাগিং, পরীক্ষা এবং রক্ষণাবেক্ষণে ব্যয় করা হবে।

প্রায় সব প্রোগ্রামিং ভাষায় একটি সংশ্লিষ্ট ডিবাগারের সাথে জাহাজ বা সম্মানিত তৃতীয় পক্ষের বিকল্প রয়েছে। মূলত, একটি ডিবাগার কোড পাথে স্বতঃস্ফূর্ত বিরতি পয়েন্ট সন্নিবেশের সাথে একটি প্রোগ্রামের কার্যকর করার অনুমতি দেয়, যা সিস্টেমের অবস্থা তদন্ত করার জন্য অস্থায়ীভাবে কার্যকর বন্ধ করে দেয়। ডিবাগিংয়ের প্রধান সুবিধা হল এটি একটি পরিচিত ক্র্যাশ পয়েন্টের আগে কোডের আচরণ তদন্ত করা সম্ভব।

ডিবাগিং প্রোগ্রামিং ত্রুটি বিশ্লেষণের জন্য টুলবক্সের একটি প্রয়োজনীয় উপাদান। তবে, সি ++ বা জাভা এর মতো সংকলিত ভাষাগুলিতে এগুলি আরও ব্যাপকভাবে ব্যবহৃত হয়, কারণ পাইথনের মতো ব্যাখ্যা করা ভাষা কম এলওসি এবং কম কথার বিবৃতির কারণে প্রায়শই ডিবাগ করা সহজ। এই প্রবণতা সত্ত্বেও পাইথন পিডিবি সহ শিপ করে, যা একটি পরিশীলিত ডিবাগিং সরঞ্জাম। মাইক্রোসফ্ট ভিজ্যুয়াল সি ++ আইডিইতে বিস্তৃত জিইউআই ডিবাগিং ইউটিলিটি রয়েছে, যখন কমান্ড লাইন লিনাক্স সি ++ প্রোগ্রামারের জন্য, জিডিবি ডিবাগার বিদ্যমান।

সফটওয়্যার ডেভেলপমেন্টে টেস্টিং বলতে কোডবেসের মধ্যে নির্দিষ্ট ফাংশন, পদ্ধতি এবং বস্তুগুলিতে পরিচিত পরামিতি এবং ফলাফল প্রয়োগের প্রক্রিয়াকে বোঝায়, যাতে আচরণ অনুকরণ করা যায় এবং একাধিক কোড-পথগুলি মূল্যায়ন করা যায়, এটি নিশ্চিত করতে সহায়তা করে যে একটি সিস্টেম যেমন হওয়া উচিত তেমন আচরণ করে। একটি সাম্প্রতিক দৃষ্টান্তটি টেস্ট ড্রাইভেন ডেভেলপমেন্ট (টিডিডি) নামে পরিচিত, যেখানে কোনও বাস্তবায়ন ছাড়াই নির্দিষ্ট ইন্টারফেসের বিরুদ্ধে পরীক্ষার কোড বিকাশ করা হয়। প্রকৃত কোডবেসটি শেষ হওয়ার আগে সমস্ত পরীক্ষা ব্যর্থ হবে। কোডটি ফাঁকা জায়গায় পূরণ করতে লেখা হয়, পরীক্ষাগুলি শেষ পর্যন্ত সব পাস হবে, সেই সময়ে বিকাশ বন্ধ করা উচিত।

টিডিডি সফলভাবে সম্পাদন করার জন্য বিস্তৃত আপফ্রন্ট স্পেসিফিকেশন ডিজাইনের পাশাপাশি একটি স্বাস্থ্যকর ডিগ্রি শৃঙ্খলা প্রয়োজন। সি ++ এ, বুস্ট একটি ইউনিট টেস্টিং ফ্রেমওয়ার্ক সরবরাহ করে। জাভাতে, একই উদ্দেশ্য পূরণের জন্য JUnit লাইব্রেরি বিদ্যমান। পাইথনের স্ট্যান্ডার্ড লাইব্রেরির অংশ হিসাবে ইউনিটস্ট মডিউল রয়েছে। অন্যান্য অনেক ভাষায় ইউনিট টেস্টিং ফ্রেমওয়ার্ক রয়েছে এবং প্রায়শই একাধিক বিকল্প রয়েছে।

একটি উত্পাদন পরিবেশে, পরিশীলিত লগিং একেবারে অপরিহার্য। লগিং একটি সমতল ফাইল বা ডাটাবেসে একটি সিস্টেমের এক্সিকিউশন আচরণ সম্পর্কিত বার্তাগুলির বিভিন্ন ডিগ্রি তীব্রতার সাথে আউটপুট করার প্রক্রিয়াকে বোঝায়। লগগুলি অপ্রত্যাশিত প্রোগ্রাম রানটাইম আচরণের জন্য শিকার করার সময় প্রথম আক্রমণের লাইন। দুর্ভাগ্যবশত লগিং সিস্টেমের ত্রুটিগুলি কেবলমাত্র ঘটনাটির পরে আবিষ্কৃত হয়! নীচে আলোচনা করা ব্যাকআপগুলির মতো, একটি সিস্টেম ডিজাইন করার আগে একটি লগিং সিস্টেমকে যথাযথ বিবেচনা দেওয়া উচিত।

মাইক্রোসফ্ট উইন্ডোজ এবং লিনাক্স উভয়ই বিস্তৃত সিস্টেম লগিং ক্ষমতা সহ আসে এবং প্রোগ্রামিং ভাষা বেশিরভাগ ব্যবহারের ক্ষেত্রে কভার করে এমন স্ট্যান্ডার্ড লগিং লাইব্রেরিগুলির সাথে শিপিংয়ের প্রবণতা রাখে। এটি পরে বিশ্লেষণের জন্য লগিং তথ্যকে কেন্দ্রীভূত করা প্রায়শই বুদ্ধিমান, কারণ এটি প্রায়শই কর্মক্ষমতা উন্নত বা ত্রুটি হ্রাস সম্পর্কে ধারণা নিয়ে যেতে পারে, যা আপনার ট্রেডিং রিটার্নগুলিতে প্রায় নিশ্চিতভাবে ইতিবাচক প্রভাব ফেলবে।

একটি সিস্টেমের লগিং অতীতে কী ঘটেছে সে সম্পর্কে তথ্য সরবরাহ করবে, অ্যাপ্লিকেশনটির পর্যবেক্ষণ এখন কী ঘটছে সে সম্পর্কে অন্তর্দৃষ্টি সরবরাহ করবে। পর্যবেক্ষণের জন্য সিস্টেমের সমস্ত দিক বিবেচনা করা উচিত। ডিস্ক ব্যবহার, উপলব্ধ মেমরি, নেটওয়ার্ক ব্যান্ডউইথ এবং সিপিইউ ব্যবহারের মতো সিস্টেম স্তরের মেট্রিকগুলি মৌলিক লোড তথ্য সরবরাহ করে।

বিভিন্ন সেক্টর/বাজারে অস্বাভাবিক মূল্য/ভলিউম, হঠাৎ দ্রুত হ্রাস এবং অ্যাকাউন্ট এক্সপোজারের মতো ট্রেডিং মেট্রিকগুলিও ক্রমাগত পর্যবেক্ষণ করা উচিত। উপরন্তু, একটি থ্রেশহোল্ড সিস্টেম চালু করা উচিত যা নির্দিষ্ট মেট্রিকগুলি লঙ্ঘন হলে বিজ্ঞপ্তি প্রদান করে, মেট্রিকের তীব্রতার উপর নির্ভর করে বিজ্ঞপ্তি পদ্ধতি (ইমেল, এসএমএস, স্বয়ংক্রিয় ফোন কল) উন্নত করে।

সিস্টেম মনিটরিং প্রায়শই সিস্টেম অ্যাডমিনিস্ট্রেটর বা অপারেশন ম্যানেজারের ডোমেন। তবে, একমাত্র ট্রেডিং বিকাশকারী হিসাবে, এই মেট্রিকগুলি বৃহত্তর ডিজাইনের অংশ হিসাবে প্রতিষ্ঠিত হতে হবে। মনিটরিংয়ের জন্য অনেক সমাধান রয়েছেঃ মালিকানাধীন, হোস্ট করা এবং ওপেন সোর্স, যা একটি নির্দিষ্ট ব্যবহারের ক্ষেত্রে মেট্রিকগুলির বিস্তৃত কাস্টমাইজেশনের অনুমতি দেয়।

ব্যাকআপ এবং উচ্চ প্রাপ্যতা একটি ট্রেডিং সিস্টেমের প্রধান উদ্বেগ হওয়া উচিত। নিম্নলিখিত দুটি প্রশ্ন বিবেচনা করুনঃ 1) যদি বাজার তথ্য এবং ট্রেডিং ইতিহাসের একটি সম্পূর্ণ উত্পাদন ডাটাবেস মুছে ফেলা হয় (ব্যাকআপ ছাড়াই) গবেষণা এবং সম্পাদন অ্যালগরিদম কিভাবে প্রভাবিত হবে? 2) যদি ট্রেডিং সিস্টেম দীর্ঘ সময়ের জন্য একটি আউটপুট ভোগ করে (খোলা অবস্থানের সাথে) কিভাবে অ্যাকাউন্ট ইক্যুইটি এবং চলমান মুনাফা প্রভাবিত হবে? এই উভয় প্রশ্নের উত্তরগুলি প্রায়ই উদ্বেগজনক!

তথ্য ব্যাকআপ করার জন্য এবং এই ধরনের তথ্য পুনরুদ্ধারের জন্য একটি সিস্টেম স্থাপন করা জরুরি। অনেক ব্যক্তি পুনরুদ্ধার কৌশল পরীক্ষা করে না। যদি একটি ক্র্যাশ থেকে পুনরুদ্ধার একটি নিরাপদ পরিবেশে পরীক্ষা করা হয় নি, কোন গ্যারান্টি আছে যে পুনরুদ্ধার সবচেয়ে খারাপ সম্ভাব্য মুহূর্তে পাওয়া যাবে?

একইভাবে, উচ্চ প্রাপ্যতা শুরু থেকেই পাকা করা দরকার। অতিরিক্ত অবকাঠামো (এমনকি অতিরিক্ত ব্যয়ে) সর্বদা বিবেচনা করা উচিত, কারণ ডাউনটাইমের ব্যয় এই জাতীয় সিস্টেমগুলির চলমান রক্ষণাবেক্ষণের ব্যয়কে অতিক্রম করতে পারে। এটি একটি বড় অঞ্চল হওয়ায় আমি এই বিষয়ে খুব গভীরভাবে গভীর হব না, তবে এটি আপনার ট্রেডিং সিস্টেমে দেওয়া প্রথম বিবেচনাগুলির মধ্যে একটি।

একটি ভাষা নির্বাচন করা

একটি কাস্টম উচ্চ-কার্যকারিতা অ্যালগরিদমিক ট্রেডিং সিস্টেম বিকাশের সময় উত্থাপিত বিভিন্ন কারণগুলির উপর এখন যথেষ্ট বিশদ সরবরাহ করা হয়েছে। পরবর্তী পর্যায়ে প্রোগ্রামিং ভাষাগুলি কীভাবে সাধারণত শ্রেণিবদ্ধ করা হয় তা নিয়ে আলোচনা করা হবে।

টাইপ সিস্টেম

একটি ট্রেডিং স্ট্যাকের জন্য একটি ভাষা নির্বাচন করার সময় টাইপ সিস্টেম বিবেচনা করা প্রয়োজন। অ্যালগরিদমিক ট্রেডিংয়ের জন্য আগ্রহের ভাষা হয় স্ট্যাটিক বা গতিশীলভাবে টাইপ করা হয়। একটি স্ট্যাটিকভাবে টাইপ করা ভাষা সংকলন প্রক্রিয়া চলাকালীন টাইপগুলির (যেমন পূর্ণসংখ্যা, ভাসমান, কাস্টম ক্লাস ইত্যাদি) চেক সম্পাদন করে। এই ধরনের ভাষাগুলির মধ্যে সি ++ এবং জাভা অন্তর্ভুক্ত। একটি গতিশীলভাবে টাইপ করা ভাষা রানটাইমে তার টাইপ-চেকিংয়ের বেশিরভাগ সম্পাদন করে। এই ধরনের ভাষাগুলির মধ্যে পাইথন, পার্ল এবং জাভাস্ক্রিপ্ট অন্তর্ভুক্ত।

অ্যালগরিদমিক ট্রেডিং ইঞ্জিনের মতো একটি অত্যন্ত সংখ্যাসূচক সিস্টেমের জন্য, কম্পাইলের সময় টাইপ-চেকিং অত্যন্ত উপকারী হতে পারে, কারণ এটি অনেকগুলি বাগ দূর করতে পারে যা অন্যথায় সংখ্যাসূচক ত্রুটির দিকে পরিচালিত করবে। তবে, টাইপ-চেকিং সমস্ত কিছু ধরতে পারে না, এবং এখানেই অপ্রত্যাশিত ক্রিয়াকলাপ পরিচালনা করার প্রয়োজনীয়তার কারণে ব্যতিক্রম হ্যান্ডলিং আসে। গতিশীল ভাষা (যেগুলি গতিশীলভাবে টাইপ করা হয়) প্রায়শই রান-টাইম ত্রুটির দিকে পরিচালিত করতে পারে যা অন্যথায় কম্পাইলের সময় টাইপ-চেকের সাথে ধরা পড়বে। এই কারণে, টিডিডি (উপরে দেখুন) এবং ইউনিট টেস্টিংয়ের ধারণাটি উত্থাপিত হয়েছিল যা সঠিকভাবে পরিচালিত হলে একা কম্পাইল-টাইম চেকিংয়ের চেয়ে প্রায়শই আরও সুরক্ষা সরবরাহ করে।

স্ট্যাটিকলি টাইপ করা ভাষাগুলির আরেকটি সুবিধা হ'ল কম্পাইলার অনেকগুলি অপ্টিমাইজেশন করতে সক্ষম হয় যা অন্যথায় গতিশীলভাবে টাইপ করা ভাষায় উপলভ্য নয়, কেবলমাত্র কারণ টাইপ (এবং তাই মেমরির প্রয়োজনীয়তা) কম্পাইলের সময় জানা যায়। প্রকৃতপক্ষে, অনেকগুলি গতিশীলভাবে টাইপ করা ভাষার অকার্যকরতার অংশটি এই সত্য থেকে উদ্ভূত হয় যে নির্দিষ্ট বস্তুগুলিকে রান-টাইমে টাইপ-নিরীক্ষণ করতে হবে এবং এটি একটি পারফরম্যান্স হিট বহন করে। গতিশীল ভাষাগুলির জন্য লাইব্রেরি, যেমন NumPy / SciPy অ্যারের মধ্যে একটি টাইপ জোরদার করার কারণে এই সমস্যাটি হ্রাস করে।

ওপেন সোর্স নাকি প্রাইভেট?

অ্যালগরিদমিক ট্রেডিং ডেভেলপারের জন্য উপলব্ধ সবচেয়ে বড় পছন্দগুলির মধ্যে একটি হল মালিকানাধীন (বাণিজ্যিক) বা ওপেন সোর্স প্রযুক্তি ব্যবহার করা। উভয় পদ্ধতির সুবিধা এবং অসুবিধা রয়েছে। এটি বিবেচনা করা প্রয়োজন যে কোনও ভাষা কতটা সমর্থিত, একটি ভাষা ঘিরে সম্প্রদায়ের কার্যকলাপ, ইনস্টলেশন এবং রক্ষণাবেক্ষণের সহজতা, ডকুমেন্টেশনের গুণমান এবং কোনও লাইসেন্সিং / রক্ষণাবেক্ষণ ব্যয়।

মাইক্রোসফ্ট.নেট স্ট্যাক (ভিজ্যুয়াল সি ++, ভিজ্যুয়াল সি # সহ) এবং ম্যাথওয়ার্কস ম্যাটল্যাব কাস্টম অ্যালগরিদমিক ট্রেডিং সফ্টওয়্যার বিকাশের জন্য দুটি বৃহত্তর মালিকানাধীন পছন্দ। উভয় সরঞ্জামই আর্থিক স্থানে উল্লেখযোগ্য যুদ্ধ পরীক্ষা করেছে, প্রথমটি বিনিয়োগ ব্যাংকিং ট্রেডিং অবকাঠামোর জন্য প্রাধান্যপূর্ণ সফ্টওয়্যার স্ট্যাক তৈরি করে এবং দ্বিতীয়টি বিনিয়োগ তহবিলের মধ্যে পরিমাণগত ট্রেডিং গবেষণার জন্য ব্যাপকভাবে ব্যবহৃত হয়।

মাইক্রোসফ্ট এবং ম্যাথওয়ার্কস উভয়ই তাদের পণ্যগুলির জন্য বিস্তৃত উচ্চ মানের ডকুমেন্টেশন সরবরাহ করে। উপরন্তু, প্রতিটি সরঞ্জামের আশেপাশের সম্প্রদায়গুলি উভয়ের জন্য সক্রিয় ওয়েব ফোরাম সহ খুব বড়।.NET সফ্টওয়্যার সি ++, সি # এবং ভিবির মতো একাধিক ভাষার সাথে সংহত সংহতকরণের পাশাপাশি লিংকের মাধ্যমে এসকিউএল সার্ভার ডাটাবেসের মতো অন্যান্য মাইক্রোসফ্ট পণ্যগুলির সাথে সহজ লিঙ্কিংয়ের অনুমতি দেয়। ম্যাটল্যাবের প্রায় কোনও পরিমাণগত গবেষণা ডোমেনের জন্য অনেকগুলি প্লাগইন / লাইব্রেরি (কিছু বিনামূল্যে, কিছু বাণিজ্যিক) রয়েছে।

এছাড়াও অসুবিধা রয়েছে। সফ্টওয়্যারটির যে কোনও অংশের সাথে একক ব্যবসায়ীর জন্য ব্যয়গুলি অপরিহার্য নয় (যদিও মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিওর এন্ট্রি-লেভেল সংস্করণ বিনামূল্যে সরবরাহ করে) । মাইক্রোসফ্ট সরঞ্জামগুলি একে অপরের সাথে ভালভাবে খেলে তবে বাহ্যিক কোডের সাথে কম ভালভাবে সংহত করে। ভিজ্যুয়াল স্টুডিওকে মাইক্রোসফ্ট উইন্ডোজেও চালানো উচিত, যা যুক্তিযুক্তভাবে একটি সমমানের লিনাক্স সার্ভারের তুলনায় অনেক কম পারফরম্যান্সযুক্ত যা সর্বোত্তমভাবে সুরক্ষিত।

ম্যাটল্যাবের কয়েকটি মূল প্লাগইনের অভাব রয়েছে যেমন ইন্টারেক্টিভ ব্রোকার্স এপিআইয়ের চারপাশে একটি ভাল আবরণ, উচ্চ-পারফরম্যান্স অ্যালগরিদমিক ট্রেডিংয়ের জন্য অনুকূল কয়েকটি ব্রোকারের মধ্যে একটি। মালিকানাধীন পণ্যগুলির প্রধান সমস্যা হ'ল উত্স কোডের অভাবে। এর অর্থ হ'ল যদি আল্ট্রা পারফরম্যান্স সত্যই প্রয়োজন হয় তবে এই উভয় সরঞ্জামই অনেক কম আকর্ষণীয় হবে।

ওপেন সোর্স সরঞ্জামগুলি কিছু সময়ের জন্য শিল্পের গ্রেড হয়েছে। বিকল্প সম্পদ স্পেসের বেশিরভাগই উচ্চ-পারফরম্যান্স উত্পাদন ভূমিকায় ওপেন-সোর্স লিনাক্স, মাইএসকিউএল / পোস্টগ্রিএসকিউএল, পাইথন, আর, সি ++ এবং জাভা ব্যাপকভাবে ব্যবহার করে। তবে, তারা এই ডোমেইনে সীমাবদ্ধ নয়। পাইথন এবং আর, বিশেষত, প্রায় কোনও ধরণের ডেটা বিশ্লেষণের জন্য বিস্তৃত সংখ্যাসূচক গ্রন্থাগার রয়েছে, প্রায়শই সংকলিত ভাষার সাথে তুলনীয় এক্সিকিউশন গতিতে, নির্দিষ্ট সতর্কতা সহ।

ব্যাখ্যা করা ভাষা ব্যবহারের প্রধান সুবিধা হ'ল বিকাশের সময়ের গতি। পাইথন এবং আর এর অনুরূপ কার্যকারিতা অর্জনের জন্য কোডের অনেক কম লাইন (এলওসি) প্রয়োজন, মূলত বিস্তৃত গ্রন্থাগারগুলির কারণে। তদতিরিক্ত, তারা প্রায়শই ইন্টারেক্টিভ কনসোল ভিত্তিক বিকাশের অনুমতি দেয়, দ্রুত পুনরাবৃত্তিমূলক বিকাশ প্রক্রিয়া হ্রাস করে।

ডেভেলপার হিসাবে সময় অত্যন্ত মূল্যবান এবং এক্সিকিউশন গতি প্রায়শই কম (এইচএফটি স্পেসে ব্যতীত), এটি একটি ওপেন সোর্স প্রযুক্তি স্ট্যাককে বিস্তৃত বিবেচনা করার মতো। পাইথন এবং আর তাদের জনপ্রিয়তার কারণে উল্লেখযোগ্য বিকাশ সম্প্রদায়ের মালিক এবং অত্যন্ত ভালভাবে সমর্থিত। ডকুমেন্টেশন দুর্দান্ত এবং বাগগুলি (কমপক্ষে মূল লাইব্রেরির জন্য) বিরল।

ওপেন সোর্স সরঞ্জামগুলি প্রায়শই একটি উত্সর্গীকৃত বাণিজ্যিক সহায়তা চুক্তির অভাবের কারণে ভোগ করে এবং কম ক্ষমাশীল ইউজার ইন্টারফেসের সাথে সিস্টেমগুলিতে অনুকূলভাবে চালিত হয়। একটি সাধারণ লিনাক্স সার্ভার (যেমন উবুন্টু) প্রায়শই সম্পূর্ণ কমান্ড-লাইন ভিত্তিক হবে। এছাড়াও, পাইথন এবং আর নির্দিষ্ট কার্য সম্পাদনের জন্য ধীর হতে পারে। কার্য সম্পাদনের গতি উন্নত করার জন্য সি ++ এর সাথে সংহত করার জন্য প্রক্রিয়া রয়েছে, তবে এটি মাল্টি-ভাষা প্রোগ্রামিংয়ের কিছু অভিজ্ঞতা প্রয়োজন।

যদিও মালিকানাধীন সফ্টওয়্যার নির্ভরতা / সংস্করণ সমস্যা থেকে মুক্ত নয় তবে এই জাতীয় পরিবেশে ভুল লাইব্রেরি সংস্করণগুলির সাথে মোকাবিলা করা অনেক কম সাধারণ। লিনাক্সের মতো ওপেন সোর্স অপারেটিং সিস্টেমগুলি পরিচালনা করা আরও জটিল হতে পারে।

আমি এখানে আমার ব্যক্তিগত মতামতকে ঝুঁকিতে ফেলব এবং বলব যে আমি আমার সমস্ত ট্রেডিং সরঞ্জামগুলি ওপেন সোর্স প্রযুক্তির সাথে তৈরি করি। বিশেষত আমি ব্যবহার করিঃ উবুন্টু, মাইএসকিউএল, পাইথন, সি ++ এবং আর। পরিপক্কতা, সম্প্রদায়ের আকার, সমস্যা দেখা দিলে গভীরভাবে খনন করার ক্ষমতা এবং কম মোট ব্যয় মালিকানা (টিসিও) মালিকানাধীন জিইউআইগুলির সরলতা এবং সহজ ইনস্টলেশনকে অতিক্রম করে। এটি বলে, মাইক্রোসফ্ট ভিজ্যুয়াল স্টুডিও (বিশেষত সি ++ এর জন্য) একটি দুর্দান্ত ইন্টিগ্রেটেড ডেভেলপমেন্ট এনভায়রনমেন্ট (আইডিই) যা আমি অত্যন্ত সুপারিশ করব।

ব্যাটারি অন্তর্ভুক্ত?

এই বিভাগের শিরোনামে ভাষার out of the box ক্ষমতা উল্লেখ করা হয়েছে - এতে কোন লাইব্রেরি রয়েছে এবং সেগুলি কতটা ভাল? এখানেই পরিপক্ক ভাষাগুলির নতুন রূপগুলির তুলনায় একটি সুবিধা রয়েছে। সি ++, জাভা এবং পাইথন এখন নেটওয়ার্ক প্রোগ্রামিং, এইচটিটিপি, অপারেটিং সিস্টেম ইন্টারঅ্যাকশন, জিইউআই, নিয়মিত অভিব্যক্তি (রেজেক্স), পুনরাবৃত্তি এবং মৌলিক অ্যালগরিদমের জন্য বিস্তৃত লাইব্রেরি রয়েছে।

সি++ এর স্ট্যান্ডার্ড টেমপ্লেট লাইব্রেরি (এসটিএল) এর জন্য বিখ্যাত যা উচ্চ-কার্যকারিতা ডেটা স্ট্রাকচার এবং অ্যালগরিদমের সমৃদ্ধ বিনামূল্যে ধারণ করে। পাইথন প্রায় অন্য যে কোনও ধরণের সিস্টেম / প্রোটোকলের (বিশেষত ওয়েব) সাথে যোগাযোগ করতে সক্ষম হওয়ার জন্য পরিচিত, বেশিরভাগই এর নিজস্ব স্ট্যান্ডার্ড লাইব্রেরির মাধ্যমে। আর এর মধ্যে প্রচুর পরিসংখ্যানগত এবং অর্থনীতিবিদ্যা সরঞ্জাম রয়েছে, যখন ম্যাটল্যাব যে কোনও সংখ্যাসূচক রৈখিক বীজগণিত কোডের জন্য অত্যন্ত অনুকূলিত (যা পোর্টফোলিও অপ্টিমাইজেশন এবং ডেরিভেটিভ মূল্য নির্ধারণে পাওয়া যেতে পারে, উদাহরণস্বরূপ) ।

স্ট্যান্ডার্ড লাইব্রেরির বাইরে, সি ++ বুস্ট লাইব্রেরি ব্যবহার করে, যা স্ট্যান্ডার্ড লাইব্রেরির অনুপস্থিত অংশগুলি পূরণ করে। প্রকৃতপক্ষে, বুস্টের অনেকগুলি অংশ এটিকে টিআর 1 স্ট্যান্ডার্ডে তৈরি করেছে এবং পরবর্তীকালে ল্যাম্বডা এক্সপ্রেশন এবং সমান্তরালতার জন্য নেটিভ সমর্থন সহ সি ++ 11 স্পেসিফিকেশনে উপলব্ধ।

পাইথন উচ্চ কার্যকারিতা NumPy / SciPy / পান্ডা ডেটা বিশ্লেষণ লাইব্রেরি সমন্বয় আছে, যা অ্যালগরিদমিক ট্রেডিং গবেষণার জন্য ব্যাপকভাবে গ্রহণযোগ্যতা অর্জন করেছে। উপরন্তু, প্রধান সম্পর্কের ডাটাবেসগুলিতে অ্যাক্সেসের জন্য উচ্চ-কার্যকারিতা প্লাগইন রয়েছে, যেমন মাইএসকিউএল ++ (মাইএসকিউএল / সি ++), জেডিবিসি (জাভা / ম্যাটল্যাব), মাইএসকিউএলডিবি (মাইএসকিউএল / পাইথন) এবং সাইকোপজি 2 (পোস্টগ্রেএসকিউএল / পাইথন) । পাইথন এমনকি আরপি প্লাগইন মাধ্যমে আর এর সাথে যোগাযোগ করতে পারে!

প্রাথমিক গবেষণা এবং নকশার পর্যায়ে একটি ট্রেডিং সিস্টেমের একটি প্রায়শই উপেক্ষা করা দিক হ'ল ব্রোকারের এপিআইয়ের সাথে সংযোগ। বেশিরভাগ এপিআইগুলি নেটিভভাবে সি ++ এবং জাভা সমর্থন করে তবে কিছু সরাসরি বা সি ++ এপিআইগুলিতে সম্প্রদায়-প্রদত্ত মোড়ক কোড সহ সি # এবং পাইথনকেও সমর্থন করে। বিশেষত, ইন্টারেক্টিভ ব্রোকারগুলি আইবিপিআই প্লাগইনটির মাধ্যমে সংযুক্ত করা যেতে পারে। যদি উচ্চ-কার্যকারিতা প্রয়োজন হয় তবে ব্রোকারগুলি ফিক্স প্রোটোকল সমর্থন করবে।

সিদ্ধান্ত

যেমনটি এখন স্পষ্ট, একটি অ্যালগরিদমিক ট্রেডিং সিস্টেমের জন্য প্রোগ্রামিং ভাষা নির্বাচন করা সহজ নয় এবং গভীর চিন্তাভাবনা প্রয়োজন। প্রধান বিবেচনাগুলি হ'ল কর্মক্ষমতা, বিকাশের সহজতা, স্থিতিস্থাপকতা এবং পরীক্ষা, উদ্বেগের বিভাজন, পরিচিততা, রক্ষণাবেক্ষণ, উত্স কোডের উপলভ্যতা, লাইসেন্সিং ব্যয় এবং লাইব্রেরির পরিপক্কতা।

একটি পৃথক আর্কিটেকচারের সুবিধা হ'ল এটি প্রয়োজনীয়তা পরিবর্তনের সাথে সাথে একটি ট্রেডিং স্ট্যাকের বিভিন্ন দিকের জন্য ভাষাগুলি প্লাগ ইন করার অনুমতি দেয়। একটি ট্রেডিং সিস্টেম একটি বিকশিত সরঞ্জাম এবং এটি সম্ভবত যে কোনও ভাষা পছন্দগুলি এর সাথে বিকশিত হবে।


আরো