بسم الله الرحمن الرحيم
نكمل ما بدأنا به مع الاكسبيرت السابق ولكن قبل ذلك سأشرح بالتفصيل الوظيفة OrderSend أهم وظيفة على الإطلاق بالنسبة لبرمجة الاكسبيرتات. كما أنها تعتبر من الوظائف الخاصة بالاكسبيرتات فقط والتي لا يستطيع المؤشر بأي شكل من الأشكال أن ينفذها. مهمتها ببساطة إجراء عملية بيع أو شراء فوري بسعر السوق أو عمليات بيع أو شراء معلقة بسعر أعلى أو أدنى من سعر السوق الحالي . البيع والشراء الفوري يعني من السعر الحالي ( آخر سعر للزوج ) ويكون الشراء من سعر الطلب Ask والبيع من سعر العرض Bid الشراء المعلق له نوعان : الأول شراء محدود Buy Limit ويكون من سعر أدنى من السعر الحالي. وهو النوع من الصفقات الذي تضعه على دعم تتوقع أن يرتد منه السعر. الثاني شراء وقف Buy Stop ويكون من سعر أعلى من السعر الحالي. وهو النوع من الصفقات الذي تضعه على مقاومة تتوقع أن يكسرها السعر. البيع المعلق له نوعان أيضا: الأول بيع محدود Sell Limit ويكون من سعر أعلى من السعر الحالي. وهو النوع من الصفقات الذي تضعه على مقاومة تتوقع أن يرتد عنها السعر. الثاني بيع وقف Sell Stop ويكون من سعر أدنى من السعر الحالي. وهو النوع من الصفقات الذي تضعه على دعم تتوقع أن يخترقها السعر. وهذه الوظيفة لها البارامترات التالية : كود PHP:
int OrderSend( string symbol, int cmd, double volume, double price, int slippage, double stoploss, double
takeprofit, string comment=NULL, int magic=0, datetime expiration=0, color arrow_color=CLR_NONE)
في حال نجحت الوظيفة في مهمتها فإنها ستعود بقيمة تعبر عن رقم الصفقة وهو أكبر من الصفر حتما.
أما في حال فشلت لأي سبب من الأسباب فإنها ستعود بقيمة -1 يجب دائما بعد كل تنفيذ لهذه الوظيفة أن نفحص القيمة العائدة منها. وفي حال كانت القيمة -1 أي هناك خطأ فإننا يجب أن نفحص قيمة الخطأ لنوضح للمستخدم سبب الفشل والذي يكون بسبب أن السعر غير مناسب لنوع العملية أو أن الستوب أو الهدف غير صحيحين أو أن حجم العقد غير مناسب . أو يمكن أن السوق مقفل أو السيرفر مشغول وهكذا. هناك عشرات الاحتمالات للخطأ ويجب على الاكسبيرت الناجح أن يعالجها كلها ويقوم بتنبيه المستخدم على الخطأ الحاصل ليقوم بدوره بمعالجته أو على الأقل معرفة سبب عدم تنفيذ الصفقات بدل أن يكون كالأعمى . أول بارامتر لهذه الوظيفة هي اسم الزوج أو السلعة التي نريد إجراء الصفقة عليها . وهي متحول نصي نكتب فيه "GBPUSD" مثلا أو نقوم بدلا من ذلك بوضع المتحول Symbol والذي يحتوي اسم الزوج الذي يعمل عليه الاكسبيرت حاليا وهي الطريقة المتبعة غالبا . ولكن أحيانا فإننا قد نحتاج أن نجري صفقة على زوج آخر ولذلك فقد نضطر لكتابة اسم الزوج يدويا . البارامتر الثاني هو نوع الصفقة التي نريد اجرائها على الزوج المحدد وهو له هذه القيم : كود PHP:
OP_BUY == 0 ==Buying position. == شراء فوري
OP_SELL == 1 ==Selling position. == بيع فوري
OP_BUYLIMIT == 2 ==Buy limit pending position. == شراء معلق من سعر أدنى من السعر الحالي
OP_SELLLIMIT == 3 ==Sell limit pending position. == بيع معلق من سعر أعلى من السعر الحالي
OP_BUYSTOP == 4 ==Buy stop pending position. == شراء معلق من سعر أعلى من السعر الحالي
OP_SELLSTOP == 5 ==Sell stop pending position. == بيع معلق من سعر أدنى من السعر الحالي
يمكن وضع اسم المتحول OP_BUY أو وضع القيمة المناسبة له وهي صفر والأولى طبعا هو كتابة اسم المتحول لسهولة قراء الكود.
البارامتر الثالث هو حجم العقد أو اللوت لهذه الصفقة ويمثل الرقم 1 لوت واحد أما الرقم 0.1 فيمثل ميني لوت فلو أردنا شراء ثلاثة عقود كبيرة و ثلاثة عقود ميني فإن الرقم سيكون 3.3 وهكذا هذا الرقم خاضع لسياسة البروكر فلو فرضنا أن البروكر لا يقبل عقود ميني فإن أي صفقة تحت الرقم واحد لن تكون مقبولة . البارامتر الرابع هو السعر الذي ستجرى عليه العملية السابقة ويجب أن يكون سعر Ask بالنسبة لعملية الشراء الفوري أو Bid بالنسبة لعملية البيع الفوري لأن البروكر لن يقبل أسعارا غير متوافقة مع سعر السوق الحالي وسوف تفشل الصفقة الفورية . أما بالنسبة للعمليات المعلقة الأخرى فالسعر يجب أن يكون أعلى أو أدنى من السعر الحالي وفق نوع الصفقة كما هو محدد في الأعلى وبفارق يقبله البروكر نفسه فقد لا يقبل البروكر عملية شراء معلقة لا تبعد عن السعر الحالي بأكثر من عشرة نقاط وسوف تفشل الوظيفة أيضا .