۱. نوعهای Enum (enumJnsSignal، enumOrderType)
-
enumJnsSignal این Enum نوع سیگنال استفاده شده در اکسپرت را مشخص میکند. دو گزینه سیگنال وجود دارد:
eTypeCrossMA: استفاده از سیگنال تقاطع دو میانگین متحرک (Cross 2 MA).eTypeTrend: دنبال کردن روند با استفاده از میانگینهای متحرک و استوکاستیک.
-
enumOrderType این Enum نوع دستور معاملاتی را مشخص میکند:
eBuy: دستور خرید.eSell: دستور فروش.eNone: هیچ دستوری اجرا نمیشود.
۲. پارامترهای ورودی
- inMagicNumber شماره جادویی منحصربهفرد برای تشخیص دستورات این اکسپرت.
- inLotSize حجم اولیه هر دستور.
- inMultiply ضریب چند برابر برای استراتژی حجم معاملات.
- inJarakLayer فاصله پیپی بین موقعیتهای معاملاتی در استراتژی شبکه/لایه.
- inMAPeriodFast & inMAPeriodSlow دورههای میانگین متحرک سریع و کند.
- inSTOKPeriod, inSTODPeriod, inSTOSlowing پارامترهای اسیلاتور استوکاستیک.
- inTakeProfit & inStopLoss تنظیمات حد سود و حد ضرر.
۳. ساختار dataTrades
- این ساختار برای ذخیره دادههای مربوط به موقعیتهای معاملاتی باز استفاده میشود، مانند تعداد کل موقعیتها (
ttlPos)، میانگین قیمت موقعیتها (hargaTA,hargaTB) و حجم کل (ttlLot).
۴. تابع OnInit()
- این تابع وظیفه مقداردهی اولیه اکسپرت را بر عهده دارد، شامل اعتبارسنجی پارامترهای ورودی (مثلاً اطمینان از اینکه دوره میانگین متحرک سریع کمتر از میانگین متحرک کند است) و ایجاد هندل برای میانگین متحرک و استوکاستیک.
۵. تابع OnTick()
- تابع اصلی که هر بار که قیمت تغییر میکند (تیک) اجرا میشود.
- تابع GetSignal() برای بررسی سیگنال جدید فراخوانی میشود و در صورت وجود سیگنال، manageTrading() برای اجرای معاملات استفاده میشود.
- همچنین تابع setTPSL() فراخوانی میشود تا حد سود و حد ضرر همیشه بهروز باشند.
۶. تابع isNewCandle()
- این تابع تشخیص میدهد که آیا یک کندل جدید شکل گرفته است یا خیر. این مهم است زیرا اکسپرت تنها روی شکلگیری کندل جدید سیگنالها را بررسی میکند.
۷. تابع GetSignal()
-
این تابع تعیین میکند که آیا سیگنال معاملاتی معتبر بر اساس استراتژی انتخابی وجود دارد یا خیر:
- برای eTypeCrossMA، سیگنال با تقاطع میانگین متحرک سریع و کند تعیین میشود.
- برای eTypeTrend، سیگنال با تایید میانگین متحرک و استوکاستیک مشخص میشود.
۸. تابع manageTrading()
- این تابع مدیریت اجرای معاملات را انجام میدهد.
- اگر سیگنال معتبر وجود داشته باشد، اکسپرت یک موقعیت با حجم تعیینشده توسط getLotSize() باز میکند.
- استراتژی شبکه/لایه نیز برای باز کردن موقعیتهای اضافی بر اساس فاصله قیمتی (
inJarakLayer) اعمال میشود.
۹. تابع updateDataTrades()
- این تابع دادههای مربوط به موقعیتهای معاملاتی جاری را بهروز میکند، مانند محاسبه میانگین قیمت و حجم کل موقعیتهای باز.
۱۰. تابع openTrade()
- این تابع یک موقعیت معاملاتی جدید بر اساس سیگنال ایجاد شده و حجم محاسبهشده باز میکند. برای اجرای دستور از OrderSend() استفاده میکند.
۱۱. تابع setTPSL()
- این تابع حد سود و حد ضرر هر موقعیت باز را تنظیم یا بهروزرسانی میکند.
۱۲. تابع modifTPSL()
- این تابع حد سود و حد ضرر موقعیتهای موجود را در صورت متفاوت بودن با مقادیر قبلی اصلاح میکند.
۱۳. تابع validateLot()
- این تابع اطمینان حاصل میکند که حجم معامله استفادهشده در محدوده مجاز حداقل و حداکثر قرار دارد و با حداقل گام حجم (
gLotStep) مطابقت دارد.
۱۴. تابع getLotSize()
- این تابع حجم معامله مورد استفاده را بر اساس حجم اولیه و تعداد موقعیتهای باز شده محاسبه میکند و ضریب چند برابر (
inMultiply) را در نظر میگیرد
این کد برای شناسایی روند بازار و مدیریت موقعیتهای معاملاتی بهصورت خودکار با استفاده از سیگنالهای تکنیکال میانگین متحرک و استوکاستیک طراحی شده است.
