الانزلاق والنقطة
دعنا ننشئ وظيفة لتغيير حجم معامل الانزلاق بشكل صحيح. مثل
المذكورة سابقًا ، في الوسيط الذي لديه عروض أسعار كسرية ، معامل الانزلاق
سيحتاج وظيفة OrderSend () إلى الزيادة بمعامل 10 للحصول على الانزلاق الصحيح
القيمة.
ستعمل هذه الوظيفة تلقائيًا على ضبط معلمة الانزلاق على عدد النقاط المحدد بواسطة
معلمة Slippage الخارجية:
نقوم بتمرير رمز العملة ومعامل الانزلاق الخارجي كوسائط. إذا كانت العملة تستخدم
علامات الاقتباس المكونة من 2 أو 4 أرقام ، نستخدم وسيطة SlippagePips غير المتغيرة كإعداد للإنزلاق. إذا كان
تستخدم العملة أسعارًا مكونة من 3 أو 5 أرقام ، ونضرب SlippagePips في 10. إليك كيفية استخدام هذه الوظيفة
في OrderSend():
سيكون الانزلاق في هذا المثال 5 نقاط ، وسيتم تعديل معامل الانزلاق تلقائيًا
بناءً على عدد الأرقام في عرض أسعار العملة.
الانزلاق والنقطة كمتغيرات عامة
عيب استخدام دالة لإرجاع النقطة أو قيمة الانزلاق هو الكتابة الإضافية المطلوبة
لمتغيرات الدالة. سننشئ متغيرات عالمية تحمل النقطة المناسبة و
قيم الانزلاق السعري لزوج العملات الخاص بنا ، وسنستخدمها في أي وقت نحتاج إليه للإشارة إلى تلك القيم.
نظرًا لأن هذه القيم لن تتغير أبدًا أثناء تنفيذ البرنامج ، فسنحسب هذه القيم في دالة
init () . سنفترض أن المتغير الصحيح الخارجي Slippage موجود بالفعل:
من الآن فصاعدًا ، سنستخدم UsePoint و UseSlippage للإشارة إلى هذه القيم. الكود أعلاه
يفترض أن المستشار الخبير الخاص بك يقوم بوضع أوامر على عملة واحدة فقط. سيكون هذا هو الحال 98٪ من الوقت ،
ولكن إذا كنت تنشئ مستشارًا خبيرًا يضع أوامر على عملات متعددة (أو على عملة ما
بخلاف الرسم البياني الحالي) ، ستحتاج إلى استخدام وظائف PipPoint () و GetSlippage () في كل
مرة تحتاج لحساب هذه القيم.
وظيفة MarketInfo():
استخدمنا وظيفة MarketInfo () أعلاه لاسترداد قيمة النقطة وعدد الأرقام في لأي زوج.
وظيفة MarketInfo () لها استخدامات عديدة ، وسوف تستخدمها لاسترداد
معلومات الأسعار الضرورية في برامجك. فيما يلي بناء الجملة لوظيفة MarketInfo ():
الوسيطة Symbol هي ببساطة رمز العملة الذي تريد استرداد المعلومات الخاصة به.
بالنسبة لرمز المخطط الحالي ، يمكن استخدام الوظيفة Symbol (). للرموز الأخرى ، ستحتاج إلى
تحديد رمز العملة ، مثل EURJPY.
RequestType هو عدد صحيح ثابت يمثل المعلومات التي تطلبها من
وظيفة MarketInfo. فيما يلي قائمة بأكثر ثوابت MarketInfo () فائدة. يمكن العثور على قائمة كاملة في
مرجع MQL ، ضمن الثوابت القياسية - MarketInfo.
MODE_POINT - قيمة النقطة. على سبيل المثال ، 0.01 أو 0.00001.
MODE_DIGITS - عدد المنازل العشرية في السعر. سيكون 2 أو 3 لأزواج الين ، و 4
أو 5 لكل أزواج أخرى.
MODE_SPREAD - الانتشار الحالي. على سبيل المثال ، 3 نقاط (أو 30 لسمسار النقطة الجزئية).
MODE_STOPLEVEL - مستوى التوقف. على سبيل المثال ، 3 نقاط (أو 30 لسمسار النقطة الجزئية).
تُستخدم معرّفات الطلبات هذه بشكل عام عند التحقق من معلومات الأسعار لعملة أخرى ، أو
في أي مكان حيث قد يكون الرمز أي شيء بخلاف رمز المخطط الحالي:
MODE_BID - سعر العطاء الحالي (البيع) للرمز المحدد.
MODE_ASK - سعر الطلب الحالي (الشراء) للرمز المحدد.
MODE_LOW - أدنى مستوى للشريط الحالي للرمز المحدد.
MODE_HIGH - أعلى مستوى للشريط الحالي للرمز المحدد.
دعنا ننشئ وظيفة لتغيير حجم معامل الانزلاق بشكل صحيح. مثل
المذكورة سابقًا ، في الوسيط الذي لديه عروض أسعار كسرية ، معامل الانزلاق
سيحتاج وظيفة OrderSend () إلى الزيادة بمعامل 10 للحصول على الانزلاق الصحيح
القيمة.
ستعمل هذه الوظيفة تلقائيًا على ضبط معلمة الانزلاق على عدد النقاط المحدد بواسطة
معلمة Slippage الخارجية:
كود:
int GetSlippage(string Currency, int SlippagePips) { int CalcDigits = MarketInfo(Currency,MODE_DIGITS); if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips; else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10; return(CalcSlippage); }
نقوم بتمرير رمز العملة ومعامل الانزلاق الخارجي كوسائط. إذا كانت العملة تستخدم
علامات الاقتباس المكونة من 2 أو 4 أرقام ، نستخدم وسيطة SlippagePips غير المتغيرة كإعداد للإنزلاق. إذا كان
تستخدم العملة أسعارًا مكونة من 3 أو 5 أرقام ، ونضرب SlippagePips في 10. إليك كيفية استخدام هذه الوظيفة
في OrderSend():
كود:
// External parameters extern int Slippage = 5; // Order placement OrderSend(Symbol(),OP_BUY,LotSize,Ask,GetSlippage( Symbol(),Slippage),BuyStopLoss, BuyTakeProfit,"Buy Order",MagicNumber,0,Green);
سيكون الانزلاق في هذا المثال 5 نقاط ، وسيتم تعديل معامل الانزلاق تلقائيًا
بناءً على عدد الأرقام في عرض أسعار العملة.
الانزلاق والنقطة كمتغيرات عامة
عيب استخدام دالة لإرجاع النقطة أو قيمة الانزلاق هو الكتابة الإضافية المطلوبة
لمتغيرات الدالة. سننشئ متغيرات عالمية تحمل النقطة المناسبة و
قيم الانزلاق السعري لزوج العملات الخاص بنا ، وسنستخدمها في أي وقت نحتاج إليه للإشارة إلى تلك القيم.
نظرًا لأن هذه القيم لن تتغير أبدًا أثناء تنفيذ البرنامج ، فسنحسب هذه القيم في دالة
init () . سنفترض أن المتغير الصحيح الخارجي Slippage موجود بالفعل:
كود:
/ Global variables double UsePoint; int UseSlippage; int init() { UsePoint = PipPoint(Symbol()); UseSlippage = GetSlippage(Symbol(),Slippage); }
من الآن فصاعدًا ، سنستخدم UsePoint و UseSlippage للإشارة إلى هذه القيم. الكود أعلاه
يفترض أن المستشار الخبير الخاص بك يقوم بوضع أوامر على عملة واحدة فقط. سيكون هذا هو الحال 98٪ من الوقت ،
ولكن إذا كنت تنشئ مستشارًا خبيرًا يضع أوامر على عملات متعددة (أو على عملة ما
بخلاف الرسم البياني الحالي) ، ستحتاج إلى استخدام وظائف PipPoint () و GetSlippage () في كل
مرة تحتاج لحساب هذه القيم.
وظيفة MarketInfo():
استخدمنا وظيفة MarketInfo () أعلاه لاسترداد قيمة النقطة وعدد الأرقام في لأي زوج.
وظيفة MarketInfo () لها استخدامات عديدة ، وسوف تستخدمها لاسترداد
معلومات الأسعار الضرورية في برامجك. فيما يلي بناء الجملة لوظيفة MarketInfo ():
كود:
double MarketInfo(string Symbol, int RequestType);
بالنسبة لرمز المخطط الحالي ، يمكن استخدام الوظيفة Symbol (). للرموز الأخرى ، ستحتاج إلى
تحديد رمز العملة ، مثل EURJPY.
RequestType هو عدد صحيح ثابت يمثل المعلومات التي تطلبها من
وظيفة MarketInfo. فيما يلي قائمة بأكثر ثوابت MarketInfo () فائدة. يمكن العثور على قائمة كاملة في
مرجع MQL ، ضمن الثوابت القياسية - MarketInfo.
MODE_POINT - قيمة النقطة. على سبيل المثال ، 0.01 أو 0.00001.
MODE_DIGITS - عدد المنازل العشرية في السعر. سيكون 2 أو 3 لأزواج الين ، و 4
أو 5 لكل أزواج أخرى.
MODE_SPREAD - الانتشار الحالي. على سبيل المثال ، 3 نقاط (أو 30 لسمسار النقطة الجزئية).
MODE_STOPLEVEL - مستوى التوقف. على سبيل المثال ، 3 نقاط (أو 30 لسمسار النقطة الجزئية).
تُستخدم معرّفات الطلبات هذه بشكل عام عند التحقق من معلومات الأسعار لعملة أخرى ، أو
في أي مكان حيث قد يكون الرمز أي شيء بخلاف رمز المخطط الحالي:
MODE_BID - سعر العطاء الحالي (البيع) للرمز المحدد.
MODE_ASK - سعر الطلب الحالي (الشراء) للرمز المحدد.
MODE_LOW - أدنى مستوى للشريط الحالي للرمز المحدد.
MODE_HIGH - أعلى مستوى للشريط الحالي للرمز المحدد.