قبل از ارسال سفارش موجودی حساب را چک کن!!!

ما باید قبل از ارسال هر دستور تجاری،بررسی کنیم که آیا موجودی کافی در حساب داریم یا خیر. نداشتن موجودی کافی برای خرید یا فروش یا دستور باز شدن در آینده (پوزیشن‌های شرطی یا پندینگ اردر) به عنوان یک خطا شناخته می‌شود. به زبان ساده اگر بخواهید یک پوزیشن جدید بگیرید باید موجودی کافی در حساب داشته باشید وگرنه با خطا مواجه می‌شویم.

لطفاً به یاد داشته باشید که حتی قرار دادن یک دستور در انتظار ممکن است نیاز به مارجین داشته باشد. مثلا پوزیشن‌های شرطی مثل بای لیمیت یا سل لیمیت نیز نیازمند مارجین کافی می‌باشد.

چک کردن خطای عدم موجودی

شما می‌توانید خطاهایی که باعث می‌شود معامله انجام نشود را از بخش Journal در متاتریدر مشاهد کنید. عکس زیر نحوه دسترسی به این بخش را در استراتژی تستر نشان می‌دهد. البته در جاهای دیگر که تب Journal وجود دارد نیز می‌توانید خطاها را مشاهده کند. در بین خطاها اگر با not enough money  یا [No money] مواجه شدید برای برطرف کردنش این مقاله کاربرد دارد.

خطای عدم موجودی کافی را مشاهده می‌کنید

برای اینکه این موضوع را تست کنید توصیه می‌کنم که یک حساب دمو با موجودی کم ایجاد کنید و حجم زیادی بزنید. و سپس از بخش ژرنال خطاها را مشاهده کنید.

چک کردن موجودی قبل از ارسال سفارش

شما قبل از اینکه سفارشی را ارسال کنید از تابع زیر برای چک کردن موجودی استفاده کنید.

MQL5

				
					bool CheckMoneyForTrade(string symb,double lots,ENUM_ORDER_TYPE type)
  {
//--- Getting the opening price
   MqlTick mqltick;
   SymbolInfoTick(symb,mqltick);
   double price=mqltick.ask;
   if(type==ORDER_TYPE_SELL)
      price=mqltick.bid;
//--- values of the required and free margin
   double margin,free_margin=AccountInfoDouble(ACCOUNT_MARGIN_FREE);
   //--- call of the checking function
   if(!OrderCalcMargin(type,symb,lots,price,margin))
     {
      //--- something went wrong, report and return false
      Print("Error in ",__FUNCTION__," code=",GetLastError());
      return(false);
     }
   //--- if there are insufficient funds to perform the operation
   if(margin>free_margin)
     {
      //--- report the error and return false
      Print("Not enough money for ",EnumToString(type)," ",lots," ",symb," Error code=",GetLastError());
      return(false);
     }
//--- checking successful
   return(true);
  }
				
			

MQL4

				
					bool CheckMoneyForTrade(string symb, double lots,int type)
  {
   double free_margin=AccountFreeMarginCheck(symb,type, lots);
   //-- if there is not enough money
   if(free_margin<0)
     {
      string oper=(type==OP_BUY)? "Buy":"Sell";
      Print("Not enough money for ", oper," ",lots, " ", symb, " Error code=",GetLastError());
      return(false);
     }
   //--- checking successful
   return(true);
  }
				
			

توابع بالا را می‌توانید کپی کنید و قبل از اینکه سفارش را ارسال کنید ابتدا مقدار موجودی حساب را چک کنید. 

Picture of احمد هندیان‌پور

احمد هندیان‌پور

نویسنده و مدرس اکسپرت‌نویسی فارکس