نمونه کد نویسی اکسپرت به صورت کامل(بخش دوم)
درس هفتم
❓ مسئله شماره 11:
اکسپرتی با مشخصات و تنظیمات زیر را بنویسید:
- در ابتدای هر کندل روزانه یک Order buy stop در high کندل روزانه قبلی و یک Order Cell Stop در Low کندل روزانه قبلی قرار دهد.
- در پایان روز Order های باز شده بسته شوند و Order های باز نشده پاک گردند.
- میزان حجم Orders توسط کاربر قابل تغییر باشد.
قبل از پاسخ دهی شرایط قرار دادن order ها را دقت کنید. سپس وارد کدنویسی شوید.
اکسپرتی بسازید و نام گذاری کنید. کاربر گرفته و مقدار اولیه را وارد نمایید به عنوان مثال:
سپس وارد تابع OnTick شوید و دستورها وارد نمایید . به عنوان مثال:
سپس دو شرط در کوتیشن را بررسی می کند:
شرط اول تابع orders را بررسی می کند. در حقیقت تابع orders پوزیشن هایی را می شمارد که شماره magic آنها با ورودی تعریف شده یکی باشد. در مثال بالا پوزیشن هایی که شماره مجیک آن ها 1212 می باشند را می شماره به عنوان مثال کدها در تصویر زیر تعریف شده است:
با دستور for و if تک تک پوزیشن ها بررسی شد.
بنابراین اگر order با شماره مجیک 1212 وجود نداشت یعنی مساوی با صفر بود، BUYSTOP تعریف کند. جزئیات دستور در تصویر زیر می باشد.
سپس بررسی می کند order با شماره مجیک 2121 وجود نداشته باشد BUYSDND تعریف کند.
در دو مثال بالا شرایط order گذاری تعریف گردید.
تابع Deleteorders:
این تابع void هست و بدون ورودی می باشد. با حقله for و if یک به یک پوزیشن ها را انتخاب می کند پوزیشن انتخابی ابتدا شماره مجیک را بررسی می کند که همان شماره های تعریف شده هستند یا خیر. تا اطمینان حاصل شود که اکسپرت بدون خطا گرفته شد.
فراخوانی بستن آن مرتبط به اول کندل یا اخر کندل نیست. به زمان پوزیشن ربط دارد. منتهی نباید درون شرط قرار بگیرد.
orderopenTime:
روزی که پوزیشن باز شده را بررسی می کند. که درون تابع TimeDay قرار می گیرد.
شرط بدین معناست که: اگر پوزیشن buystop یا sellstop بود، پوزیشن را delete کن. اما اگر buystop باز شده باشد تبدیل به BUY شده و اگر sellstop باز شده باشد تبدیل می شود به SELL.
در پایان کدنویسی compile را کلیک کنید و نباید اخطاری نمایش شود.
وارد برنامه شوید و از قسمت symbol نام کلاس را انتخاب کنید.
می توانید از قسمت Export properties سربرگ inputs مقدار ورودی ها را بررسی نمود.
با کلیک بر start برطبق پوز ها برنامه شروع به کار کردن می کند.
آنچه در کادر زردرنگ مشاهده می کنید بدین معناست که پوزیشن stopsell باز شده، قیمت را نتوانسته بیاورد و بسته شد.
کادر سبز رنگ به معنای پوزیشن stopbuy می باشد که باز شده و در پایان روز آن را بسته.
تمام جزئیات عملیات را می توانید در سربرگ results مشاهده کنید.
اگر به صورت رورانه هم آن را بررسی کنید لازم است قسمت period گزینه Daily راانتخاب کنید تا عملکرد روزانه ان را مشاهده کنید. سپس srart را کلیک کنید.
بنابراین برنامه به صورت کامل در حال انجام عملیات تعریف شده می باشد. Buy و sell را به طور منظم نمایش می دهد. ممکن است با چنین موردی مواجه شوید که کندل صعودی نیست و نزولی عمل می کند.
در این صورت می توانید با تغییر دادن BUYSTOP و SELLSTOP در متاتریدر مشکل را برطرف نمود.
همچنین در Deleteorder به جای buystop و sellstop ، BUYLIMIT و SELLLIMIT قرار دهید.
بار دیگر پوزیشن گیری کنید.
در این حالت پوزیشن صعودی شد.
در قسمت گزارش گیری سربرگ Report مبلغ سود را مشاهده خواهی کرد. البته نکته شایان ذکر سود ماه گذشته را نمایش داده است.
منبع : کتاب آموزش زبان MQL (دوره مقدماتی)
مدرس : استاد حسین احمدی
پاسخها
سلام خسته نباشید
برای خط دستور من
OrderSend(_Symbol, OP_BUY, lotSize, Ask, 3, 0, 0, “Buy Trade”, 0, 0, Green);
ارور میدهد
‘OP_BUY’ – undeclared identifier
‘OrderSend’ – Wrong parameters count
میشه راهنمایی کنید مشکل چی میتونه باشه ؟
ممنون
سلام ،به احتمال زیاد دارید روی متاتریدر 5 کد رو مبزنید این کد برای mql4 هست
نحوه اجرای خط به خط برنامه در MQL5 چگونه هست لطفا؟
سلام ،سوالتون کلی هست ،باید ویدیو های مربوط به mql رو بیبینید