সি++ একটি খুব কঠিন প্রোগ্রামিং ভাষা। কঠিন অংশটি মূলত গভীরভাবে শিখতে হয়, কিন্তু যদি আপনি কেবল সি++ দ্বারা কৌশল যুক্তিবিজ্ঞান লিখেন, তবে এটি খুব জটিল কৌশল না হওয়া পর্যন্ত খুব গভীর জ্ঞানের প্রয়োজন হবে না। কিছু মৌলিক শিখতে যথেষ্ট হবে।
কিছু লোকের জন্য সি ++ ব্যবহার করার অর্থ এই নয় যে এটি প্রত্যেকের ব্যবহারের জন্য উপযুক্ত। কারণটি হ'ল প্রোগ্রামিং ভাষাটি কেবল একটি সরঞ্জাম। পরিমাণগত ট্রেডিংয়ে, সি ++ প্রয়োজনীয় নয়। আপনি যদি পাইথন বা সি ++ এর মতো স্ক্রিপ্ট প্রোগ্রামিং ভাষা ব্যবহার করতে পছন্দ করেন তবে আপনি অনেক সময় এবং শক্তি সাশ্রয় করতে পারেন, যা কৌশল নকশায় মনোনিবেশ করতে ব্যবহার করা যেতে পারে।
কিন্তু পরিমাণগত বিনিয়োগ প্রতিষ্ঠানগুলির মধ্যে, বেশিরভাগ অন্তর্নিহিত পরিমাণগত ট্রেডিং সিস্টেম সফ্টওয়্যার সি ++ দ্বারা লেখা হয়েছিল, কারণ এর অনন্য ভাষা নির্দিষ্টতা এটিকে অন্যান্য ভাষার তুলনায় কিছু দিক থেকে, বিশেষত সংখ্যাসূচক গণনার তুলনায় আরও দক্ষ এবং দ্রুত করে তোলে। এর অর্থ এই যে সি ++ আর্থিক ডেরিভেটিভ এবং উচ্চ-ফ্রিকোয়েন্সি ট্রেডিংয়ের জন্য আরও উপযুক্ত। সুতরাং, আপনি যদি দ্রুত প্রোগ্রামিং ভাষা ব্যবহার করতে চান তবে এটি অবশ্যই সি ++ হতে হবে।
এই বিভাগের বিষয়বস্তু দ্রুত বুঝতে সবার সাহায্য করার জন্য, সি ++ ভাষা প্রবর্তনের আগে, আসুন সি ++ দ্বারা লিখিত কৌশলটি দেখুন, যাতে আপনি এই বিভাগে নামক ধারণাটির প্রাথমিক বোঝা পান। আসুন উদাহরণস্বরূপ সহজতম এমএসিডি কৌশলটি নিইঃ
আমরা সকলেই জানি যে এমএসিডি এর দুটি বক্ররেখা রয়েছে, যথা দ্রুত লাইন এবং ধীর লাইন, আসুন এই দুটি লাইনের উপর ভিত্তি করে একটি ট্রেডিং লজিক ডিজাইন করি। যখন দ্রুত লাইনটি ধীর লাইনটি অতিক্রম করে, দীর্ঘ অবস্থান খুলুন; যখন দ্রুত লাইনটি ধীর লাইনটি অতিক্রম করে, তখন সংক্ষিপ্ত অবস্থান খুলুন। সম্পূর্ণ কৌশল লজিক হলঃ
লং পজিশন ওপেনঃ যদি বর্তমানে কোন পজিশন না থাকে এবং দ্রুত লাইনটি ধীর লাইনের চেয়ে বড় হয়।
শর্ট পজিশন খোলাঃ যদি বর্তমানে কোন পজিশন না থাকে এবং দ্রুত লাইনটি ধীর লাইনের চেয়ে কম হয়।
দীর্ঘ অবস্থান বন্ধ করুনঃ যদি বর্তমানে দীর্ঘ অবস্থান ধরে রাখা হয়, এবং দ্রুত লাইনটি ধীর লাইনের চেয়ে কম হয়।
close short position: যদি বর্তমান হোল্ডিং শর্ট পজিশন থাকে এবং দ্রুত লাইনটি ধীর লাইনের চেয়ে বড় হয়।
উপরের কৌশল লজিক লিখতে সি++ ভাষা ব্যবহার করে, এরকম হবেঃ
double position = 0; //Position status parameter, the default position is 0
uint64_t lastSignalTime = 0; // Last signal trigger time
bool onTick(string symbol) { // onTick function, inside the function is the strategy logic
auto ct = exchange.SetContractType(symbol); // set the trading variety
if (ct == false) { // if setting the trading variety is not successful
return false; // return false
}
auto r = exchange.GetRecords(); // get the k line array
if (!r.Valid || r.sizeO < 20) { // if get the k line array is not successful or the number of k line is less than 20
return false; // return false
}
auto signalTime = r[r.size() - 2].Time; // get the previous k line time
if (signalTime <= lastSignalTime) { // if the previous k line time is less than or equal to the last trigger signal time
return false; // return false
}
auto macd = TA.MACD(r); // calculate the MACD indicator
auto slow = macd[0][macd[0].size() - 2]; // get the previous k line MACD value
auto fast = macd[l][macd[l].size() - 2]; // get the previous k line MACD average value
string action; // define a string variable action
if (fast >= slow && position <= 0) { // if the previous k line macd value is greater than or equal to the previous k line macd average value, and there are no long position holding
action = "buy"; // assign buy to the variable action
} else if (fast <= slow && position >= 0) { // if the previous k line macd value is less than or equal to the previous k line macd average value, and there are no short position holding
action = "sell"; // assign sell to the variable action
}
if (actton.size() > 0) { // If there are orders for placing order
If (position != 0) { // If there are holding position
ext::Trade("cover", symbol); // call the C++ trading class library and close all position
}
position = ext::Trade(action, symbol, 1); // call the C++ trading class library, placing orders according the direction of variable "action", and renew the position status
lastSignalTime = signalTime; // reset the time of last trigger signal
}
return true; // return true
}
void main() { // program starts from here
while (true) { // enter the loop
if (exchange.IO("status") == 0) { // if the connection with the exchange is not successful
Sleep(1000); // pause for 1 second
continue; // skip this loop, continue to the next loop
}
if (!onTtck("this_week")) { // if the connection is ok, enter the if loop and start to execute the onTick function
Sleep(1000); // pause for 1 second
}
}
}
উপরের কোডটি সি++ তে লেখা একটি সম্পূর্ণ পরিমাণগত ট্রেডিং কৌশল। এটি বাস্তব বাজারে প্রয়োগ করা যেতে পারে এবং স্বয়ংক্রিয়ভাবে অর্ডার স্থাপন করবে। কোডের আকারের দিক থেকে, এটি অন্যান্য ভাষার তুলনায় আরও জটিল। কারণ সি++ ভাষা প্রধানত এফএমজেড কোয়ান্ট প্ল্যাটফর্মে উচ্চ-ফ্রিকোয়েন্সি কৌশল বিকাশের জন্য।
যদিও কোডিং অংশটি আগের তুলনায় কিছুটা বেশি, ইতিমধ্যে অনেক অপ্রয়োজনীয় ট্রেডিং ক্লাস লাইব্রেরি হ্রাস করা হয়েছে, এবং বেশিরভাগ অন্তর্নিহিত সিস্টেম স্তরের প্রসেসিং এফএমজেড কোয়ান্ট প্ল্যাটফর্ম দ্বারা প্যাকেজ করা হয়েছে।
নতুনদের জন্য, পুরো কৌশলটির নকশা প্রক্রিয়াটি অপরিবর্তিত থাকেঃ বাজারের বৈচিত্র্য নির্ধারণ, কে-লাইন ডেটা প্রাপ্তি, অবস্থান তথ্য প্রাপ্তি, ট্রেডিং লজিক গণনা এবং অর্ডার স্থাপন।
শনাক্তকারী হল নাম। সি++-এ ভেরিয়েবল এবং ফাংশন নামগুলি কেস-সেনসিটিভ, যার অর্থ ভেরিয়েবল নাম পরীক্ষা এবং ভেরিয়েবল নাম পরীক্ষা দুটি ভিন্ন ভেরিয়েবল। শনাক্তকারীর প্রথম অক্ষরটি অবশ্যই একটি অক্ষর হতে হবে, একটি আন্ডারস্কোর
mohd zara abc move_name a_123
myname50 _temp j a23b9 retVal
মন্তব্যগুলির মধ্যে এক-লাইন মন্তব্য এবং ব্লক-স্তরের মন্তব্য অন্তর্ভুক্ত রয়েছে। এক-লাইন মন্তব্য দুটি স্ল্যাশ দিয়ে শুরু হয়, একটি স্ল্যাশ এবং একটি নক্ষত্র দিয়ে শুরু হয় (/* ), একটি নক্ষত্র এবং একটি স্ল্যাশ (*/ ) দিয়ে শেষ হয়, যেমনটি নিচে দেখানো হয়েছেঃ
// this is a single-line comment
/*
* this is a multiple-line comment
* block-level comments
*
*/
C++ এ, সেমিকোলন হল স্ট্রেশন টার্মিনেটর। অর্থাৎ, প্রতিটি স্ট্রেশনকে সেমিকোলন দিয়ে শেষ করতে হবে। এটি একটি যৌক্তিক সত্তার শেষ নির্দেশ করে। উদাহরণস্বরূপ, এখানে তিনটি ভিন্ন স্ট্রেশন রয়েছেঃ
x = y;
y = y + 1;
add(x, y);
একটি ভেরিয়েবল একটি অপারেশনাল স্টোরেজ এলাকা। সি ++ এ একটি ভেরিয়েবল সংজ্ঞায়িত করার জন্য, আপনাকে প্রথমে ভেরিয়েবলের প্রকারটি সংজ্ঞায়িত করতে হবে। পরিমাণগত ট্রেডিং কৌশলগুলির বিকাশে, আমরা সাধারণত ব্যবহার করা প্রকারগুলি হ'লঃ পূর্ণসংখ্যা (int ), ভাসমান (ডাবল ), স্ট্রিং (স্ট্রিং) এবং স্বয়ংক্রিয় উদ্ভূত প্রকার (অটো )).
পূর্ণসংখ্যা পূর্ণসংখ্যা হিসাবে বোঝা যায়; ভাসমান বিন্দু প্রকারগুলি দশমিক বিন্দু সহ সংখ্যা হিসাবে বোঝা যায়; স্ট্রিংগুলি আক্ষরিক, ইংরেজি বা অন্যান্য ভাষার অক্ষর হতে পারে।
কখনও কখনও যখন আমরা একটি এপিআই কল করি, কিন্তু আমরা জানি না যে এই এপিআই আমাদের কী ধরণের ডেটা ফিরিয়ে দেবে, তাই স্বয়ংক্রিয় প্রাপ্তি টাইপ (অটো) ব্যবহার করে আমাদের স্বয়ংক্রিয়ভাবে ডেটা টাইপ নির্ধারণ করতে সহায়তা করবে। নীচে দেখানো হয়েছেঃ
int numbers = 10; // use int to define a integer variable and assign 10 to this variable
double PI = 3.14159; // use double to define a float variable and assign 10 to this variable
string name = "FMZ Quant"; // use string to define a string variable and assign "FMZ Quant" to this variable
auto bar = exchange.GetRecords(); // use auto to define a variable (automatic derivation type) and assign k line array to this variable
একটি অ্যারে হ'ল ডেটা সঞ্চয় করার জন্য একটি কন্টেইনার। একটি সি ++ অ্যারে একটি নির্দিষ্ট আকারের সাথে একই ধরণের উপাদানগুলির একটি স্থির-ক্রম সংগ্রহ সংরক্ষণ করতে পারে। সুতরাং সি ++ এ, একটি অ্যারে ঘোষণা করার জন্য, আপনাকে উপাদানটির ধরণ এবং উপাদানগুলির সংখ্যা নির্দিষ্ট করতে হবে। সমস্ত অ্যারেগুলির প্রথম উপাদান হিসাবে একটি সূচক 0 রয়েছে। অ্যারেতে প্রথম ডেটা " [0] " পেতে, দ্বিতীয় ডেটা " [1] " এবং তাই, নিম্নরূপ দেখায়ঃ
// define a array, array name is balance. there are 5 floating(double) type data inside it
double balance[5] = {1000.0, 2.0, 3.4, 7.0, 50.0};
double salary = balance[0]; // get the first data in the array, the result is : 1000.0
double salary = balance[1]; // get the second data in the array, the result is : 2.0
একটি ফাংশন হল এমন একটি সেট স্ট্রেশন যা একসাথে একটি কাজ সম্পাদন করে। একটি ফাংশন ঘোষণার মধ্যে রয়েছেঃ ফাংশনের নাম, রিটার্নের ধরণ এবং পরামিতিগুলি। রিটার্ন টাইপ হ'ল যখন আমি এই ফাংশনটি কল করি তখন ফাংশনটি চালানো হয় তখন ফিরে আসা ডেটা টাইপ; প্যারামিটারটি ঐচ্ছিক, এবং ফাংশনটিতে কোনও পরামিতি থাকতে পারে না। যখন ফাংশনটি কল করা হয়, আপনি ফাংশনে একটি প্যারামিটারও পাস করতে পারেন। নিম্নলিখিত উদাহরণটি দেখুনঃ
// create a function called "max"
// when this function is called, it returns the int type data
// this function has 2 parameters, and they both are int type
// this function is for passing 2 int type numbers, and return the bigger one
int max(int num1, int num2) {
int result; // define a int variable result
if (num1 > num2) // if the num1 > num2
result = num1; // assign the value of num1 to result
else // otherwise
result = num2; // assign the value of num2 to result
return result; // return the value of result
}
পরিমাণগত ট্রেডিং কৌশল লেখার জন্য সি ++ ব্যবহার করে, তিনটি সাধারণভাবে ব্যবহৃত অপারেটর রয়েছেঃ গাণিতিক অপারেটর, সম্পর্কের অপারেটর, যৌক্তিক অপারেটর এবং বরাদ্দ অপারেটর। গাণিতিক অপারেটর হল যোগ, বিয়োগ, গুণন এবং বিভাজনের গাণিতিক অপারেশন। সম্পর্কের অপারেটর দুটি মান ছোট বা বড় কিনা তা তুলনা করতে পারে। যৌক্তিক অপারেটরগুলির মধ্যে প্রধানত রয়েছেঃ যৌক্তিক AND, যৌক্তিক OR এবং যৌক্তিক নন। বরাদ্দ অপারেটরটি আমরা আগে আলোচনা করেছি এমন পরিবর্তনশীল বরাদ্দ। নীচে দেখানো হয়েছেঃ
int main() {
// arithmetic operator
int a = 10;
int b = 5;
a + b; // the result is 15
a - b; // the result is 5
a * b; // the result is 50
a / b; // the result is 2
a % b; // the result is 0
a++; // the result is 11
a--; // the result is 9
// relational operators
a == b; // the result is false
a != b; // the result is true
a >= b; // the result is true
a <= b; // the result is false
logical operators
true && true // the result is true
true && false // the result is false
false || false // the result is false
true || false // the result is true
!(true) // the result is false
!(false) // the result is true
return 0;
}
যদি একটি 100*(10-1)/(10+5) অভিব্যক্তি থাকে, তাহলে প্রোগ্রামটি প্রথমে কোন ধাপ গণনা করে? মাধ্যমিক বিদ্যালয়ের গণিত আমাদের বলেঃ যদি এটি একই স্তরের অপারেশন হয়, তবে এটি সাধারণত বাম থেকে ডানে গণনা করা হয়; যদি সংযোজন এবং বিয়োগ, এবং গুণ এবং বিভাজন থাকে তবে প্রথমে গুণ এবং বিভাজন গণনা করুন, তারপরে যোগ করুন এবং বিয়োগ করুন; যদি বন্ধনী থাকে তবে প্রথমে বন্ধনীগুলির অভ্যন্তর গণনা করুন; যদি অপারেশন আইনটি পূরণ করা হয় তবে গণনার জন্য গণনার আইনটি ব্যবহার করা যেতে পারে। নীচে দেখানো হিসাবে সি ++ এর জন্য উপরের একই নীতিঃ
auto num = 100*(10-1)/(10+5); // the value of num is 60
1 > 2 && (2 > 3 || 3 < 5); // the result is : false
1 > 2 && 2 > 3 || 3 < 5; // the result is : true
সাধারণত যখন আমরা কোড লিখছি, আমাদের সবসময় বিভিন্ন সিদ্ধান্তের জন্য বিভিন্ন ক্রিয়া সম্পাদন করতে হয়। আমরা আমাদের কোডে এই কাজটি সম্পন্ন করতে শর্তাধীন বিবৃতি ব্যবহার করতে পারি। C++ এ আমরা নিম্নলিখিত শর্তাধীন বিবৃতি ব্যবহার করতে পারিঃ
যদি বিবৃতি - এই বিবৃতিটি শুধুমাত্র যদি নির্দিষ্ট শর্তটি সত্য হয় তবে কোড চালানোর জন্য ব্যবহার করুন
If...else statement - execute code if the specified condition is true, the other code executed when the condition is false. যদি...else স্ট্রিং - নির্দিষ্ট শর্তটি সত্য হলে কোড কার্যকর করুন, অন্য কোডটি কার্যকর করুন যখন শর্তটি মিথ্যা হয়
যদি... অন্যথায় যদি... অন্যথায় বিবৃতি - এই বিবৃতি ব্যবহার একাধিক কোড ব্লক এক নির্বাহ করতে নির্বাচন করুন
সুইচ স্ট্র্যাটেজ - এই স্ট্র্যাটেজটি ব্যবহার করে একাধিক কোড ব্লকগুলির মধ্যে একটি নির্বাচন করুন
এই কমান্ডটি শুধুমাত্র যদি নির্দিষ্ট শর্তটি সত্য হয় তবে কোডটি কার্যকর করে। দয়া করে একটি ছোটখাট যদি ব্যবহার করুন। একটি বড় হাতের অক্ষর (IF) ব্যবহার করলে একটি C++ ত্রুটি উৎপন্ন হবে! নীচে দেখানো হয়েছেঃ
// grammar
if (condition) {
//execute code only if the condition is true
}
//example
if (time<20) { // if current time is less than 20:00
x = "Good day"; // when the time is less that 20:00, assign the "good day" to x
}
নির্দিষ্ট শর্ত সত্য হলে কোড চালানো হয়, অন্য কোডটি যখন শর্ত মিথ্যা হয় তখন চালানো হয়, নীচে দেখানো হিসাবেঃ
//grammar
if (condition) {
// execute code if the condition is true
} else {
// the other code executed when the condition is false
}
//example
if (time<20) { // if current time is less than 20:00
x = "Good day"; // when the time is less that 20:00, assign the "good day" to x
} else { // otherwise
x = "Good evening"; // assign the "Good evening" to x
}
চালানোর জন্য একাধিক কোড ব্লক এক নির্বাচন করতে এই বিবৃতি ব্যবহার করুন
switch (condition)
{
case 1: // code to be executed if condition = 1;
break;
case 2: // code to be executed if condition = 2;
break;
default: // code to be executed if condition doesn't match any cases
}
ফর লুপ বারবার কোড ব্লকের N বার এক্সিকিউট করতে পারে এবং এর এক্সিকিউশন ফ্লো এরকম (নীচে দেখানো হয়েছে):
for (int a = 10; a < 20; a++){
// code block
}
ধাপ ১ঃ int a = 0 চালান এবং শুধুমাত্র একবার চালান। এর উদ্দেশ্য হল একটি পূর্ণসংখ্যা ভেরিয়েবল ঘোষণা করা এবং এটিকে for লুপ নিয়ন্ত্রণের জন্য 0 এ শুরু করা।
ধাপ ২ঃ a<২০ চালান। যদি এটি সত্য হয়, তাহলে লাইন ২ এর কোড ব্লকটি চালান।
ধাপ ৩ঃ a++ চালান, a++ চালানোর পর a ১১ হয়ে যায়।
ধাপ ৪ঃ a<২০ আবার চালান, এবং দ্বিতীয়, তৃতীয়, এবং চতুর্থ ধাপগুলি বারবার চালানো হবে। a<২০ মিথ্যা না হওয়া পর্যন্ত, যদি এটি মিথ্যা হয়, লাইন ২ এর কোড ব্লকটি চালানো হবে না, এবং পুরো ফর লুপ শেষ।
আমরা সবাই জানি যে বাজার ক্রমাগত পরিবর্তিত হচ্ছে। আপনি যদি সর্বশেষতম কে-লাইন অ্যারে পেতে চান তবে আপনাকে ক্রমাগত একই কোডটি বারবার চালাতে হবে। তারপরে ওয়েলিং লুপ ব্যবহার করা সেরা পছন্দ। যতক্ষণ নির্দিষ্ট শর্তটি সত্য, লুপ সর্বশেষতম কে-লাইন অ্যারে ডেটা পেতে থাকবে।
void main() {
auto ct = exchange.SetContractType(symbol); //set the trading variety
while(true) {
auto r = exchange.GetRecords(); // constantly getting k-line arrays
}
}
লুপের পূর্ব শর্ত থাকে। শুধুমাত্র যখন এই পূর্ব শর্ত "true" হয়, তখন লুপ বারবার কিছু করতে শুরু করবে, যতক্ষণ পর্যন্ত পূর্ব শর্ত "false" না হয়, লুপ শেষ হবে। কিন্তু বিরতি বিবৃতি ব্যবহার করে লুপ চালানোর সময় অবিলম্বে লুপ থেকে লাফিয়ে উঠতে পারে;
# including <iostream>
using namespace std;
int main() {
for(int a = 0; a < 5; a++) {
if(a == 2) break;
cout << a << endl;
}
return 0;
}
// print out : 0, 1
ক্রমাগত বিবৃতিটিও লুপ থেকে বেরিয়ে আসে, তবে এটি পুরো লুপ থেকে বেরিয়ে আসে না। পরিবর্তে, একটি লুপকে বিরতি দিন এবং পরবর্তী লুপে চালিয়ে যান। নীচে দেখানো হয়েছে, যখন a সমান 2, লুপটি বিরতি দেওয়া হয়, এবং পরবর্তী লুপটি পুরো লুপ থেকে বেরিয়ে আসার জন্য লুপের পূর্ব শর্ত "মিথ্যা" না হওয়া পর্যন্ত অব্যাহত থাকে।
# including <iostream>
using namespace std;
int main() {
for(int a = 0; a < 5; a++) {
if(a == 2) continue;
cout << a << endl;
}
return 0;
}
// print out : 0, 1, 3, 4
রিটার্ন স্ট্রেশন ফাংশনটির এক্সিকিউশন শেষ করে এবং ফাংশনের মান ফেরত দেয়। রিটার্ন স্ট্রেশনটি শুধুমাত্র ফাংশনের শরীরে উপস্থিত হতে পারে এবং কোডের অন্য কোনও স্থান সিনট্যাক্স ত্রুটির কারণ হবে!
# including <iostream>
using namespace std;
int add(int num1, int num2) {
return num1 + num2; // The add function returns the sum of two parameters
}
int main()
{
cout << add(5, 10); // call the add function, and print out the result:50
return 0;
}
এফএমজেড কোয়ান্ট প্ল্যাটফর্মে, সি ++ দ্বারা একটি কৌশল লিখতে খুব সুবিধাজনক হবে। এফএমজেড কোয়ান্টের অনেকগুলি আনুষ্ঠানিকভাবে অন্তর্নির্মিত স্ট্যান্ডার্ড কৌশল ফ্রেমওয়ার্ক এবং ট্রেডিং ক্লাস লাইব্রেরি রয়েছে, যেমন নিম্নলিখিতঃ
bool onTick() { //onTick function
// strategy logic
}
void main() { // program starts from here
while (true) { // enter the loop
if (exchange.IO("status") == 0) { // if the exchange connection is not stable
sleep(1000); // pause for 1 second
continue; // skip this loop, enter the next loop
}
if (!onTick()) { // if the exchange connection is stable, enter this if statement, start to execute the onTick function
sleep(1000);// pause for 1 second
}
}
}
যেমন উপরে দেখানো হয়েছে, এটি একটি স্ট্যান্ডার্ড কৌশল কাঠামো, এবং এই ফর্ম্যাটগুলি স্থির। একটি কৌশল লেখার জন্য কাঠামোটি ব্যবহার করুন। আপনাকে কেবল দ্বিতীয় লাইন থেকে কৌশল যুক্তি লিখতে হবে। অন্যান্য বাজার অধিগ্রহণ এবং অর্ডার প্রক্রিয়াকরণ কাঠামো এবং ট্রেডিং ক্লাস লাইব্রেরি দ্বারা পরিচালিত হয়, আপনাকে কেবল কৌশল বিকাশে মনোনিবেশ করতে হবে।
উপরের C ++ ভাষা দ্রুত শুরু বিষয়বস্তু. আপনি আরো জটিল কৌশল লিখতে প্রয়োজন হলে, দয়া করে FMZ Quant প্ল্যাটফর্ম C ++ ভাষা API নথিপত্র পড়ুন, অথবা সরাসরি লেখার সেবা সম্পর্কে অফিসিয়াল গ্রাহক সেবা পরামর্শ
পরিমাণগত ট্রেডিং এর মূল চাবিকাঠি হল ট্রেডিং কৌশল, ট্রেডিং সরঞ্জাম (প্রোগ্রামিং ভাষা) নয়। পরবর্তী বিভাগে, আসুন একটি কার্যকর সি++ ট্রেডিং কৌশল লিখুন। এখনও উদাহরণ হিসাবে সহজতম প্রযুক্তিগত বিশ্লেষণ সূচক ব্যবহার করে।