استخدام الأوامر المعلقة
دعونا نعدل المستشار الخبير الخاص بنا لاستخدام الأوامر المعلقة. سنستخدم أوامر الإيقاف في هذا المثال. عند
المتوسط المتحرك السريع أكبر من المتوسط المتحرك البطيء ، وسوف نضع أمر إيقاف شراء بمقدار 10 نقاط
فوق الارتفاع الحالي. عندما يكون العكس صحيحًا ، سنضع أمر إيقاف بيع بمقدار 10 نقاط أسفل
المنخفض الحالي. دعنا نعلن عن متغير خارجي لضبط هذا الإعداد ، يسمى PendingPips.
نقوم بإضافة وظيفة OrderDelete () إلى مجموعة أوامر البيع والشراء لإغلاق أي
أوامر معلقة شاغرة. نحتاج إلى التحقق من نوع الأمر الخاص بالطلب المشار إليه بواسطة SellTicket للتأكد
أننا نستخدم الوظيفة الصحيحة لإغلاق الأمر.
نستخدم OrderType () للتحقق مما إذا كان أمر البيع المحدد أمر سوق أم أمر إيقاف. لو
إنه أمر سوق ، نقوم بإغلاقه باستخدام OrderClose (). إذا كان الأمر معلقًا ، فإننا نغلقه باستخدام
OrderDelete().
إليك حساب سعر الأمر المعلق. نقوم ببساطة بتحويل PendingPips إلى قيمة كسرية باستخدام
UsePoint ، وقم بإضافتها إلى سعر الإغلاق الحالي. سنقوم بتخزين هذه القيمة في متغير PendingPrice.
بعد ذلك ، نقوم بحساب وقف الخسارة وجني الأرباح بالنسبة لسعر الأمر المعلق لدينا. أخيرًا ، نضع
طلبنا المعلق باستخدام OrderSend () ، تخزين نتيجة التجارة في BuyTicket المتغير:
هذا الكود الكامل لاكسبيرت الاوامر المعلقة
دعونا نعدل المستشار الخبير الخاص بنا لاستخدام الأوامر المعلقة. سنستخدم أوامر الإيقاف في هذا المثال. عند
المتوسط المتحرك السريع أكبر من المتوسط المتحرك البطيء ، وسوف نضع أمر إيقاف شراء بمقدار 10 نقاط
فوق الارتفاع الحالي. عندما يكون العكس صحيحًا ، سنضع أمر إيقاف بيع بمقدار 10 نقاط أسفل
المنخفض الحالي. دعنا نعلن عن متغير خارجي لضبط هذا الإعداد ، يسمى PendingPips.
كود:
extern int PendingPips = 10;
نقوم بإضافة وظيفة OrderDelete () إلى مجموعة أوامر البيع والشراء لإغلاق أي
أوامر معلقة شاغرة. نحتاج إلى التحقق من نوع الأمر الخاص بالطلب المشار إليه بواسطة SellTicket للتأكد
أننا نستخدم الوظيفة الصحيحة لإغلاق الأمر.
كود:
OrderSelect(SellTicket,SELECT_BY_TICKET); // Close Order if(OrderCloseTime() == 0 && SellTicket > 0 && OrderType() == OP_SELL) { double CloseLots = OrderLots(); double ClosePrice = Ask; bool Closed = OrderClose(SellTicket,CloseLots,ClosePrice,UseSlip page,Red); if(Closed == true) SellTicket = 0; } // Delete Order else if(OrderCloseTime() == 0 && SellTicket > 0 && OrderType() == OP_SELLSTOP) { bool Deleted = OrderDelete(SellTicket,Red); if(Deleted == true) SellTicket = 0; }
نستخدم OrderType () للتحقق مما إذا كان أمر البيع المحدد أمر سوق أم أمر إيقاف. لو
إنه أمر سوق ، نقوم بإغلاقه باستخدام OrderClose (). إذا كان الأمر معلقًا ، فإننا نغلقه باستخدام
OrderDelete().
إليك حساب سعر الأمر المعلق. نقوم ببساطة بتحويل PendingPips إلى قيمة كسرية باستخدام
UsePoint ، وقم بإضافتها إلى سعر الإغلاق الحالي. سنقوم بتخزين هذه القيمة في متغير PendingPrice.
بعد ذلك ، نقوم بحساب وقف الخسارة وجني الأرباح بالنسبة لسعر الأمر المعلق لدينا. أخيرًا ، نضع
طلبنا المعلق باستخدام OrderSend () ، تخزين نتيجة التجارة في BuyTicket المتغير:
كود:
double PendingPrice = Close[0] + (PendingPips * UsePoint); if(StopLoss > 0) double BuyStopLoss = PendingPrice - (StopLoss * UsePoint); if(TakeProfit > 0) double BuyTakeProfit = PendingPrice + (TakeProfit * UsePoint); BuyTicket = OrderSend(Symbol(),OP_BUYSTOP,LotSize,PendingPrice ,UseSlippage, BuyStopLoss,BuyTakeProfit,"Buy Stop Order",MagicNumber,0,Green); SellTicket = 0; The code below shows the changes for the sell stop order block: OrderSelect(BuyTicket,SELECT_BY_TICKET); // Close Order if(OrderCloseTime() == 0 && BuyTicket > 0 && OrderType() == OP_BUY) { CloseLots = OrderLots(); ClosePrice = Bid; Closed = OrderClose(BuyTicket,CloseLots,ClosePrice,UseSlipp age,Red); if(Closed == true) BuyTicket = 0; } // Delete Order else if(OrderCloseTime() == 0 && BuyTicket > 0 && OrderType() == OP_BUYSTOP) { Closed = OrderDelete(BuyTicket,Red); if(Closed == true) BuyTicket = 0; } PendingPrice = Close[0] - (PendingPips * UsePoint); double SellStopLoss = PendingPrice + (StopLoss * UsePoint); double SellTakeProfit = PendingPrice - (TakeProfit * UsePoint); SellTicket = OrderSend(Symbol(),OP_SELLSTOP,LotSize,PendingPric e,UseSlippage, SellStopLoss,SellTakeProfit,"Sell Stop Order",MagicNumber,0,Red); BuyTicket = 0;
هذا الكود الكامل لاكسبيرت الاوامر المعلقة
كود:
#property copyright"Mohammad alturk" // External variables extern double LotSize = 0.1; extern double StopLoss = 50; extern double TakeProfit = 100; extern int PendingPips = 10; extern int Slippage = 5; extern int MagicNumber = 123; extern int FastMAPeriod = 10; extern int SlowMAPeriod = 20; // Global variables int BuyTicket; int SellTicket; double UsePoint; int UseSlippage; // Init function int init() { UsePoint = PipPoint(Symbol()); UseSlippage = GetSlippage(Symbol(),Slippage); } // Start function int start() { // Moving averages double FastMA = iMA(NULL,0,FastMAPeriod,0,0,0,0); double SlowMA = iMA(NULL,0,SlowMAPeriod,0,0,0,0); // Buy order if(FastMA > SlowMA && BuyTicket == 0) { OrderSelect(SellTicket,SELECT_BY_TICKET); // Close order if(OrderCloseTime() == 0 && SellTicket > 0 && OrderType() == OP_SELL) { double CloseLots = OrderLots(); double ClosePrice = Ask; bool Closed = OrderClose(SellTicket,CloseLots,ClosePrice,UseSlip page,Red); } // Delete Order else if(OrderCloseTime() == 0 && SellTicket > 0 && OrderType() == OP_SELLSTOP) { bool Deleted = OrderDelete(SellTicket,Red); } double PendingPrice = High[0] + (PendingPips * UsePoint); // Calculate stop loss and take profit if(StopLoss > 0) double BuyStopLoss = PendingPrice - (StopLoss * UsePoint); if(TakeProfit > 0) double BuyTakeProfit = PendingPrice + (TakeProfit * UsePoint); // Open buy order BuyTicket = OrderSend(Symbol(),OP_BUYSTOP,LotSize,PendingPrice ,UseSlippage, BuyStopLoss,BuyTakeProfit,"Buy Stop Order",MagicNumber,0,Green); SellTicket = 0; } // Sell Order if(FastMA < SlowMA && SellTicket == 0) { OrderSelect(BuyTicket,SELECT_BY_TICKET); if(OrderCloseTime() == 0 && BuyTicket > 0 && OrderType() == OP_BUY) { CloseLots = OrderLots(); ClosePrice = Bid; Closed = OrderClose(BuyTicket,CloseLots,ClosePrice,UseSlipp age,Red); } else if(OrderCloseTime() == 0 && SellTicket > 0 && OrderType() == OP_BUYSTOP) { Deleted = OrderDelete(SellTicket,Red); } PendingPrice = Low[0] - (PendingPips * UsePoint); if(StopLoss > 0) double SellStopLoss = PendingPrice + (StopLoss * UsePoint); if(TakeProfit > 0) double SellTakeProfit = PendingPrice - (TakeProfit * UsePoint); SellTicket = OrderSend(Symbol(),OP_SELLSTOP,LotSize,PendingPric e,UseSlippage, SellStopLoss,SellTakeProfit,"Sell Stop Order",MagicNumber,0,Red); BuyTicket = 0; } return(0); } // Pip Point Function double PipPoint(string Currency) { int CalcDigits = MarketInfo(Currency,MODE_DIGITS); if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01; else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001; return(CalcPoint); } // Get Slippage Function 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); }
تعليق