منطق معاملاتی و مدیریت سرمایه

اکسپرت حد ضرر روزانه (Daily Loss Limit) برای حساب پراپ و حساب شخصی

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

مشاوره و سفارش ربات:واتس‌اپتلگرام۰۹۱۷۱۷۹۲۵۸۱

پاسخ کوتاه: اکسپرت حد ضرر روزانه، موجودی حساب را در ساعت ریست روز ثبت می‌کند. از آن به بعد اکوئیتی را، که سود و زیان معامله‌های باز را هم در خود دارد، با «موجودی شروع روز منهای سقف ضرر» مقایسه می‌کند. وقتی اکوئیتی به این کف برسد، همه معامله‌های باز را می‌بندد، سفارش‌های معلق را پاک می‌کند و تا ریست بعدی معامله تازه را هم می‌بندد. سقف اکسپرت را کمی پایین‌تر از سقف شرکت پراپ بگذارید، چون بستن معامله‌ها چند ثانیه طول می‌کشد و قیمت در همین فاصله ممکن است جلوتر برود.

حد ضرر روزانه دقیقاً چه چیزی را می‌سنجد؟

حد ضرر روزانه (Daily Loss Limit) بیشترین زیانی است که حساب در یک روز معاملاتی اجازه دارد. دو چیز آن را تعریف می‌کند: مبنای شروع روز، و چیزی که با آن مقایسه می‌شود. بیشتر شرکت‌های پراپ اکوئیتی را می‌سنجند، نه موجودی معامله‌های بسته‌شده را. یعنی معامله‌ای که هنوز باز است و در زیان است، از همان لحظه حساب می‌شود.

یک نمونه مشخص: طبق صفحه قوانین FTMO در ۲۷ اکتبر ۲۰۲۶، در حساب‌های 1-Step سقف ضرر روزانه ۳٪ سرمایه اولیه است و از موجودی ساعت ۰۰:۰۰ به وقت اروپای مرکزی (CE(S)T) کم می‌شود. روی حساب ۱۰۰ هزار دلاری، کف روز اول ۹۷٬۰۰۰ دلار است. اگر موجودی نیمه‌شب به ۱۰۲٬۰۰۰ برسد، کف روز بعد ۹۹٬۰۰۰ می‌شود. در حساب‌های 2-Step همین شرکت سقف روزانه ۵٪ است. شرکت‌های دیگر ممکن است عدد، مبنا یا ساعت ریست دیگری داشته باشند و قانون‌ها هم گاهی عوض می‌شوند. پیش از تنظیم اکسپرت، صفحه قوانین همان شرکت و همان نوع حساب را بخوانید.

روش محاسبه کف روز مثال: حساب ۱۰۰ هزار دلاری، سقف ۵٪
درصدی از سرمایه اولیه، کم‌شده از موجودی لحظه ریست موجودی ریست منهای ۵٪ سرمایه اولیه موجودی ریست ۱۰۲٬۰۰۰، کف ۹۷٬۰۰۰
درصدی از موجودی شروع روز موجودی ریست ضرب در ۰٫۹۵ موجودی ریست ۱۰۲٬۰۰۰، کف ۹۶٬۹۰۰
بیشترِ موجودی و اکوئیتی در لحظه ریست بیشترِ این دو منهای ۵٪ سرمایه اولیه موجودی ۱۰۰٬۰۰۰ و اکوئیتی ۱۰۱٬۵۰۰، کف ۹۶٬۵۰۰

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

ساعت ریست: ساعت سرور بروکر با ساعت شرکت یکی نیست

«روز» برای شرکت پراپ از ساعت ریست خودش شروع می‌شود، ولی اکسپرت فقط ساعت سرور بروکر را می‌بیند. ساعت سرور بسیاری از بروکرها با وقت اروپای مرکزی یکی نیست و ممکن است یک ساعت یا بیشتر با آن فاصله داشته باشد. اگر اکسپرت روز را از نیمه‌شب سرور حساب کند، موجودی شروع روز را زودتر یا دیرتر از شرکت ثبت می‌کند و در همان فاصله با کفی متفاوت کار می‌کند. راه درست این است که ساعت ریست، به وقت سرور، یکی از ورودی‌های اکسپرت باشد. ساعت سرور را بالای پنجره Market Watch متاتریدر ببینید و با ساعت ریست شرکت مقایسه کنید.

اکسپرت وقتی به حد رسید چه باید بکند؟

  1. همه معامله‌های باز را ببندد، نه فقط معامله‌های خودش را. کف روز به کل حساب مربوط است، نه به یک اکسپرت.
  2. سفارش‌های معلق را پاک کند، وگرنه یک Buy Stop یا Sell Limit ممکن است بعد از توقف فعال شود.
  3. تا ریست بعدی حساب را بسته نگه دارد: اگر اکسپرت دیگری یا خود معامله‌گر معامله‌ای باز کرد، آن را هم ببندد.
  4. خبر بدهد: با اعلان موبایل متاتریدر یا پیام تلگرام، تا معامله‌گر بداند چرا حساب بسته شده است.

یک محدودیت هم هست. با توابع خود MQL نمی‌شود دکمه Algo Trading متاتریدر را خاموش کرد. برای همین «بسته نگه داشتن حساب» عملاً یعنی بستن دوباره هر معامله‌ای که باز شود. بهتر است همین حد داخل خود اکسپرت معاملاتی هم باشد، نه فقط در یک اکسپرت نگهبان جداگانه، تا اکسپرت معاملاتی اصلاً معامله تازه‌ای باز نکند.

فاصله اطمینان: سقف اکسپرت پایین‌تر از سقف شرکت

بستن چند معامله پشت سر هم چند ثانیه طول می‌کشد و هر کدام ممکن است با اسلیپیج بسته شود. در خبرهای مهم یا شکاف قیمت شروع هفته، قیمت می‌تواند در همین فاصله از کف رد شود. اگر سقف اکسپرت دقیقاً برابر سقف شرکت باشد، هر اسلیپیج یعنی نقض قانون. یک قاعده محتاطانه این است که سقف اکسپرت ۸۰ تا ۹۰ درصد سقف شرکت باشد، مثلاً ۴٪ برای سقف ۵٪. عدد دقیق به حجم معامله‌ها و نوسان نمادی که معامله می‌کنید بستگی دارد.

نمونه کد MQL5: اکسپرت نگهبان حد ضرر روزانه

این اکسپرت روی یک نمودار اجرا می‌شود و کل حساب را می‌پاید. هر ثانیه اکوئیتی را با کف روز مقایسه می‌کند. موجودی شروع روز را هم در یک متغیر سراسری ترمینال نگه می‌دارد، تا اگر متاتریدر وسط روز بسته و دوباره باز شد، موجودی شروع روز از نو و اشتباه ثبت نشود.

// Daily loss guard: watches the whole account, closes everything at the day's floor
// and keeps the account flat until the next reset.
#include <Trade/Trade.mqh>

input double LimitPercent   = 4.0;     // guard limit in %, below the prop firm's own limit
input double InitialCapital = 100000;  // 0 = percent of the day-start balance instead
input int    ResetHour      = 1;       // hour of the daily reset, in SERVER time

CTrade trade;

// Start of the current trading day, in server time.
datetime DayStart()
{
   MqlDateTime t;
   TimeToStruct(TimeTradeServer(), t);
   datetime reset = StringToTime(StringFormat("%04d.%02d.%02d %02d:00", t.year, t.mon, t.day, ResetHour));
   return (TimeTradeServer() >= reset) ? reset : reset - 86400;
}

int OnInit()
{
   EventSetTimer(1);
   return INIT_SUCCEEDED;
}

void OnDeinit(const int reason)
{
   EventKillTimer();
}

void OnTimer()
{
   // The day-start balance is kept in a terminal global variable, so a restart
   // in the middle of the day does not record it again.
   string key = "DLG_" + IntegerToString(AccountInfoInteger(ACCOUNT_LOGIN)) + "_" + IntegerToString((long)DayStart());
   if(!GlobalVariableCheck(key))
      GlobalVariableSet(key, AccountInfoDouble(ACCOUNT_BALANCE));
   double startBalance = GlobalVariableGet(key);
   double base         = (InitialCapital > 0) ? InitialCapital : startBalance;
   double floorEquity  = startBalance - base * LimitPercent / 100.0;

   if(AccountInfoDouble(ACCOUNT_EQUITY) <= floorEquity)
      GlobalVariableSet(key + "_hit", 1);
   if(GlobalVariableCheck(key + "_hit"))
      CloseEverything();
}

void CloseEverything()
{
   for(int i = PositionsTotal() - 1; i >= 0; i--)
   {
      ulong ticket = PositionGetTicket(i);
      if(ticket > 0)
         trade.PositionClose(ticket);
   }
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      ulong ticket = OrderGetTicket(i);
      if(ticket > 0)
         trade.OrderDelete(ticket);
   }
}

سه ورودی کار را تنظیم می‌کنند:

  • LimitPercent: سقف خود اکسپرت، که پایین‌تر از سقف شرکت است.
  • InitialCapital: اگر صفر نباشد، سقف درصدی از همین عدد است (روش اول جدول). اگر صفر باشد، درصدی از موجودی شروع روز است (روش دوم).
  • ResetHour: ساعت ریست به وقت سرور.

این کد نمونه آموزشی است. روش سوم جدول، اعلان و حالت‌هایی مثل تعطیلی بازار را ندارد. پیش از استفاده روی حساب پراپ، آن را روی حساب دمو با سقف خیلی کوچک (مثلاً ۰٫۲٪) و یک معامله دستی امتحان کنید، تا ببینید سر حد درست می‌بندد و تا ریست بعدی چیزی باز نمی‌ماند.

خطاهای رایج در اکسپرت حد ضرر روزانه

  • سنجیدن موجودی به‌جای اکوئیتی: معامله باز در زیان تا بسته نشود در موجودی دیده نمی‌شود، ولی شرکت پراپ آن را حساب می‌کند.
  • ریست از نیمه‌شب سرور: اگر سرور و شرکت ساعت ریست متفاوتی داشته باشند، اکسپرت در فاصله این دو ساعت با کف اشتباه کار می‌کند.
  • ثبت دوباره موجودی شروع روز بعد از ری‌استارت: اگر متاتریدر یا VPS وسط روز دوباره روشن شود و اکسپرت موجودی همان لحظه را «شروع روز» بگیرد، زیان‌های صبح فراموش می‌شوند. کد بالا برای همین موجودی را در متغیر سراسری ترمینال نگه می‌دارد.
  • روشن شدن اکسپرت بعد از ساعت ریست: اگر اکسپرت بعد از چند معامله روی نمودار بیاید، موجودی شروع روز را اشتباه ثبت می‌کند. اکسپرت باید پیش از ساعت ریست روشن باشد، و VPS به همین دلیل کمک می‌کند.
  • سقف برابر سقف شرکت: هیچ جایی برای اسلیپیج و شکاف قیمت نمی‌ماند.
  • نگهبانی که فقط معامله‌های خودش را می‌بندد: اگر چند اکسپرت روی یک حساب کار کنند، کف روز به همه‌شان مربوط است.

حد ضرر روزانه در حساب شخصی

این ابزار فقط برای حساب پراپ نیست. در حساب شخصی هم سقف ضرر روزانه جلوی روزهایی را می‌گیرد که یک استراتژی در بازار نامناسب پشت سر هم زیان می‌دهد، یا معامله‌گر بعد از چند زیان می‌خواهد آن را «جبران» کند. در حساب شخصی ساده‌تر است سقف را درصدی از موجودی شروع روز بگیرید (InitialCapital برابر صفر). این حد، جای مدیریت سرمایه کل حساب را نمی‌گیرد. اندازه هر معامله و ریسک کل حساب را در مدیریت سرمایه در ربات معامله‌گر و سقف افت کل سرمایه را در طراحی ربات با محدودیت Drawdown توضیح داده‌ایم.

تست اکسپرت حد ضرر روزانه پیش از حساب واقعی

  1. روی حساب دمو، سقف را خیلی کوچک بگذارید و با یک معامله دستی ببینید اکسپرت سر حد می‌بندد.
  2. بعد از رسیدن به حد، یک معامله تازه باز کنید و ببینید اکسپرت آن را هم می‌بندد.
  3. متاتریدر را وسط روز ببندید و دوباره باز کنید و ببینید کف روز عوض نمی‌شود.
  4. یک روز کامل، زمان ریست اکسپرت را در گزارش Experts با ساعت ریست شرکت مقایسه کنید.
  5. اگر منطق را داخل اکسپرت معاملاتی گذاشته‌اید، بک‌تست هم بگیرید و روزهایی را ببینید که حد فعال شده است.

برای سفارش این قابلیت

اگر می‌خواهید حد ضرر روزانه به ربات خودتان اضافه شود، این‌ها را بفرستید: نام شرکت پراپ و نوع حساب، سقف ضرر روزانه و روش محاسبه‌اش، ساعت ریست، و فایل سورس ربات (mq4 یا mq5). مسیر سفارش در سفارش ربات متاتریدر آمده است. اگر ربات شما برای حساب پراپ تغییرهای دیگری هم لازم دارد، بروزرسانی ربات برای حساب Prop Firm را ببینید. برای اینکه وقتی حساب بسته شد روی گوشی خبردار شوید، اتصال متاتریدر به تلگرام به کار می‌آید.

پرسش‌های رایج

حد ضرر روزانه با حد ضرر هر معامله چه فرقی دارد؟

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

اگر VPS یا متاتریدر خاموش شود چه می‌شود؟

اکسپرت خاموش چیزی را نمی‌پاید. برای همین هر معامله باید از لحظه باز شدن حد ضرر واقعی روی سرور داشته باشد، تا حتی بدون اکسپرت هم زیانش محدود بماند. خطر قطعی را در ریسک قطعی اینترنت برای ربات معامله‌گر و راه کم کردنش را در مزایا و معایب استفاده از VPS برای ربات توضیح داده‌ایم.

یک اکسپرت نگهبان برای چند حساب کافی است؟

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

جمع‌بندی

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

هشدار ریسک: این مطلب جنبه آموزشی دارد و توصیه سرمایه‌گذاری نیست. معامله در بازارهای مالی با ریسک از دست دادن سرمایه همراه است و نتایج گذشته یا بک‌تست تضمینی برای آینده نیست.

نویسنده

تیم متااکسپرت در طراحی و برنامه‌نویسی ربات‌های معامله‌گر و اکسپرت‌های متاتریدر با MQL4 و MQL5 تخصص دارد و تجربه‌های عملی خود را در قالب این مقالات منتشر می‌کند.

دیدگاه‌ها

دیدگاه یا سؤال خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

کد امنیتی