توابع پوزیشن گیری و مدیریت
درس چهارم
در این درس با تابع (Order Send) در زبان برنامه نویسی MQL آشنا خواهید شد. توابع ترید در اسکریپت و اکسپرتها مورد استفاده قرار می گیرند. و پر کاربردترین این توابع ، تابع (Order Send) میباشد.
(Order Send):
این تابع برای باز کردن پوزیشن(position) مورد استفاده قرار می گیرد. 11 ورودی می پذیرد و مقدار خروجی آن عدد Int می باشد.در مقدار خروجی چنانچه پوزیشن باز شود شماره پوزشن را به خروجی می دهد در این صورت منفی1 را به خروجی خواهد داد. همچنین برای باز کردن پوزیشن هایی از نوع Market مثل buy و sell و پوزشن هایی از نوع pending مورد استفاده قرار می گیرد. جهت آشنایی بیشتر با آرگمان های تابع به جدول زیر دقت نمایید.
به عنوان مثال :
;OrderSend(Symbol(),OP_BUY,1, Ask,3,1.17432,1.17510,“My order”,12345,0,clrGreen)
نوع پوزیشن:
برای آشنایی با OP_BUY ها به جدول زیر را دقت کنید.
محاسبه حد سود و ضرر:
استاپ لاس و تیک پرافیت بر اساس 50 پونت بیشتر ویا کمتر از قیمت ورود به پوزیشن
تابع (OrderClose):
برای close کردن order هایی مورد استفاده قرار می گیرد که از نوع MarketOrder هستند. مثل پوزیشن buy و پوزیشن sell .
ticket : این پارامتر مربوط به ticket number پوزیشن می باشد. ورودی دوم مقدار لات که بناست بسته شود. اگر بخواهید کل پوزیشن بسته شود باید مقدار کل را وارد کنید همچنین می توان نصف پوزیشن را بست، در این حال مقدار نصف را باید وارد کنید. به عنوان مثال:
;OrderClose(order_ticket,1,Bid,3,Red)
Price: این پارامتر شامل قیمت close شدن پوزیشن می باشد . این قیمت بستگی به نوع پوزیشن دارد ، اگر پوزیشن از نوع خرید یا Buy باشد قیمت close همان قیمت bid می باشد ولی اگر نوع پوزیشن از نوع sell باشد قیمت close شدن پوزیشن، همان قیمت Ask می باشد .
Slippage: این پارامتر شامل مقدار slippage می باشد.
arrow_color : رنگ فلشی است که پس از close کردن پوزیشن روی چارت قرار می گیرد.
تابع (OrderDelete):
برای delete کردن پوزیشن های pending از این تابع استفاده می شود. خروجی این تابع از نوع bool می باشد. اگر این تابع موفق شود پوزیشن مورد نظر را close کند مقدار true و در غیر این صورت مقدار false بر می گرداند.
مثال :
; OrderDelete(order_ticket)
❓ مسئله شماره 7:
اکسپرتی بنویسید که زمان اجرای در چارت یک پوزیشن buy با حجم یک لات بگیرد و در زمان برداشت اکسپرت از چارت پوزیشن گرفته شده را ببندد.
در پاسخ اکسپرت بسازید و در قسمت onInt دستورها را وارد نمایید
اینک به بررسی یکایک مقدارها می پردازیم.
Symbol : این پارامتر نام نمادی است که پوزیشن قرار است روی آن باز شود و اگر بخواهیم پوزیشن روی نمادی که اسکریپت و اکسپرت را روی آن قرار دادیم باز شود از ()symbol استفاده می کنیم.
Cmd: این پارمتر برای تعیین نوع order می باشد و برای پوزیشن های Market و Pending متفاوت می باشد . به عنوان مثال برای باز کردن پوزیشن buy از OP_BUY و یا مقدار صفر و برای باز کردن پوزیشن sell از OP_SELL و یا عدد 1 استفاده می کنیم.
Volume : این پارامتر مربوط به volume و یا lotsize می باشد و می توان مقدار lotsize را با دو رقم اعشار وارد کرد.
Price : این پارامتر مربوط به قیمت باز شدن پوزیشن می باشد. اگر پوزیشن از نوع خرید باشد قیمت Ask و چنانچه از نوع فروش باشد قیمت Bid را وارد می کنیم . دلیل استفاده از Ask در buy به تصاویر زیر دقت نمایید.
داخل چارت رفته ، راست کلیک کرده و از منوی ظاهر شده گزینه properties را انتخاب نمایید.
از صفحه نمایش شده گزینه show Ask line را تیک دار کنید و تیک را از عبارت Show grid بردارید.
Slippage : این پارامتر بر اساس Point تعیین می شود و اگر مقدار آن 50 point باشد بدین معنی است که اگر قیمت به اندازه 5pip بالاتر و یا پایین تر رفت باز هم پوزیشن مورد نظر ما باز شود و در واقع این مقدار قابل اغماض باشد .
Stoploss: این پارامتر بر حسب قیمت می باشد و مقدار Stoploss را تعیین می کند.
Takeprofit: این پارامتر بر حسب قیمت می باشد و مقدار Takeprofit را تعیین می کند.
Comment: این پارامتر برای توضیحات پوزیشن مورد استفاده قرار می گیرد.
Magic: اگر همزمان بیش از یک اکسپرت در حال اجرا باشد برای اینکه هر اکسپرت بتواند تشخیص بدهد که کدام یک از order ها توسط همان اکسپرت باز شده است از پارامتر magic number استفاده می کند. و هر اکسپرت یک magic number یکتا و منحصر به فرد دارد. لذا از اعداد 123456 پرهیز کنید و عدد خاص خود را وارد نمایید.
Expiration : این پارامتر مربوط به تاریخ انقضای order های pending می باشد . مثلا زمانی که یک پوزیشن buy_stop باز می کنیم و لازم است که چنانچه بعد از ساعت order فعال نشد به صورت اتوماتیک Delete بشود از این پارامتر استفاده می کنیم.
arrow_color : این پارامتر رنگ فلشی است که پس از باز کردن پوزیشن روی چارت قرار می گیرد.
از آن جایی که بناست از این تابع برای ondeinit نیز استفاده نمایید لذا باید در قسمت بالای تابع onint وارد نمایید. و در نهایت compile را انتخاب و نباید خطایی نمایش شود.
دستورهای بالا برای پوزیشن گیری می باشد. برای بستن پوزیشن از تابع onDeinit استفاده نمایید.
در پایان compile را انتخاب کرده و نباید خطایی نمایش شود.
سپس وارد برنامه شوید. برای بررسی نمودن برنامه و اینکه اکسپرت ترید داشته باشد، وارد سربرگ Tools شده و گزینه Options را انتخاب کنید.
تمام گزینه ها اعم از:
Allow DLL imports(potentially dangerous, enable only, Allow automated trading for trusted applications) و .Allow WebRequest for listed URL تیک دار شوند.
سپس پوشه نام کلاس را به داخل برنامه درگ کنید. تا کادر (نام کلاس تعریف شده)expert – class4 نمایش شود. گزینه Allow live trading را تیک دار کنید.
در این حالت باید پوزیشن گرفته شود.
جهت نمایش comment روی نوار راست کلیک کرده و comments را انتخاب کنید.
بنابراین برای ترید کردن باید شکلک بالای صفحه حالت خندان داشته باشد.
با پاک کردن اکسپرت باید پوزیشن نیز پاک شود. با راست کلیک در فضای برنامه و انتخاب گزینه remove اکسپرت را پاک کنید.
فلش های سبز و قرمز در برنامه نمایش می شود که فلش سبز به معنای نقطه ای که پوزیشن در آن باز شده و فلش قرمز به معنای close (بستن) پوزیشن می باشد.
متغیر Point :
کوچکترین گام حرکتی که هر جفت ارز می تواند داشته باشد Point می باشد. مثلا در جفت ارز EURUSD که قیمت تا 5 رقم اعشار نمایش داده می شود کوچکترین گام حرکتی 0.00001 (1Point) می باشد.
به عنوان مثال:
دستور زیر را وارد متاتریدر کنید تا بر روی برنامه اعمال شود. به عنوان مثال:
در قسمت چارت عدد محاسباتی نمایش می شود. توجه نمایید صفر آخر نمایش نمی شود.
جهت درک بیشتر شیوه حذف صفرها عدد را به 51 تبدیل کنید.
می توان عدد بالای آن را نیز جمع بست.
دقت نمایید در کدنویسی چنانچه معادله 2*10+2 مشاهده شود اولویت محاسبه با ضرب می باشد سپس نوبت به جمع یا تفریق می رسد. حال چنانچه بخواهید ابتدا دو عدد با هم جمع بشوند سپس عملیات ضرب صورت بگیرد باید ابتدا دو عدد جمع را داخل پرانتز قرار دهید. در این حالت اولویت برای اعداد داخل پرانتز خواهد بود.
بهتر این است که آنچه را که می خواهید اول انجام بشود داخل پرانتز قرار بگیرد. به عنوان مثال:
چنانچه بخواهید برای مثال سابق یک استاپ لاس یا تیک پرافیت قرار دهید به مثال زیر دقت نمایید.
اگر موس را بگیرید برابری آن قابل مشاهده می باشد.
منبع : کتاب آموزش زبان MQL (دوره مقدماتی)
مدرس : استاد حسین احمدی
پاسخها