سفارشات ، مواضع و معاملات در متاترادر 5

  • 2022-09-22

هدف نهایی یک معامله گر استخراج سود از طریق وسایل تجارت در بازارهای مالی است. در این مقاله اصطلاحات و فرآیندهای بستر معاملاتی Metatrader 5 شرح داده شده است ، دانش آن برای درک صحیح از کار عملکردهای تجاری زبان MQL5 ضروری است.

سفارشات - درخواست های عملیاتی تجارت ، دریافت شده توسط سرور تجارت ، مطابق با الزامات پلت فرم Metatrader 5 است. اگر درخواست نادرست باشد ، به صورت سفارش در بستر معاملاتی ظاهر نمی شود. سفارشات می توانند از جمله خرید یا فروش حجم خاصی با قیمت فعلی بازار بر روی یک ابزار مالی مشخص ، فوری اجرا شوند. نوع دیگری از سفارشات - سفارشات در حال تعقیب است ، که حاوی دستور ارتکاب تجارت تحت حضور خاص است. سفارشات در انتظار همچنین ممکن است شامل محدودیت زمانی در اقدامات آنها باشد - تاریخ انقضا سفارش.

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

معاملات - نتیجه اجرای دستور (فرمان برای انجام معامله) است. هر معامله بر اساس یک سفارش خاص انجام می شود ، اما یک سفارش واحد می تواند مجموعه ای از معاملات را ایجاد کند. به عنوان مثال ، دستور خرید 10 قطعه ممکن است توسط چندین معاملات پی در پی با پر کردن جزئی انجام شود. معاملات همیشه در تاریخ تجارت ذخیره می شوند و قابل تغییر نیست. در ترمینال ، معاملات در برگه "تاریخ" نمایش داده می شود.

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

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

توجه: سفارشات و موقعیت های فعال همیشه در برگه "تجارت" نمایش داده می شود ، و معاملات و سفارشات از تاریخ همیشه در برگه "تاریخ" منعکس می شود. دستور فعال از برگه "تجارت" نباید با دستورات تاریخی از برگه "تاریخ" اشتباه گرفته شود.

چگونه ترمینال اطلاعات تجارت را از سرور دریافت و ذخیره می کند

ترمینال تاریخ تجارت را در یک پایگاه ویژه ذخیره می کند و فقط تاریخچه گمشده معاملات و سفارشات تکمیل شده در حساب معاملات را در هر اتصال به سرور تجارت دریافت می کند. این کار برای صرفه جویی در ترافیک انجام می شود. هنگام بستن ترمینال مشتری Metatrader 5 یا تغییر حساب فعال فعلی ، کل تاریخچه روی دیسک سخت ثبت می شود و از زمان راه اندازی بعدی ترمینال خوانده می شود.

تمام پایگاه داده ها به صورت رمزگذاری شده روی دیسک ضبط می شوند و کلید رمزگذاری به رایانه ای که ترمینال روی آن نصب شده است بستگی دارد. این امر در صورت کپی کردن از کاربر ترمینال در برابر دسترسی غیرمجاز به داده های خود محافظت می کند.

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

رویداد معاملاتی تغییرات زیر در حساب است:

  • عملیات برداشت و تعادل.
  • اتهام کمیسیون ، مبادله و مالیات.
  • قرار دادن ، حذف و اصلاح سفارشات.
  • اجرای معاملات بر اساس سفارشات.
  • افتتاح و بسته شدن موقعیت ها.
  • تغییر در حجم و جهت موقعیت ها.

در صورت خاتمه اتصال با سرور تجارت ، ترمینال به طور دوره ای سعی در اتصال مجدد دارد. پس از اتصال مجدد با سرور ، ترمینال تمام تغییرات اخیر در تاریخ تجارت را برای حفظ یکپارچگی داده ها در پایگاه داده خود تاریخ درخواست می کند.

تاریخچه معاملاتی که در تب "تاریخچه" ترمینال نمایش داده می شود، از پایه تاریخچه ترمینال گرفته شده است و تغییرات دوره نمایش داده شده در پایانه تاریخچه تنها می تواند دامنه تاریخچه ذخیره شده در این ترمینال را افزایش دهد. پایگاه دادهکاهش دوره تاریخچه نمایش داده شده منجر به حذف فیزیکی تاریخچه از پایه ترمینال نمی شود.

Installation of the interval of the displayed trading history

این بدان معناست که نصب فاصله کوتاه‌تری از تاریخچه نمایش داده شده، عمق تاریخچه معاملات ذخیره شده را کاهش نمی‌دهد. اما اگر یک بازه بازه وسیع‌تر را برای نمایش در برگه "تاریخچه" مشخص کنیم، چنین اقدامی می‌تواند منجر به درخواست تاریخچه عمیق‌تری از سرور معاملاتی شود، اگر پایگاه خود پایانه هنوز این اطلاعات را نداشته باشد. داده های درخواست شده برای آن دوره

طرح کلی تعامل بین ترمینال و سرور معاملاتی MetaTrader 5 در شکل زیر نشان داده شده است:

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

به نوبه خود، سرور معاملاتی به طور مستقل، بدون هیچ درخواستی از ترمینال، پیام هایی را در مورد رویدادهای معاملاتی که در حساب انجام می شود به مشتری ارسال می کند: تغییرات وضعیت سفارشات و موقعیت ها، انجام معاملات بر اساس سفارشات،شارژ کمیسیون، موجودی و برداشت پول و غیره.

دسترسی به تاریخچه معاملات از برنامه MQL5

ترمینال می تواند به طور همزمان با تعدادی نشانگر، اسکریپت و EA کار کند و همه این برنامه ها می توانند اطلاعات مورد نیاز خود را در مورد معاملات درخواست کنند: سفارش ها، معاملات و موقعیت ها. کار مستقیم برنامه mql5 با پایگاه داده ترمینال به دلیل ملاحظات پایداری، امنیت و عملکرد کلی مستثنی شده است.

هر برنامه mql5 با درخواست برای کار خود یک "مدل" از محیط معاملاتی را در حافظه پنهان خود دریافت می کند. کش یک ناحیه ویژه از حافظه برای دسترسی سریع به داده ها است. به عنوان مثال، قبل از شروع پردازش سفارش، باید سفارش مورد نیاز در حافظه پنهان برنامه mql5 بدست آید. تمام کارهای بعدی، هنگام مراجعه به سفارش، با کپی ذخیره شده آن سفارش انجام می شود.

کار با مواضع ، معاملات و دستورات تاریخ به روشی مشابه انجام می شود. طرح کلی به دست آوردن اطلاعات معاملاتی از برنامه MQL5 در شکل نشان داده شده است:

قبل از اینکه داده های مربوط به تاریخچه تجارت برای پردازش برنامه MQL5 در دسترس باشد ، باید از پایگاه داده ترمینال درخواست شود. پس از درخواست ، داده های به دست آمده در حافظه پنهان خود از برنامه MQL5 قرار می گیرند.

توجه: داده های موجود در حافظه نهان به طور خودکار با پایگاه داده ترمینال هماهنگ نمی شوند و بنابراین ، باید دائماً به روز شود تا وضعیت مناسب داده ها در حافظه پنهان حفظ شود.

در صورت استفاده نادرست از حافظه نهان ، احتمال عواقب وجود دارد.

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

عملکرد کار با حافظه پنهان

سابقه تجارت ممکن است شامل هزاران سفارش و معاملات اجرا شده باشد که برای کار فعلی برنامه MQL5 لازم نیست. بنابراین ، کار با حافظه نهان بر اساس اصل درخواست ها ساخته شده است که حافظه پنهان همیشه حاوی اطلاعاتی است که در آخرین اتصال به پایگاه داده ترمینال بارگذاری شده است. اگر نیاز به به دست آوردن کل تاریخ سفارشات و معاملات دارید ، باید با مشخص کردن فاصله مورد نظر صریحاً آن را درخواست کنید.

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

قبل از درخواست اطلاعات از حافظه نهان ، باید پر شود.

توجه: هرگونه درخواست برای پر کردن حافظه نهان ، بدون در نظر گرفتن نتیجه اجرای درخواست ها ، آن را پاک می کند.

توابع معاملاتی را می توان به دو دسته جدا کرد: توابع پر کردن حافظه نهان و توابع خواندن اطلاعات از حافظه نهان.

عملکرد پر کردن حافظه پنهان

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

عملکرد پر کردن کش معاملاتی (سفارشات و موقعیت های فعال):

  • OrderSelect(ticket) - با استفاده از توابع OrderGetDouble()، OrderGetInteger() و OrderGetString() سفارش فعال را توسط بلیط خود (از پایه ترمینال) در حافظه پنهان سفارش جاری برای درخواست بیشتر ویژگی های آن کپی می کند.
  • OrderGetTicket (شاخص) - از پایه ترمینال سفارش فعال، توسط ایندکس خود در لیست سفارشات پایه پایانه سفارشات، در حافظه پنهان سفارشات جاری برای درخواست بیشتر به خواص با استفاده از OrderGetDouble()، OrderGetInteger() کپی می کند. و توابع OrderGetString()تعداد کل سفارشات در پایه ترمینال را می توان با استفاده از تابع OrdersTotal() بدست آورد.
  • PositionSelect(symbol) - موقعیت باز را با نام نماد (از پایه ترمینال) برای درخواست بیشتر خصوصیات آن با استفاده از توابع PositionGetDouble()، PositionGetInteger() و PositionGetString() در حافظه پنهان کپی می کند.
  • PositionGetSymbol(index) - موقعیت باز را توسط شاخص خود در لیست موقعیت (از پایه ترمینال) پایه ترمینال در حافظه پنهان برای درخواست بیشتر خصوصیات آن با استفاده از PositionGetDouble()، PositionGetInteger() و PositionGetString کپی می کند.() کارکرد. تعداد کل موقعیت ها در پایه ترمینال را می توان با تابع PositionsTotal() بدست آورد.

عملکرد پر کردن کش تاریخچه:

  • HistoryOrderSelect(ticket) - برای فراخوانی های بیشتر به ویژگی های آن توسط توابع HistoryOrderGetDouble()، HistoryOrderGetInteger() و HistoryOrderGetString()، ترتیب تاریخ را توسط بلیط خود در حافظه پنهان سفارش های تاریخچه (از پایه ترمینال) کپی می کند.
  • HistoryDealSelect(ticket) - معامله را با بلیط خود در کش معاملات (از پایه ترمینال) برای فراخوانی های بیشتر به ویژگی های آن توسط توابع HistoryDealGetDouble()، HistoryDealGetInteger() و HistoryDealGetString() کپی می کند.

ما باید به طور جداگانه دو تابع را در نظر بگیریم که به طور کلی بر تاریخچه معاملاتی موجود در حافظه پنهان تأثیر می گذارد:

  • HistorySelect (شروع، پایان) - حافظه پنهان تاریخچه را با معاملات و سفارشات برای بازه زمانی مشخص شده سرور پر می کند. از نتایج اجرای این تابع، به مقادیری بستگی دارد که از HistoryDealsTotal() و HistoryOrdersTotal() برگردانده می شوند.
  • HistorySelectByposition (Position_ID) - با داشتن موقعیت شناسایی مشخص ، حافظه نهان تاریخ را با معاملات و سفارشات پر می کند. نتیجه اجرای این عملکرد ، همچنین بر HistoryDealStotal () و Historyorderstotal () تأثیر می گذارد.

سفارش و سفارش

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

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

موقعیت یابی

درست مانند سفارشات ، این دو کارکرد نیز به همان روش برای موقعیت ها کار می کنند - آنها حافظه نهان را با یک موقعیت واحد پر می کنند. PositiongetSymbol (شاخص) به عنوان یک پارامتر به شماره در لیست پایه موقعیت ها نیاز دارد و موقعیت (نماد) حافظه نهان را بر اساس نام نماد پر می کند ، که بر روی آن موقعیت باز می شود. نام نماد ، به نوبه خود ، را می توان با عملکرد PutSetsymbol (index) بدست آورد.

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

تاریخچه تاریخچه

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

اگر اعدام موفقیت آمیز باشد ، حافظه نهان حاوی یک سفارش واحد خواهد بود و عملکرد Historyorderstotal () یک واحد واحد را برمی گرداند. در غیر این صورت ، حافظه نهان سفارشات تاریخی خالی خواهد بود و عملکرد تاریخچه () صفر باز می گردد.

تاریخچه

HistoryDealSelect (بلیط) معامله را از ترمینال پایه مبتنی بر بلیط آن انتخاب می کند. این عملکرد برای استفاده در هنگام شناخته شدن بلیط معامله از قبل در نظر گرفته شده است.

اگر اعدام موفقیت آمیز باشد ، حافظه نهان شامل یک معامله واحد خواهد بود و عملکرد HistoryDealStotal () باز خواهد گشت 1. در غیر این صورت ، حافظه نهان معامله خالی خواهد بود و عملکرد HistoryDealStotal () صفر را برمی گرداند.

عملکرد برای به دست آوردن اطلاعات از حافظه پنهان

قبل از درخواست اطلاعات در مورد خصوصیات موقعیت ، معامله یا سفارش ، لازم است حافظه پنهان مربوط به برنامه MQL5 را به روز کنید. این به این دلیل است که ممکن است اطلاعات درخواستی قبلاً به روز شده باشد ، و این بدان معنی است که نسخه ، ذخیره شده در حافظه نهان ، از قبل قدیمی است.

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

  1. OrdergetDouble (type_property)
  2. OrderGetInteger (Type_Property)
  3. OrdergetString (Type_Property)

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

برای به دست آوردن اطلاعات در مورد یک موقعیت ، باید قبلاً با استفاده از یکی از دو کارکرد ، در حافظه نهان انتخاب و کپی شود: PostateGetSymbol یا PositionSelect. از این حافظه نهان است که مقادیر خاصیت موقعیت ، هنگامی که توابع مربوطه خوانده می شود ، داده می شود:

  1. POSIONGETDOUBLE (TYPE_PROPERTY)
  2. PationGetInteger (type_property)
  3. PutSetgetString (type_property)

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

سفارشات تاریخی

برای به دست آوردن اطلاعات در مورد نظم از تاریخ ، لازم است ابتدا با استفاده از یکی از سه کارکرد ، حافظه نهان سفارشات تاریخی را ایجاد کنید: تاریخچه (شروع ، پایان) ، تاریخچه SelectByposition () یا تاریخچه (بلیط). اگر اجرای موفقیت آمیز باشد ، حافظه نهان تعداد سفارشات را که توسط عملکرد Historyorderstotal () بازگردانده می شود ، ذخیره می کند. دسترسی به خواص این سفارشات با استفاده از عملکرد مناسب توسط هر عنصر در بلیط انجام می شود:

  1. HistoryordergetDouble (Ticket_order ، Type_Property)
  2. HistoryOrdergetInteger (Ticket_order ، Type_Property)
  3. HistoryordergetString (Ticket_order ، Type_Property)

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

برای به دست آوردن اطلاعات در مورد یک معامله خاص در تاریخ ، لازم است ابتدا با استفاده از یکی از سه کارکرد ، حافظه نهان معاملات را ایجاد کنید: HistorySelect (شروع ، پایان) ، HistorySelectByposition () یا HistoryDealSelect (بلیط). اگر اجرای عملکرد موفقیت آمیز باشد ، حافظه نهان معامله را در مبلغی که توسط عملکرد HistoryDealStotal () بازگردانده می شود ، ذخیره می کند. دسترسی به خواص این معاملات ، بر اساس بلیط ، با استفاده از توابع مناسب انجام می شود:

  1. HistoryDealgetDouble (Ticket_deals ، Type_Property)
  2. HistoryDealgetInteger (Ticket_deals ، Type_Property)
  3. HistoryDealgetString (Ticket_deals ، Type_Property)

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

عملکرد برای به دست آوردن بلیط از تاریخچه حافظه نهان

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

HistoryDealgetticket (Index) بلیط معامله را با فهرست آن از حافظه نهان معاملات باز می گرداند. بلیط این معامله را می توان توسط عملکرد HistoryDealselect (بلیط) ، که حافظه پنهان را پاک می کند ، استفاده کرد و در صورت موفقیت ، حافظه پنهان را تنها با یک معامله دوباره پر می کند. مقدار ، که توسط عملکرد HistoryDealStotal () بازگردانده شده است به تعداد معاملات موجود در حافظه نهان بستگی دارد.

توجه: قبل از فراخوانی توابع HistoryOrdergetTicket (index) و HistoryDealGetticket (index) ، باید حافظه نهان تاریخ را با سفارشات تاریخی و معاملات در حجم کافی پر کنید. برای انجام این کار ، از یکی از کارکردها استفاده کنید: HistorySelect (شروع ، پایان) ، HistorySelectByposition (Position_ID) ، HistoryOrdersElect (بلیط) و HistoryDealSelect (بلیط).

به دست آوردن اطلاعات با استفاده از سفارشات فعال

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

در مثال بالا فرض بر این است که بلیط سفارش از قبل شناخته شده است ، به عنوان مثال ، از متغیر جهانی بدست می آید. در موارد کلی ، با این حال ، اطلاعات بلیط وجود ندارد ، بنابراین ما باید به کمک عملکرد OrderGetticket (index) بپردازیم ، که یک سفارش را نیز انتخاب می کند و آن را در حافظه نهان قرار می دهد ، اما فقط شماره سفارش را در لیست قرار می دهد. از سفارشات فعلی ، باید به عنوان پارامتر مشخص شود.

الگوریتم کلی برای کار با سفارشات (مشابه با معاملات و موقعیت ها) موارد زیر است:

  1. با استفاده از تابع Orderstotal () تعداد کل سفارشات را بدست آورید.
  2. حلقه را از طریق جستجوی همه سفارشات ، توسط فهرست های آنها در لیست ، سازماندهی کنید.
  3. با استفاده از تابع OrderGetticket () ، هر سفارش را در حافظه نهان کپی کنید.
  4. با استفاده از توابع OrderGetDouble () ، OrderGetInteger () و OrderGetString () داده های سفارش صحیح را از حافظه نهان بدست آورید. در صورت لزوم ، داده های به دست آمده را تجزیه و تحلیل کرده و اقدامات مناسب را انجام دهید.

در اینجا یک نمونه مختصر از چنین الگوریتم آورده شده است:

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

نظارت مداوم بر موقعیت های باز فقط یک روش استاندارد نیست ، بلکه مطمئناً باید در هر نمونه اجرا شود. برای به دست آوردن اطلاعات در مورد موقعیت های خاص ، به اندازه کافی کافی است که نام ابزاری را که توسط آن باز است ، بدانید. برای انجام این کار ، از Function PositionSelect (نماد) استفاده کنید. برای این موارد ، که در آن EA فقط روی یک نماد کار می کند (روی نماد نمودار ، که به آن وصل شده است) ، نام نماد را می توان با یک تابع () نماد یا از یک متغیر از پیش تعریف شده _symbol بدست آورد.

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

الگوریتم کلی برای کار با موقعیت ها:

  1. با استفاده از تابع PositionsTotal() تعداد کل موقعیت ها را بدست آورید.
  2. حلقه را از طریق جستجوی همه موقعیت ها بر اساس نمایه های آنها در لیست سازماندهی کنید.
  3. با استفاده از تابع PositionGetSymbol() هر موقعیت را یکی یکی در کش کپی کنید.
  4. با استفاده از توابع PositionGetDouble()، PositionGetInteger() و PositionGetString() داده های موقعیت مورد نیاز را از کش بدست آورید. در صورت نیاز، داده های به دست آمده را تجزیه و تحلیل کرده و اقدامات مناسب را انجام دهید.

نمونه ای از چنین الگوریتمی:

قوانین کار با کش تاریخچه

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

تلاش برای رسیدگی به تمام سابقه معاملات، در اکثر موارد، اشتباه است. وقتی تعداد معاملات/سفارش های پردازش شده به هزاران و ده ها هزار می رسد، کار برنامه به شدت کند می شود.

توجه: همیشه با احتیاط به همه موارد فراخوانی تابع HistorySelect() مراجعه کنید! بارگذاری غیرمنتظره و بیش از حد تمام تاریخچه معاملات موجود در حافظه پنهان برنامه mql5، عملکرد آن را کاهش می دهد.

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

برای کار درست EA و نشانگر آنلاین، این به همان اندازه مهم است. یک کد غیربهینه برنامه می تواند کار حتی قوی ترین رایانه را فلج کند.

الگوریتم صحیح برای کار با تاریخچه معاملات:

  1. نیاز به درخواست تاریخچه معاملات در حافظه پنهان را تعیین کنید. اگر این کار ضروری نیست، اقدامات زیر را انجام ندهید.
  2. تاریخ نهایی تاریخ تجارت را تعیین کنید (شاید تاریخ تا لحظه ای لازم نباشد).
  3. تاریخ اولیه تاریخ تجارت را از تاریخ پایان محاسبه کنید. معمولاً ، EAS به سابقه تجارت نیاز دارد ، بدون عمیق تر از یک روز یا هفته.
  4. بلیط های معاملات و سفارشات تاریخی را برای به دست آوردن خواص ، توسط بلیط های شناخته شده بدست آورید:
    • HistoryordergetDouble ()
    • HistoryordergetInteger ()
    • HistoryordergetString ()
    • HistoryDealgetDouble ()
    • HistoryDealgetInteger ()
    • HistoryDealgetString ()
  5. اگر بلیط ها مشخص نیستند ، و در صورت لزوم ، چرخه ای را از طریق مرتب سازی ترتیب دهید.
  6. در حلقه ، بلیط برای هر معامله/سفارش را از حافظه نهان تاریخ تجارت ، توسط فهرست (HistoryorDergetticket (فهرست) و HistoryDealGetticket (فهرست)) بدست آورید.
  7. ویژگی های لازم سفارشات و معاملات را با بلیط شناخته شده بدست آورید (به نکته 4 مراجعه کنید).

نمونه ای از یک کد برای این الگوریتم:

ایده اصلی ارائه شده توسط این مثال - این است که ابتدا باید واقعیت تغییراتی را که در تاریخ تجارت اتفاق می افتد تأیید کنید. یکی از گزینه ها این است که ، در داخل عملکرد Ontrade () ، برای متغیر جهانی Tidehistor y-Dychanged ، ارزش True تعیین شده است ، زیرا رویداد تجارت همیشه با هر نوع رویداد تجاری باز می گردد.

اگر سابقه تجارت تغییر نکرده باشد ، دیگر نیازی به بارگذاری تاریخ تجارت در حافظه پنهان و هدر دادن منابع CPU نیست. این منطقی است و نیازی به توضیحی ندارد. اگر تاریخچه تجارت تغییر کرده است ، ما فقط قسمت لازم از آن را بارگذاری می کنیم و فقط یک بار از هر معامله/سفارش عبور می کنیم. از چرخه های تکرار غیر ضروری خودداری کنید.

توجه: هر درخواست به حافظه نهان کل تاریخ تجارت ، که توسط عملکرد HistorySelect () انجام شده است ، و هر چرخه پردازش معاملات و سفارشات از تاریخ ، باید پایه گذاری شود. در غیر این صورت ، منابع رایانه شما به طور ناکارآمد صرف می شود.

نمونه هایی از کار صحیح و نادرست با تاریخ تجارت به این مقاله پیوست شده است ، به عنوان پرونده های اشتباه withhistory. mq5 و rightworkwithhistory. mq5.

به دست آوردن اطلاعات با سفارشات از تاریخ

کار با دستورات تاریخی تقریباً هیچ تفاوتی با کار با سفارشات فعال ندارد ، اما یک استثنا. اگر تعداد سفارشات فعال در حافظه پنهان برنامه MQL5 بیش از یک باشد ، نتیجه تاریخچه تاریخچه () و تعداد سفارشات تاریخی موجود در حافظه نهان ، بستگی به میزان بارگیری تاریخ تجارت توسط تاریخچه دارد.(شروع ، پایان) ، عملکرد HistorySelectByposition () یا HistoryOrderselection ().

توجه: اگر تاریخچه تجارت توسط یکی از توابع تاریخچه () ، تاریخچه SelectByposition () یا HistoryOrderseLect () در حافظه نهان MQL5 بارگیری نشده است ، سپس کار با دستورات و معاملات تاریخی غیرممکن است. قبل از دریافت داده های مربوط به تاریخچه تجارت ، حتماً سابقه مورد نیاز معاملات و سفارشات را درخواست کنید.

به عنوان مثال ، ما یک اسکریپت را ارائه می دهیم ، که آخرین سفارش روز گذشته را جستجو می کند و اطلاعات را برای آن نمایش می دهد.

در موارد کلی تر ، لازم است که سفارشات موجود در حلقه را از حافظه نهان مرتب کرده و آنها را تجزیه و تحلیل کند. الگوریتم عمومی به شرح زیر خواهد بود:

  1. محدوده زمانی از تاریخ کافی را تعیین کنید ، اگر تاریخ توسط عملکرد HistorySelect () بارگذاری شود - توصیه نمی شود کل تاریخ تجارت را در حافظه نهان بارگذاری کنید.
  2. بار در حافظه نهان برنامه ، تاریخچه تاریخچه معاملات () ، تاریخچه SelectByposition () یا HistoryOrderseLect (بلیط) بارگذاری کنید.
  3. با استفاده از Historyorderstotal () تعداد کل سفارشات را در حافظه پنهان بدست آورید.
  4. چرخه را با جستجو از طریق همه سفارشات توسط فهرست های آنها در لیست سازماندهی کنید.
  5. با استفاده از عملکرد HistoryOrdergetTicket () بلیط سفارشات را در حافظه نهان بدست آورید.
  6. داده های سفارش را از حافظه نهان ، با استفاده از توابع historyordergetdouble () ، historyordergetinteger () و historyordergetString () بدست آورید. در صورت لزوم ، داده های به دست آمده را تجزیه و تحلیل کرده و اقدامات مناسب را انجام دهید.

نمونه ای از چنین الگوریتمی:

توجه: همیشه با احتیاط به همه موارد فراخوانی عملکرد HistorySelect () مراجعه کنید! بارگذاری غیرقابل فکر و بیش از حد همه تاریخچه تجارت موجود در حافظه نهان MQL5 ، عملکرد آن را تخریب می کند.

به دست آوردن اطلاعات در مورد معاملات از تاریخ

پردازش معاملات دارای ویژگی های مشابه پردازش سفارشات تاریخی است. تعداد معاملات در تاریخ تجارت و نتیجه اجرای HistoryDealStotal () ، بستگی به میزان بارگیری تاریخچه تجارت توسط HistorySelect (شروع ، پایان) یا HistorySelectByposition () دارد.

برای پر کردن حافظه پنهان با تنها یک معامله با بلیط خود ، از عملکرد HistoryDealSelect (بلیط) استفاده کنید.

در موارد کلی تر ، لازم است در حلقه معامله از حافظه نهان جستجو کنید و آنها را تجزیه و تحلیل کنید. الگوریتم عمومی به شرح زیر خواهد بود:

  1. مرزهای تاریخ کافی را تعیین کنید ، اگر تاریخچه توسط عملکرد تاریخچه (شروع ، پایان) بارگذاری شود - در این صورت توصیه نمی شود که کل تاریخ تجارت را در حافظه نهان بارگذاری کنید.
  2. بارگذاری در حافظه نهان برنامه ، تاریخچه معاملات عملکردهای تاریخچه () یا HistorySelectByposition ().
  3. با استفاده از عملکرد HistoryDealStotal () تعداد کل معاملات را در تاریخ بدست آورید.
  4. چرخه را با جستجوی همه معاملات ، با شماره آنها در لیست ، سازماندهی کنید.
  5. با استفاده از HistoryDealGetticket () بلیط معامله بعدی را در حافظه پنهان تعیین کنید.
  6. با استفاده از توابع HistoryDealgetDouble () ، HistoryDealgetInteger () و HistoryDealgetString () اطلاعات مربوط به این معامله را از حافظه نهان بدست آورید. در صورت لزوم ، داده های به دست آمده را تجزیه و تحلیل کرده و اقدامات مناسب را انجام دهید.

نمونه ای از چنین الگوریتمی برای محاسبه سود و زیان:

توجه: همیشه با احتیاط به همه موارد فراخوانی عملکرد HistorySelect () مراجعه کنید! بارگذاری غیرقابل فکر و بیش از حد همه تاریخچه تجارت موجود در حافظه نهان MQL5 ، عملکرد آن را تخریب می کند.

به دست آوردن در حافظه نهان توسط شناسه موقعیت (موقعیت_ودتر)

عملکرد HistorySelectByposition (position_id) درست مانند عملکرد HistorySelect (شروع ، پایان) حافظه نهان را با معاملات و سفارشات از تاریخ پر می کند ، اما فقط در یک شرط - آنها باید شناسه مشخصی از موقعیت (موقعیت_ودتر) داشته باشند. شناسه موقعیت - یک عدد منحصر به فرد است که به طور خودکار به هر موقعیت باز شده مجدداً اختصاص می یابد و در طول زندگی تغییر نمی کند. در همین حال. لازم به ذکر است که تغییر موقعیت (تغییر نوع موقعیت از موقعیت_type_buy به position_type_sell) شناسه موقعیت را تغییر نمی دهد.

هر موقعیت باز نتیجه یک یا چند معاملات در آن ساز است. بنابراین ، برای تجزیه و تحلیل تغییرات موقعیت ، در طول عمر خود ، هر معامله و نظم ، که براساس آن معامله انجام شده است ، یک شناسه به موقعیتی اختصاص می یابد که در این معامله شرکت کرده است. بنابراین ، با دانستن شناسه موقعیت های باز فعلی ، می توانیم کل تاریخ را بازسازی کنیم - تمام سفارشات و معاملات را که آن را تغییر داده است ، پیدا کنیم.

تابع HistorySelectByposition (Position_ID) برای صرفه جویی در برنامه نویس از نوشتن کد خود برای تکرار در کل تاریخ تجارت در جستجوی چنین اطلاعاتی استفاده می کند. یک الگوریتم معمولی برای کار با این عملکرد:

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

نتیجه

کل بستر های نرم افزاری زیر سیستم تجاری Metatrader 5 به خوبی فکر و کاربر پسند بیشتر ، فراوانی توابع معاملاتی ، به ما امکان می دهد تا هر مشکل خاص را به روش کارآمد حل کنیم.

اما حتی با وجود این واقعیت که کلاس های تجاری تخصصی از کتابخانه استاندارد ، به ما اجازه می دهد تا در مورد بسیاری از ظرافت ها نگران نباشیم و برنامه هایی را در سطح بالایی بنویسیم ، بدون آنکه به اجرا درآید ، درک اصول اولیه ، به ما امکان می دهد بیشتر ایجاد کنیمتجارت قابل اعتماد و کارآمد EAS.

تمام نمونه های داده شده را می توان در پرونده ها ، پیوست به این مقاله یافت.< SPAN> با استفاده از عملکرد HistorySelectByposition () ، به حافظه نهان تاریخ تجارت ، همه سفارشات و معاملات ، که شناسه آن ، برابر با شناسه موقعیت فعلی است ، بدست آورید.

برچسب ها

ثبت دیدگاه

مجموع دیدگاهها : 0در انتظار بررسی : 0انتشار یافته : ۰
قوانین ارسال دیدگاه
  • دیدگاه های ارسال شده توسط شما، پس از تایید توسط تیم مدیریت در وب منتشر خواهد شد.
  • پیام هایی که حاوی تهمت یا افترا باشد منتشر نخواهد شد.
  • پیام هایی که به غیر از زبان فارسی یا غیر مرتبط باشد منتشر نخواهد شد.