چگونه می توان تمام اسکریپت ها را در MQL4 نوشت؟(3 از 4)

ساخت وبلاگ

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

int ordersend (نماد رشته ، int cmd ، دو برابر ، قیمت دوتایی ، لغزش int ، دو برابر کردن ، دو برابر کردن ، نظر رشته = null ، int magic = 0 ، dateTime Endation = 0 ، Color Arrow_color = clr_none)

به پارامتر "int magic = 0" توجه داشته باشید که به یک شماره جادویی اشاره دارد که ممکن است هنگام ایجاد سفارش وارد شود. همین شماره جادویی ممکن است هنگام بستن سفارش ارجاع شود. اگر شما دو مشاور متخصص MT4 مختلف را بر روی یک نماد واحد اجرا می کنید ، می توانید دو شماره جادویی مختلف را در کارکرد سفارش () هر یک از مشاور های متخصص MT4 مشخص کنید ، تا اطمینان حاصل شود که هرکدام می توانند روال سفارش نزدیک خود را به طور جداگانه انجام دهند. بدون استفاده از یک شماره جادویی منحصر به فرد برای هر یکمشاور متخصص MT4، هر یک از متخصصان می توانند سفارشات افتتاح شده توسط یک مشاور متخصص MT4 را ببندند. این معمولاً هدف یک مشاور متخصص MT4 نیست ، هرچند در بعضی موارد مطلوب است که سفارشات ایجاد شده توسط یک مشاور متخصص MT4 متفاوت را ببندد.

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

int slippage = 5 ؛
int magicNumber = 321 ؛

for (int i = OrdersTotal(); i>= 0 ؛من--)

 orderselect (i ، select_by_pos ، mode_trades) ؛
 if (OrderType () == op_buy && نماد () == Ordersymbol () 
 && MagicNumber == OrderMagicNumber ())
 BOOL CLOSE = ORDERCLOSE (OrderTicket () ، سفارش () ، پیشنهاد ، لغزش ، سفید) ؛
 if (OrderType () == op_sell && نماد () == Ordersymbol ()
 && MagicNumber == OrderMagicNumber ())
 BOOL CLOSE = ORDERCLOSE (OrderTicket () ، سفارش () ، سؤال ، لغزش ، سفید) ؛

سرانجام ، می توان کد MQL4 را اضافه کرد که تضمین می کند زمینه تجارت آماده باشد و جدیدترین قیمت ها در دسترس هستند. کد MQL4 در تابعی به نام Clakethis قرار داده شده است ، زیرا روال فقط با شماره جادویی داده شده یک نماد واحد را می بندد.

void clakethis (int slippage ، int magicnumber)

for (int i = OrdersTotal(); i>= 0 ؛من--)

 orderselect (i ، select_by_pos ، mode_trades) ؛
 در حالی که (iStradeContextBusy ()) خواب (100) ؛
 تازه کردن () ؛
 if (OrderType () == op_buy && نماد () == Ordersymbol () 
 && MagicNumber == OrderMagicNumber ())
 BOOL CLOSE = ORDERCLOSE (OrderTicket () ، سفارش () ، پیشنهاد ، لغزش ، سفید) ؛
 if (OrderType () == op_sell && نماد () == Ordersymbol ()
 && MagicNumber == OrderMagicNumber ())
 BOOL CLOSE = ORDERCLOSE (OrderTicket () ، سفارش () ، سؤال ، لغزش ، سفید) ؛

عملکرد IStradeContextBusy () یک Boolean True را درست همانطور که انتظار می رود وقتی برخی از EA دیگر در حال اتصال به تجارت هستند ، باز می گرداند و در صورت وجود تجارت ، نادرست است. از طرف دیگر ممکن است از عملکرد IStradeAllowed () استفاده شود زیرا این عملکرد نه تنها بررسی می کند که زمینه تجارت شلوغ نیست ، بلکه بررسی می کند که تجارت برای متخصص مجاز است.

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

عملکرد Refreshrates () قیمت های فعلی را به روز می کند. اگر در حال ارسال سفارشات و دریافت خطاهای 135 (err_price_changed) یا 138 (err_requote) هستید ، باید از تابع Refreshrates () استفاده کنید تا قیمت های جدید را مجبور کنید تا متغیرهای تجاری خود را به روز کنید. این یک عمل خوب برای تلاش برای تازه کردن نرخ در طی یک حلقه نزدیک است زیرا سفارشات بسته شدن ممکن است زمان لازم باشد ، در این زمان ممکن است قیمت ها باعث ایجاد خطا شوند.

عملکرد Clakethis () ممکن است از هر عملکرد MT4 دیگر به سادگی به شرح زیر برای لغزش 7 پیپ و تعداد جادویی صفر فراخوانی شود:

Clakethis (7،0) ؛ 

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

پلتفرم های تجاری...
ما را در سایت پلتفرم های تجاری دنبال می کنید

برچسب : نویسنده : مریم کاویانی بازدید : 27 تاريخ : سه شنبه 24 مرداد 1402 ساعت: 12:07