سی ++ ایک بہت ہی مشکل پروگرامنگ زبان ہے۔ مشکل حصہ بنیادی طور پر گہرائی میں سیکھنا ہے ، لیکن اگر آپ صرف سی ++ کے ذریعہ حکمت عملی کی منطق لکھتے ہیں تو ، اس میں زیادہ گہری معلومات کی ضرورت نہیں ہوگی ، جب تک کہ یہ بہت پیچیدہ حکمت عملی نہ ہو۔ کچھ بنیادی باتیں سیکھنا کافی ہوگا۔
کچھ لوگوں کے لئے سی ++ کا استعمال کرنے کا مطلب یہ نہیں ہے کہ یہ ہر ایک کے لئے استعمال کرنے کے لئے موزوں ہے۔ وجہ یہ ہے کہ پروگرامنگ زبان صرف ایک ٹول ہے۔ مقداری تجارت میں ، سی ++
لیکن مقداری سرمایہ کاری کے اداروں کے درمیان ، بنیادی مقداری تجارتی نظام کا بیشتر سافٹ ویئر سی ++ میں لکھا گیا تھا ، کیونکہ اس کی زبان کی منفرد خصوصیت اسے کچھ پہلوؤں میں ، خاص طور پر عددی حساب کتاب میں ، دیگر زبانوں سے زیادہ موثر اور تیز تر بناتی ہے۔ اس کا مطلب یہ بھی ہے کہ سی ++ مالی مشتقات اور اعلی تعدد کی تجارت کے لئے زیادہ موزوں ہے۔ لہذا ، اگر آپ تیز تر پروگرامنگ زبان استعمال کرنا چاہتے ہیں تو ، یہ سی ++ ہونا ضروری ہے۔
اس سیکشن کے مواد کو تیزی سے سمجھنے میں سب کی مدد کرنے کے لئے ، سی ++ زبان کو متعارف کرانے سے پہلے ، آئیے اس حکمت عملی کو دیکھیں جو سی ++ نے لکھا ہے ، تاکہ آپ کو اس سیکشن میں اسم کے تصور کی ابتدائی تفہیم ہو۔ آئیے مثال کے طور پر سب سے آسان ایم اے سی ڈی حکمت عملی لیں:
ہم سب جانتے ہیں کہ ایم اے سی ڈی کے دو منحنی خطوط ہیں ، یعنی فاسٹ لائن اور سست لائن ، آئیے ان دونوں لائنوں کی بنیاد پر تجارتی منطق تیار کریں۔ جب فاسٹ لائن اپ سست لائن کو عبور کرتی ہے تو ، لمبی پوزیشن کھولیں۔ جب فاسٹ لائن نیچے سست لائن کو عبور کرتی ہے تو ، مختصر پوزیشن کھولیں۔ مکمل حکمت عملی کا منطق یہ ہے:
کھلی لمبی پوزیشن: اگر فی الحال کوئی پوزیشن نہیں ہے، اور تیز لائن سست لائن سے زیادہ ہے.
مختصر پوزیشن کھلی: اگر فی الحال کوئی پوزیشن نہیں ہے، اور تیز لائن سست لائن سے کم ہے.
بند طویل پوزیشن: اگر فی الحال طویل پوزیشن رکھتے ہیں، اور تیز لائن سست لائن سے کم ہے.
بند مختصر پوزیشن: اگر موجودہ مختصر پوزیشن ہے، اور تیز لائن سست لائن سے زیادہ ہے.
مندرجہ بالا حکمت عملی منطق لکھنے کے لئے C ++ زبان کا استعمال کرتے ہوئے، کی طرح ہو جائے گا:
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
}
}
}
مندرجہ بالا کوڈ C ++ میں لکھا گیا ایک مکمل مقداری تجارتی حکمت عملی ہے۔ یہ حقیقی مارکیٹ میں لاگو کیا جاسکتا ہے اور خود بخود آرڈر دے گا۔ کوڈ کے سائز کے لحاظ سے ، یہ دیگر زبانوں کے مقابلے میں زیادہ پیچیدہ ہے۔ کیونکہ C ++ زبان بنیادی طور پر FMZ Quant پلیٹ فارم پر اعلی تعدد کی حکمت عملی کی ترقی کے لئے ہے۔
اگرچہ کوڈنگ کا حصہ پہلے کے مقابلے میں تھوڑا سا زیادہ ہے، بہت سے غیر ضروری ٹریڈنگ کلاس لائبریریوں کو پہلے سے ہی کم کر دیا گیا ہے، اور بنیادی نظام کی سطح پر زیادہ تر پروسیسنگ FMZ کوانٹ پلیٹ فارم کی طرف سے پیک کیا جاتا ہے.
ابتدائیوں کے لئے، پوری حکمت عملی کے ڈیزائن کے عمل میں کوئی تبدیلی نہیں آتی ہے: مارکیٹ کی قسم کی ترتیب، K لائن کے اعداد و شمار حاصل کرنے، پوزیشن کی معلومات حاصل کرنے، ٹریڈنگ منطق کا حساب کرنے اور احکامات کی جگہ.
شناخت کنندہ نام بھی ہے۔ C ++ میں متغیرات اور فنکشن کے نام بڑے اور چھوٹے سے حساس ہوتے ہیں ، جس کا مطلب ہے کہ متغیر نام ٹیسٹ اور متغیر نام ٹیسٹ دو مختلف متغیرات ہیں۔ شناخت کنندہ کا پہلا کردار ایک حرف ، ایک underscore
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
*
*/
سی ++ میں ، سیمیکولن بیان کا ٹرمینیٹر ہے۔ یعنی ، ہر بیان کو سیمیکولن کے ساتھ ختم ہونا چاہئے۔ یہ منطقی ہستی کے اختتام کی نشاندہی کرتا ہے۔ مثال کے طور پر ، یہاں تین مختلف بیانات ہیں:
x = y;
y = y + 1;
add(x, y);
ایک متغیر ایک آپریشنل اسٹوریج ایریا ہے۔ C ++ میں متغیر کی وضاحت کرنے کے ل you ، آپ کو پہلے متغیر کی قسم کی وضاحت کرنا ہوگی۔ مقداری تجارتی حکمت عملیوں کی ترقی میں ، ہم عام طور پر استعمال کرنے والی اقسام یہ ہیں: انٹیجر (انٹ) ، فلوٹ (ڈبل) ، سٹرنگ (سٹرنگ) اور خودکار مشتق قسم (آٹو) ۔
انٹیجرز کو انٹیجر نمبروں کے طور پر سمجھا جاسکتا ہے۔ فلوٹنگ پوائنٹ کی اقسام کو اعشاریہ پوائنٹس والے نمبروں کے طور پر سمجھا جاسکتا ہے۔ سٹرنگز لفظی ہیں ، انگریزی یا دیگر زبان کے حروف ہوسکتے ہیں۔
بعض اوقات جب ہم کسی API کو کال کرتے ہیں ، لیکن ہمیں نہیں معلوم کہ یہ API ہمیں کیا قسم کا ڈیٹا واپس کرے گا ، لہذا خودکار مشتق قسم (آٹو) کا استعمال کرتے ہوئے ہمیں ڈیٹا کی قسم کو خود بخود طے کرنے میں مدد ملے گی۔ جیسا کہ ذیل میں دکھایا گیا ہے:
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
ایک صف ڈیٹا کو ذخیرہ کرنے کے لئے ایک کنٹینر ہے۔ ایک سی ++ صف ایک ہی قسم کے عناصر کا ایک مقررہ ترتیب والا مجموعہ ایک مقررہ سائز کے ساتھ ذخیرہ کرسکتی ہے۔ لہذا سی ++ میں ، صف کا اعلان کرنے کے ل you ، آپ کو عنصر کی قسم اور عناصر کی تعداد کی وضاحت کرنے کی ضرورت ہے۔ تمام صفوں کا انڈیکس 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
}
C ++ کا استعمال کرتے ہوئے مقداری تجارتی حکمت عملی لکھنے کے لئے ، تین عام طور پر استعمال ہونے والے آپریٹرز ہیں: ریاضیاتی آپریٹرز ، رشتہ دار آپریٹرز ، منطقی آپریٹرز ، اور تفویض آپریٹرز۔ ریاضیاتی آپریٹر جمع ، گھٹاؤ ، ضرب اور تقسیم کا ریاضیاتی آپریشن ہے۔ رشتہ دار آپریٹر اس بات کا موازنہ کرسکتا ہے کہ آیا دو اقدار چھوٹی ہیں یا بڑی ہیں۔ منطقی آپریٹرز میں بنیادی طور پر: منطقی 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) اظہار ہے تو ، پروگرام پہلے کس مرحلے کا حساب لگاتا ہے؟ مڈل اسکول ریاضی ہمیں بتاتی ہے: اگر یہ آپریشن کی ایک ہی سطح ہے تو ، عام طور پر یہ بائیں سے دائیں طرف سے حساب لگایا جاتا ہے۔ اگر جمع اور گھٹاؤ ، اور ضرب اور تقسیم ہیں تو ، پہلے ضرب اور تقسیم کا حساب لگائیں ، پھر شامل کریں اور گھٹائیں۔ اگر قوسین ہیں تو ، پہلے قوسین کے اندر کا حساب لگائیں۔ اگر آپریشن کا قانون پورا ہوتا ہے تو ، حساب کتاب کے لئے حساب کتاب کا قانون استعمال کیا جاسکتا ہے۔ C ++ کے لئے مندرجہ بالا اصول ، جیسا کہ ذیل میں دکھایا گیا ہے:
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
عام طور پر جب ہم کوڈ لکھتے ہیں تو ، ہمیں ہمیشہ مختلف فیصلوں کے ل different مختلف اقدامات کرنے کی ضرورت ہوتی ہے۔ ہم اپنے کوڈ میں اس کام کو پورا کرنے کے لئے مشروط بیانات کا استعمال کرسکتے ہیں۔ C ++ میں ، ہم مندرجہ ذیل مشروط بیانات کا استعمال کرسکتے ہیں:
اگر بیان - اس بیان کا استعمال صرف اس صورت میں کریں جب مخصوص شرط درست ہو
اگر...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
}
For لوپ بار بار N بار کوڈ بلاکس کو انجام دے سکتا ہے ، اور اس کا عمل درآمد کا بہاؤ اس طرح ہے (جیسا کہ ذیل میں دکھایا گیا ہے):
for (int a = 10; a < 20; a++){
// code block
}
مرحلہ 1: int a = 0 پر عمل کریں اور صرف ایک بار عمل کریں۔ اس کا مقصد ایک عدد متغیر کا اعلان کرنا اور اسے 0 پر شروع کرنا ہے تاکہ for لوپ کو کنٹرول کیا جاسکے۔
مرحلہ 2: ایک <20 پر عملدرآمد. اگر یہ سچ ہے تو، لائن 2 کے کوڈ بلاک پر عملدرآمد.
مرحلہ 3: ایک + + کو انجام دیں، ایک + + کو انجام دینے کے بعد، 11 بن جاتا ہے.
مرحلہ 4: a<20 کو دوبارہ چلائیں ، اور دوسرا ، تیسرا ، اور چوتھا مرحلہ بار بار چلتا رہے گا۔ جب تک a<20 غلط نہیں ہوتا ، اگر یہ غلط ہے تو ، لائن 2 کا کوڈ بلاک عمل میں نہیں آئے گا ، اور پورا لوپ ختم ہوجاتا ہے۔
ہم سب جانتے ہیں کہ مارکیٹ مسلسل بدل رہی ہے۔ اگر آپ تازہ ترین K لائن صف حاصل کرنا چاہتے ہیں تو ، آپ کو مسلسل ایک ہی کوڈ کو بار بار چلانا ہوگا۔ پھر جبکہ لوپ کا استعمال کرنا بہترین انتخاب ہے۔ جب تک کہ مخصوص شرط درست ہے ، لوپ تازہ ترین K لائن صف کے اعداد و شمار کو حاصل کرتا رہے گا۔
void main() {
auto ct = exchange.SetContractType(symbol); //set the trading variety
while(true) {
auto r = exchange.GetRecords(); // constantly getting k-line arrays
}
}
لوپ میں پیشگی شرائط ہوتی ہیں۔ صرف اس وقت جب یہ پیشگی شرط "سچ" ہوتی ہے تو ، لوپ کچھ بار بار کرنا شروع کردے گا ، جب تک کہ پیشگی شرط "جھوٹی" نہ ہو ، لوپ ختم ہوجائے گا۔ لیکن وقفے کے بیان کا استعمال کرتے ہوئے لوپ کے عمل کے دوران فوری طور پر لوپ سے باہر کود سکتا ہے۔
# 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 ++ زبان کے مواد کا فوری آغاز ہے۔ اگر آپ کو زیادہ پیچیدہ حکمت عملی لکھنے کی ضرورت ہے تو ، براہ کرم ایف ایم زیڈ کوانٹ پلیٹ فارم C ++ زبان API دستاویزات کا حوالہ دیں ، یا براہ راست تحریری خدمت کے بارے میں سرکاری کسٹمر سروس سے مشورہ کریں۔
مقداری تجارت کی کلید تجارتی حکمت عملی ہے ، نہ کہ تجارتی اوزار (پروگرامنگ زبان) ۔ اگلے حصے میں ، آئیے ایک قابل عمل سی ++ تجارتی حکمت عملی لکھیں۔ پھر بھی مثال کے طور پر آسان ترین تکنیکی تجزیہ اشارے کا استعمال کرتے ہوئے۔