مشاور کارشناس ساده

  • 2021-09-20

این بخش بر اساس اصول ایجاد یک مشاور کارشناس ساده تجارت است.

مشکل 29. یک مشاور متخصص تجارت ایجاد کنید.

استدلال های اولیه

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

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

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

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

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

ساختار یک مشاور متخصص ساده

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

شکل 109. طرح ساختاری یک مشاور کارشناس ساده.

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

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

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

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

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

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

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

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

استراتژی تجارت

قیمت بازار دائما در حال حرکت است. وضعیت بازار در هر لحظه از زمان می تواند به صورت مشروط یا به عنوان یک روند - تغییر قیمت یک طرفه قوی (افزایش یا سقوط) یا به عنوان یک حرکت قیمت جانبی مسطح با انحراف ضعیف از میانگین مشخص مشخص شود. این خصوصیات بازار مشروط است ، زیرا هیچ معیار روشنی وجود ندارد ، طبق این امر می توان روند یا مسطح را مشخص کرد. به عنوان مثال ، حرکات جانبی طولانی با انحرافات قوی که نه در یک مسطح و نه به یک روند قابل ردیابی است. به طور کلی فرض بر این است که بازار عمدتاً در حالت حرکت جانبی قرار دارد و روندها معمولاً 15-20 ٪ از زمان انجام می شود.

شکل 110. مسطح و روند در بازار.

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

معیارهای تجارت

در این مثال ما سعی خواهیم کرد که یک مشاور متخصص روند را بسازیم ، یعنی یکی از مواردی که در جهت حرکت قیمت سفارشات را باز می کند. بنابراین ، ما باید در بین شاخص های مختلف فنی مواردی را پیدا کنیم که روند شروع روند را تشخیص می دهند. یکی از ساده ترین روش های جستجو در معیارهای معاملاتی بر اساس تجزیه و تحلیل ترکیب MAS با دوره های متوسط مختلف است. شکل 111 و شکل 112 موقعیت دو MA مختلف (با دوره میانگین 11 و 31) را در قطعات مختلف بازار نشان می دهد. میانگین با دوره متوسط کوچک (خطوط قرمز) به نمودار قیمت نزدیکتر ، پیچ و تاب و متحرک نزدیکتر است. میانگین های حرکت با دوره متوسط متوسط (خط آبی) بی اثر تر هستند ، تاخیر بیشتری دارند و از قیمت بازار دورتر هستند. بیایید به مکانهایی توجه کنیم که MAS با دوره های متوسط مختلف از آن عبور کنند و سعی کنیم تصمیم بگیریم ، آیا می توان از واقعیت عبور MA به عنوان یک معیار خواندن استفاده کرد.

شکل 111. عبور از MA (11) و MA (31) هنگامی که جهت حرکت قیمت تغییر می کند.

در شکل 111 ما بخشی از بازار را می بینیم که باز کردن سفارشات در جهت حرکت قیمت در MA Crossing توجیه شده است. در نقطه ، خط قرمز از پایین از پایین به سمت بالا عبور می کند ، پس از آن قیمت بازار برای مدتی در حال رشد است. عبور معکوس بیشتر MA نشان دهنده تغییر جهت حرکت قیمت است. اگر یک سفارش خرید را در نقطه A باز کنیم و آن را در B ببندیم ، متناسب با اختلاف قیمت A و B سود می گیریم.

شکل 112. عبور از MA (11) و MA (31) هنگام تغییر جهت حرکت قیمت.

در عین حال لحظات دیگری در بازار وجود دارد که MA Cross ، اما این منجر به افزایش یا سقوط قیمت بیشتر نمی شود (شکل 112). سفارشاتی که در Crossing Ma در چنین لحظه هایی افتتاح شد ، منجر به خسارات خواهد شد. اگر فروش در A باز شود و در B بسته شود ، چنین معاملاتی ضرر و زیان به همراه خواهد داشت. همین مورد را می توان در مورد سفارش خرید که در B باز شد و در C بسته شد ، گفت.

موفقیت کل استراتژی اجرا شده بر اساس عبور از MA بستگی به تعداد قطعاتی دارد که می توانند به عنوان روند و مسطح مشخص شوند. در Flat اغلب گذرگاه ما یک رویداد معمولی است که با هر استراتژی روند تداخل دارد. تعداد زیادی سیگنال دروغین به عنوان یک قاعده منجر به ضرر می شود. به همین دلیل است که این علامت - عبور از MAS با دوره میانگین مختلف - می تواند برای ایجاد استراتژی های معاملاتی فقط در ترکیب با سایر علائم اثبات یک روند استفاده شود. در این مثال (برای ساختن یک مشاور ساده متخصص) ما باید از استفاده از این علامت خودداری کنیم.

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

شکل 113. حرکت قیمت قوی می تواند به پیشرفت روند منجر شود.

شکل 113 دوره بازار را نشان می دهد که یک حرکت قوی منجر به ادامه تغییر قیمت در همان جهت می شود. به عنوان "یک حرکت قوی" ممکن است از تفاوت MAS با دوره های متوسط مختلف استفاده کنیم. هرچه حرکت قوی تر باشد ، تاخیر MA با دوره متوسط بزرگتر از MA با یک دوره کوچک از میانگین بزرگتر است. علاوه بر این ، حتی حرکات قیمت ناپیوسته قوی با بازده بیشتر منجر به تفاوت زیادی بین MAS نمی شود ، یعنی سیگنال های کاذب بی شماری ظاهر نمی شوند. به عنوان مثال ، پرش قیمت با 50 امتیاز با بازده بیشتر (در مرکز در شکل 113) باعث افزایش اختلاف بین MAS فقط با 20 امتیاز می شود. در عین حال ، یک حرکت واقعاً قوی (که معمولاً با اصلاح قابل توجهی همراه نیست) در نقطه A منجر به افزایش اختلاف تا 25 - 30 امتیاز شد.

اگر هنگام دستیابی به مقدار مشخصی از اختلاف بین MA ، به عنوان مثال در A ، سفارش خرید باز شود ، احتمالاً با رسیدن قیمت به مقدار سفارش متوقف از پیش تعیین شده ، این سفارش سودآور خواهد بود. بیایید از این مقدار به عنوان معیار معاملاتی در مشاور متخصص خود استفاده کنیم.

تعداد سفارشات

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

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

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

رابطه معیارهای تجاری

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

شکل 114. همبستگی معیارهای باز و بسته شدن سفارش (A و B - صحیح ، C - نادرست).

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

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

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

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

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

اندازه سفارشات باز شده

در هر استراتژی تجاری، اندازه سفارش باید به طور معقولی محدود باشد. در یک مورد ساده از یک اندازه سفارش ثابت در یک Expert Advisor استفاده می شود. قبل از شروع عملیات EA، کاربر می تواند هر اندازه سفارشات آینده را تنظیم کند و آن را برای مدتی بدون تغییر بگذارد. علاوه بر این، اگر تعادل تغییر کند، کاربر می تواند مقدار جدیدی از تعداد زیادی سفارشات باز شده را تنظیم کند.

اندازه سفارش خیلی کوچک اطمینان بیشتری را در عملکرد در تغییر غیرقابل پیش بینی بازار ایجاد می کند، اما سود در صورت موفقیت چندان زیاد نخواهد بود. اگر اندازه سفارش خیلی بزرگ باشد، می توان سود زیادی به دست آورد، اما چنین EA بسیار خطرناک خواهد بود. معمولاً اندازه سفارش‌های باز شده به گونه‌ای تنظیم می‌شود که مارجین مورد نیاز از 2 تا 35% درصد موجودی یا مارجین آزاد تجاوز نکند (اگر استراتژی فقط یک سفارش باز شده را مجاز می‌کند، موجودی و حاشیه آزاد در لحظه قبل از باز شدن سفارش خواهد بود. برابر باشد).

در این مثال هر دو نوع اجرا شده است. یک کاربر ممکن است انتخاب کند که مقادیر سفارشات را مستقیماً نشان دهد یا مقدار را بر حسب درصد از حاشیه آزاد تعیین کند.

جزئیات برنامه نویسی

TradingExper. mq4 یک مشاور کارشناس ساده ساخته شده بر اساس آرگومان های قبلی می تواند به این شکل باشد:

توصیف متغیرها

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

در بلوک 1-2 متغیرهای خارجی و جهانی شرح داده شده است.

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

بلوک پردازش اولیه

در این مثال ، پیش پردازش از دو بخش تشکیل شده است (بلوک 3-4). این برنامه در صورت وجود میله های کافی در یک پنجره امنیتی ، عملکرد را خاتمه می دهد. در چنین حالتی ، تشخیص صحیح (در بلوک 5-6) مقادیر حرکت میانگین های لازم برای محاسبه معیارها غیرممکن است. علاوه بر این ، مقدار کار متغیر مورد تجزیه و تحلیل قرار می گیرد. در عملیات EA معمولی مقدار متغیر همیشه "درست" است (یک بار در حین اولیه سازی تنظیم می شود). اگر یک خطای مهم در عملکرد برنامه رخ دهد ، "False" به این متغیر اختصاص داده می شود و شروع () عملکرد خود را به پایان می رساند. این مقدار در آینده تغییر نخواهد کرد ، به همین دلیل کد زیر اجرا نمی شود. در چنین حالتی باید عملیات برنامه متوقف شود و دلیل خطای بحرانی باید تشخیص داده شود (در صورت لزوم ، باید با یک مرکز تجارت تماس بگیرید). پس از حل وضعیت ، برنامه می تواند بار دیگر شروع شود ، یعنی EA را می توان به یک پنجره امنیتی وصل کرد.

سفارشات حسابداری

مشاور تخصصی توصیف شده فقط با یک سفارش بازار کار می کند. وظیفه بلوک حسابداری سفارشات (بلوک 4-5) این است که ویژگی های یک سفارش باز شده را در صورت وجود تعریف کند. در حلقه ای که از طریق سفارشات "برای" می گذرد، تمام سفارشات موجود در بازار و در انتظار بررسی می شوند، یعنی از اولین (int i=1) تا آخرین (i& lt;=OrdersTotal()). در هر تکرار چرخه ترتیب بعدی توسط تابع OrderSelect() انتخاب می شود. انتخاب از منبعی از سفارشات باز شده و در حال انتظار (SELECT_BY_POS) انجام می شود.

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

تمام سفارش های باز شده برای امنیت دیگری حذف می شوند. اپراتور 'ادامه' تکرار را متوقف می کند و ویژگی های چنین سفارشی پردازش نمی شود. اما اگر دستور برای امنیت باز شود، پنجره ای که EA به آن متصل است، بیشتر مورد تجزیه و تحلیل قرار می گیرد.

اگر OrderType() مقدار بیش از 1 را برمی گرداند (به انواع معاملات مراجعه کنید)، سفارش انتخاب شده یک سفارش معلق است. اما در این Expert Advisor مدیریت سفارشات معلق ارائه نشده است. این بدان معناست که اجرای start() باید خاتمه یابد، زیرا یک موقعیت تضاد رخ داده است. در چنین حالتی پس از پیامی در مورد پایان عملیات، اجرای start() توسط اپراتور 'return' متوقف می شود.

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

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

محاسبه معیارهای معاملاتی

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

در مقادیر ابتدایی بلوک MAS با دوره های متوسط PRION_MA_1 و PRION_MA_2 محاسبه می شود. واقعیت اهمیت هر معیار معاملاتی از طریق مقدار یک متغیر مربوطه بیان می شود. متغیرهای OPN_B و OPN_S معیاری را برای افتتاح سفارشات خرید و فروش ، متغیرهای CLS_В و CLS_S - برای بسته شدن نشان می دهند. به عنوان مثال ، اگر معیار برای باز کردن خرید باعث ایجاد نشده باشد ، مقدار OPN_B "نادرست" باقی می ماند (تنظیم شده در اولیه سازی متغیر). اگر شروع شده باشد ، OPN_B مقدار "درست" می شود. در این حالت ، معیار بسته شدن فروش همزمان با آن برای افتتاح خرید است ، معیار افتتاح فروش همزمان با آن برای بسته شدن خرید است.

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

سفارشات بسته شدن

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

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

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

خطاها پردازش

به عنوان یک پارامتر منتقل شده در fun_error () از آخرین کد خطا که توسط getLasterRor () محاسبه شده است استفاده می شود. بسته به کد خطا fun_error () 1 را برمی گرداند اگر خطا بسیار مهم نباشد و عملیات تکرار شود و اگر خطا بسیار مهم باشد 0. خطاهای بحرانی به دو نوع تقسیم می شوند - آنهایی که پس از آن می توان اجرای برنامه را ادامه داد (به عنوان مثال ، یک خطای مشترک) و مواردی که پس از آن باید انجام هرگونه عملیات تجاری متوقف شود (برای مثال ، حساب مسدود شده).

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

اگر در هنگام پردازش خطا مشخص شود که اجرای برنامه بیشتر بی معنی است (به عنوان مثال برنامه بر روی نسخه ترمینال مشتری قدیمی کار می کند) در طول شروع بعدی اجرای عملکرد ویژه () در بلوک پردازش مقدماتی خاتمه می یابد. تجزیه و تحلیل مقدار کار متغیر.

محاسبه مقدار زیادی برای سفارشات جدید

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

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

در این مثال موارد زیر ارائه شده است. اگر کاربر مقدار غیر صفر خاصی از متغیر خارجی Lts را تنظیم کرده باشد، به عنوان مثال 0. 5، به عنوان مقدار لات های Lts در هنگام تشکیل یک درخواست تجارت برای باز کردن سفارش پذیرفته می شود. اگر 0 به Lts اختصاص داده شود، تعداد لات های Lts بر اساس متغیر Prots (درصد)، حاشیه آزاد و شرایط تنظیم شده توسط یک کارگزار تعریف می شود.

پس از محاسبه Lts، یک بررسی انجام می شود. اگر این مقدار کمتر از حداقل مقدار مجاز باشد، حداقل مقدار مجاز پذیرفته می شود. اما اگر حاشیه آزاد کافی نباشد، پس از یک پیام متناظر، اجرای start() خاتمه می یابد.

سفارشات افتتاحیه

بلوک دستورات باز کردن (بلوک 8-9) مانند بلوک دستورات باز کردن یک حلقه نامحدود "while" است. در سربرگ اپراتور اول، شرایط «اگر» برای باز کردن سفارش خرید محاسبه می‌شود: اگر سفارشی برای امنیت وجود نداشته باشد (متغیر Total برابر با 0 است) و علامت باز کردن سفارش خرید مرتبط باشد (Opn_B درست است).، کنترل برای باز کردن سفارش به بدن اپراتور "if" منتقل می شود. در چنین حالتی پس از نوسازی نرخ ها، قیمت برای سطوح توقف محاسبه می شود.

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

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

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

برخی از خصوصیات کد

کد مشاور مشاور خبره مورد تجزیه و تحلیل به اجرای یک استراتژی خاص است. توجه داشته باشید ، برخی از خطوط برنامه شامل متغیرها و محاسباتی هستند که در صورت تغییر استراتژی تغییر می کنند.

به عنوان مثال ، طبق استراتژی پذیرفته شده ، مشاور خبره فقط با یک سفارش کار می کند. این اجازه می دهد تا از بلیط متغیر هم برای شناسایی شماره سفارش اختتامیه (در بلوک بسته شدن 6-7) و برای شناسایی موفقیت یک اجرای عملیات تجاری هنگام باز کردن سفارش استفاده کند (در بلوک افتتاح 8-9). در این حالت چنین راه حلی قابل قبول است. با این حال ، اگر کد مورد تجزیه و تحلیل را به عنوان پایه ای برای اجرای استراتژی دیگر (به عنوان مثال اجازه می دهیم سفارشات مخالف) در نظر بگیریم ، باید یک یا چند متغیر را معرفی کنیم تا بتوانیم تعداد سفارشات باز شده را بشناسیم و موفقیت عملیات تجاری را شناسایی کنیم.

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

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

  • نویسنده : خدیجه عالی نژاد طالش
  • منبع : joinilluminati-society.online
  • بدون دیدگاه

برچسب ها

ثبت دیدگاه

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