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

قبل از ارسال سفارشات تجاری لازم است صحت حجم‌های مشخص شده در سفارش ها بررسی شود. یعنی قبل از فراخوانی تابع OrderSend()  باید حجم پوزیشنی که قرار است اکسپرت تنظیم کند بررسی شود. یعنی یک حداقل و حداکثر حجم معاملات مجاز برای نمادها وجود دارد که ما باید رعایت کنیم.

چک کردن خطای حجم نامعتبر

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

برای اینکه این موضوع را تست کنید توصیه می‌کنم با اکسپرت یک ترید با حجم مثلا 0.001 بگیرد و مثل عکس زیر خطای [Invalid volume] را مشاهده کنید.

چک کردن حجم نامعتبر

چک کردن حجم ترید قبل از ارسال

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

MQL5 – MQL4

				
					//+------------------------------------------------------------------+
//| Check the correctness of the order volume                        |
//+------------------------------------------------------------------+
bool CheckVolumeValue(double volume,string &description)
  {
//--- minimal allowed volume for trade operations
   double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN);
   if(volume<min_volume)
     {
      description=StringFormat("Volume is less than the minimal allowed SYMBOL_VOLUME_MIN=%.2f",min_volume);
      return(false);
     }

//--- maximal allowed volume of trade operations
   double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX);
   if(volume>max_volume)
     {
      description=StringFormat("Volume is greater than the maximal allowed SYMBOL_VOLUME_MAX=%.2f",max_volume);
      return(false);
     }

//--- get minimal step of volume changing
   double volume_step=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_STEP);

   int ratio=(int)MathRound(volume/volume_step);
   if(MathAbs(ratio*volume_step-volume)>0.0000001)
     {
      description=StringFormat("Volume is not a multiple of the minimal step SYMBOL_VOLUME_STEP=%.2f, the closest correct volume is %.2f",
                               volume_step,ratio*volume_step);
      return(false);
     }
   description="Correct volume value";
   return(true);
  }
				
			

نتیجه گیری

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

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

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

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

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

اگر می‌خواهید اکسپرت نویسی را به صورت کاربردی یاد بگیرد پیشنهاد می‌کنم شروع به دیدن دوره‌های زیر کنید.