قدرت زیگزاگ (قسمت اول). توسعه کلاس پایه شاخص

ساخت وبلاگ

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

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

در این سری از مقالات ، ما پیاده سازی خواهیم کرد:

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

نسخه شاخص Zigzag Extended

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

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

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

بیایید تمام بافرهای نشانگر را لیست کنیم:

  • حداقل قیمت بپرسید. مقادیر کم زیگزاگ براساس آنها استوار است
  • حداکثر قیمت پیشنهاد. مقادیر بالا Zigzag براساس آنها استوار است
  • اوج
  • پایین
  • تمام اوج های تشخیص داده شده از یک بخش به سمت بالا
  • همه پایین ترین سطح یک بخش رو به پایین

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

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

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

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

شرایط زیر برای تعریف جهت بررسی می شود:

  • جهت فعلی بخش رو به بالا
    • حداکثر پیشنهاد فعلی از حداکثر حداکثر فراتر می رود:
      • اگر این شرط برآورده شود ، (1) حداکثر قبلی را مجدداً تنظیم کنید ، (2) شاخص آرایه داده فعلی را به خاطر بسپارید و (3) مقدار فعلی حداکثر پیشنهاد را به عناصر فعلی بافر نشانگر اختصاص دهید.
      • اگر این شرط برآورده نشود ، جهت بخش تغییر کرده است و زمان آن رسیده است که شرایط تشکیل مقدار شدید پایین را بررسی کنید:
        • حداقل سؤال فعلی کمتر از گذشته است
        • فاصله بین حداقل سؤال فعلی و حداکثر Zigzag حداکثر از آستانه مشخص شده (MinimalPulsesize) فراتر می رود.
          • اگر این شرایط برآورده شود ، (1) شاخص فعلی آرایه داده را به خاطر بسپارید ، (2) جهت بخش جدید (رو به پایین) را در متغیر ذخیره کنید و (3) مقدار فعلی حداقل سؤال را به عناصر فعلی بافر نشانگر اختصاص دهید.
          • حداقل سؤال فعلی پایین تر از حداقل حداقل است:
            • اگر این شرط برآورده شود ، (1) حداقل قبلی را مجدداً تنظیم کنید ، (2) شاخص آرایه داده فعلی را به خاطر بسپارید و (3) مقدار فعلی حداقل ASK را به عناصر فعلی بافر نشانگر اختصاص دهید.
            • اگر این شرط برآورده نشود ، جهت بخش تغییر کرده است و زمان آن رسیده است که شرایط شکل گیری مقدار فوقانی فوقانی را بررسی کنید:
              • حداکثر پیشنهاد فعلی بیش از حداقل آخرین است
              • فاصله بین حداکثر پیشنهاد فعلی و حداقل حداقل زیگزاگ از آستانه مشخص شده (حداقل pulsesize) فراتر می رود.
                • اگر این شرایط برآورده شود ، (1) شاخص فعلی آرایه داده را به خاطر بسپارید ، (2) جهت بخش جدید (رو به بالا) را در متغیر ذخیره کنید و (3) مقدار فعلی حداکثر پیشنهاد را به عناصر فعلی بافر نشانگر اختصاص دهید.

                کد عملکرد FillIndicatorBuffers () را می توان در جزئیات زیر مشاهده کرد:

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

                شاخص EURUSD D1 در زیر نمایش داده شده است:

                Fig. 1. Modified ZigZag indicator on EURUSD D1

                شکل 1. شاخص Zigzag اصلاح شده در EURUSD D1

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

                Fig. 2. Modified ZigZag indicator on EURMXN M5

                شکل 2. شاخص Zigzag اصلاح شده در EURMXN M5

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

                کلاس برای شفاف سازی داده های نشانگر Zigzag

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

                از آنجا که ما قادر به کار با چندین نمونه کلاس به طور همزمان هستیم ، به عنوان مثال ، با داده های زیگزاگ از بازه های زمانی مختلف ، ممکن است نیاز به تجسم بخش های به دست آمده با استفاده از خطوط روند رنگ های مختلف داشته باشیم. بنابراین ، پرونده ChartObjectSlines. MQH را از کتابخانه استاندارد به پرونده ای که شامل کلاس Czigzagmodule است ، وصل کنید. از این پرونده ، برای کار با خطوط روند به کلاس CChartObjectTrend نیاز خواهیم داشت. رنگ خطوط روند را می توان با استفاده از روش عمومی czigzagmodule :: linescolor () مشخص کرد. خاکستری (Clrgray) به طور پیش فرض تنظیم می شود.

                قبل از به دست آوردن داده های شاخص Zigzag ، باید تعداد مقادیر شدید لازم برای کار را تنظیم کنیم. برای دستیابی به این هدف ، ما باید با روش czigzagmodule :: copyextremums () تماس بگیریم. آرایه های پویا جداگانه اعلام شده است که (1) قیمت افراطی ، (2) شاخص های میله های افراطی ، (3) زمان میله های آنها و (4) تعداد بخش برای خطوط روند ساختمان در یک نمودار. اندازه آرایه ها با همان روش تنظیم شده است.

                تعداد بخش ها به طور خودکار از تعداد افراط و تفریط مشخص شده محاسبه می شود. به عنوان مثال ، اگر ما 1 را به روش czigzagmodule :: copyextremums () منتقل کنیم ، داده ها را در مورد یک بالا و یک پایین دریافت می کنیم. در این حالت ، فقط یک بخش از شاخص Zigzag است. اگر مقدار بیشتر از 1 منتقل شود ، تعداد بخش ها همیشه برابر با تعداد افراط های کپی شده ضرب شده توسط 2 منهای 1 است. به عبارت دیگر ، تعداد بخش ها همیشه عجیب خواهد بود:

                • یک بخش افراطی - 1 بخش
                • دو بخش افراطی - 3 بخش
                • سه افراط - 5 بخش و غیره

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

                برای به دست آوردن داده ، ما به روش czigzagmodule :: getzigzagdata () نیاز داریم. آرایه های اولیه نشانگر زیگزاگ همراه با آرایه زمان باید به آن منتقل شوند. این داده های منبع را می توان با استفاده از توابع CopyBuffer () و CopyTime () بدست آورد. قبل از به دست آوردن مقادیر لازم از داده های منبع ، کلیه زمینه ها و آرایه ها باید دوباره تنظیم شوند. سپس تعداد مشخصی از (1) قیمت افراطی ، (2) شاخص های میله افراطی و (3) زمان افراطی را بدست آورید.

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

                اکنون که داده ها دریافت شده اند ، می توانیم روشهای دیگر این کلاس را در نظر بگیریم. به منظور به دست آوردن قیمت های افراطی ، شاخص های نوار افراطی و زمان میله ها این افراط و تفریط در آن شکل گرفته است ، با مشخص کردن شاخص افراطی ، به سادگی با روش مناسب (لیست کد زیر را ببینید) تماس بگیرید. فقط کد روش czigzagmodule :: lowprice () در اینجا به عنوان نمونه ارائه شده است ، زیرا همه آنها تقریباً یکسان هستند.

                در صورت نیاز به دریافت اندازه بخش ، با روش czigzagmodule :: setsmentize () تماس بگیرید که شاخص بخش را به عنوان تنها پارامتر مشخص می کند. بسته به اینکه شاخص مشخص شده یک مقدار یکنواخت یا یک مقدار عجیب و غریب باشد ، شاخص های افراطی اندازه بخش محاسبه می شود. اگر مقدار شاخص یکنواخت باشد ، شاخص های افراطی با یکدیگر مطابقت دارند و بسته به جهت بخش نیازی به محاسبه ندارند.

                از روش Czigzagmodule :: SetmentSsum () برای به دست آوردن جمع همه بخش ها استفاده می شود. همه چیز در اینجا ساده است ، از آنجا که روش czigzagmodule :: segmentize () که در بالا توضیح داده شد ، هنگام حرکت در تمام بخش ها در یک حلقه نامیده می شود.

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

                ممکن است دریافت نسبت درصد از مبالغ بخش های یک طرفه به تعداد کل بخش های موجود در مجموعه مفید باشد. برای دستیابی به این هدف ، از روشهای czigzagmodule :: percentsumsegmentsup () و czigzagmodule :: percentsumsegmentsdown () استفاده کنید. آنها اجازه می دهند تا اختلاف درصد این نسبت ها را بدست آورند - روش czigzagmodule :: percentsumsegmentsdifference () ، که به نوبه خود می تواند جهت فعلی (روند) را به ما نشان دهد. اگر تفاوت ناچیز باشد ، قیمت به طور مساوی از هر دو جهت (مسطح) نوسان می کند.

                به منظور تعریف رفتار قیمت ، ما به روش هایی برای به دست آوردن مدت زمان بخش های جداگانه و کل مجموعه حاصل نیاز داریم. روش czigzagmodule :: segmentbars () برای به دست آوردن تعداد میله ها در بخش مشخص شده است. منطق کد روش همان روش Czigzagmodule :: Segmentize () برای به دست آوردن اندازه قطعه است. بنابراین ، هیچ نکته ای برای تهیه کد آن در اینجا وجود ندارد.

                برای به دست آوردن تعداد کل میله ها در مجموعه داده های به دست آمده ، از روش Czigzagmodule :: SegmentStotalBars () استفاده کنید. در اینجا ، شاخص های اولیه و انتهایی در مجموعه تعریف شده و تفاوت بازگردانده می شود. روش Czigzagmodule :: SegmentStotalseconds () از همان اصل پیروی می کند. تنها تفاوت این است که تعداد ثانیه های موجود در مجموعه را برمی گرداند.

                غالباً ممکن است برای پیدا کردن دامنه قیمت در مجموعه داده های مشاهده شده ضروری باشد. برای این اهداف ، کلاس دارای روش هایی برای به دست آوردن حداقل و حداکثر افراط و تفریط و همچنین تفاوت بین آنها (دامنه قیمت) است.

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

                • کوچکترین () - کوچکترین بخش را در داده های به دست آمده برگردانید.
                • بزرگترین () - بزرگترین بخش را در داده های به دست آمده برگردانید.
                • حداقل NumberOfSegmentBars () - کمترین تعداد میله ها را در یک بخش در داده های به دست آمده برگردانید.
                • mesteumberofsementbars () - بیشترین تعداد میله ها را در یک بخش در داده های به دست آمده برگردانید.

                این کلاس در حال حاضر روش هایی برای به دست آوردن اندازه بخش ها و تعداد میله های قطعه توسط شاخص مشخص شده دارد. بنابراین ، درک کد روش ها از لیست فوق آسان خواهد بود. همه آنها فقط در روشهایی که در درون آنها نامیده می شوند متفاوت هستند ، بنابراین ، من کدهای فقط دو مورد از آنها را ارائه می دهم - czigzagmodule :: smallestsegmen () و czigzagmodule :: mesteumberofsementbars ().

                هنگام جستجو برای الگوهای ، ممکن است نیاز داشته باشیم که یک بخش مشخص از نظر اندازه (در ٪) از قسمت قبلی تفاوت داشته باشد. برای حل چنین کارها ، از روش czigzagmodule :: درصد درصد () استفاده کنید.

                حال بیایید نحوه تجسم داده های به دست آمده و استفاده از کلاس Czigzagmodule را در پروژه های سفارشی مشاهده کنیم.

                تجسم مجموعه داده های به دست آمده

                پس از دریافت دستگیره های نشانگر Zigzag از بازه های زمانی مختلف ، می توانیم بخش هایی را در نمودار فعلی که EA در آن راه اندازی شده است تجسم کنیم. بیایید از اشیاء گرافیکی از نوع خط روند برای تجسم استفاده کنیم. از روش خصوصی Czigzagmodule :: Createsegment () برای ایجاد اشیاء استفاده می شود. این فهرست و پسوند (پارامتر اختیاری) را برای تشکیل یک نام منحصر به فرد از شیء گرافیکی دریافت می کند تا در صورت نیاز به نمایش داده های شاخص Zigzag با پارامترهای مختلف و از بازه های زمانی مختلف ، از یک نام منحصر به فرد از شیء گرافیکی استفاده شود.

                Czigzagmodule :: Showsegments () و Czigzagmodule :: Deleletesegments () روشهای عمومی امکان نمایش و از بین بردن اشیاء گرافیکی را فراهم می آورد.

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

                بیایید برنامه ای برای دریافت و تجسم داده های به دست آمده تهیه کنیم.

                EA برای آزمایش نتایج به دست آمده

                بیایید یک آزمایش ساده EA برای دریافت و تجسم داده های شاخص Zigzag ایجاد کنیم. ما چک های اضافی را برای ساده کردن کد تا حداکثر ممکن انجام نمی دهیم. هدف اصلی مثال نشان دادن اصل دستیابی به داده ها است.

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

                در تابع OnInit () ، ما (1) دسته شاخص را دریافت می کنیم ، (2) تعداد افراط و تفریط را تنظیم کنید تا داده های نهایی را تشکیل دهد و رنگ خطوط قطعه از مجموعه به دست آمده ، و همچنین (3) یک فهرست معکوس را تنظیم کنیدبرای آرایه های داده منبع سفارش دهید.

                در عملکرد ONTICK () ، داده های منبع نشانگر را با زمان باز دسته و میله های آن دریافت کنید. سپس داده های نهایی را با تماس با روش czigzagmodule :: getzigzagdata () تهیه کنید. در نتیجه ، بخش هایی از داده های نشانگر Zigzag به دست آمده را تجسم کرده و داده ها را در یک نمودار به عنوان یک نظر نشان می دهد.

                اگر EA را در تستر استراتژی در حالت تجسم راه اندازی کنیم ، موارد زیر را مشاهده خواهیم کرد. در این حالت 5 افراط بالا و 5 افراطی پایین به دست آمده است. در نتیجه ، 9 بخش به رنگ قرمز در نمودار برجسته شده است.

                شکل 3. نمایش در حالت تجسم (یک زیگزاگ)

                اگر ما نیاز به به دست آوردن داده های شاخص Zigzag از بازه های زمانی مختلف در همان زمان داریم ، کد EA آزمون باید کمی افزایش یابد. بیایید مثالی را در نظر بگیریم که شما نیاز به دریافت داده از سه بازه زمانی داشته باشید. در این حالت ، شما باید سه نمونه از کلاس Czigzagmodule را اعلام کنید. اولین بازه زمانی از نمودار فعلی که EA در آن راه اندازی شده است گرفته می شود. بگذارید دو نفر دیگر ، به عنوان مثال M15 و H1 باشند.

                هر شاخص متغیر خاص خود را برای به دست آوردن دسته دارد:

                در مرحله بعد ، در عملکرد OnInit () ، دستگیره ها را برای هر شاخص جداگانه دریافت کرده و رنگ ها و تعداد افراط و تفریط را تنظیم کنید:

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

                در اینجا به نظر می رسد:

                شکل 4. نشان دادن در حالت تجسم (سه زیگزاگ)

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

                از سرگیری توسعه کلاس czigzagmodule

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

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

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

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

                از روشهای czigzagmodule :: smallestminimumtime () و czigzagmodule :: بزرگترین maximumtime () برای به دست آوردن زمان کمترین و بالاترین افراط و تفریط در مجموعه داده های به دست آمده استفاده کنید.

                علاوه بر این ، بیایید لیست روش های کار با بخش های زیگزاگ را گسترش دهیم. ممکن است راحت باشد که چندین مقادیر را به متغیرهای منتقل شده توسط پیوندها به طور همزمان منتقل کنیم. کلاس دارای سه روش از این دست است:

                • Segmentbars () شاخص های نوار شروع و پایان یک بخش مشخص را برمی گرداند.
                • SegmentPrices () قیمت شروع و پایان یک بخش مشخص را برمی گرداند.
                • SegmentTimes () زمان شروع و پایان یک بخش مشخص را برمی گرداند.

                یک ساختار مشابه در سایر روشهای قبلاً در نظر گرفته شده وجود دارد ، بنابراین فقط یک کد نمونه در زیر ارائه شده است.

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

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

                یکی دیگر از روشهای Czigzagmodule :: SegmentTimes () برای دریافت زمان شروع و پایان یک بخش مشخص با توجه به یک بازه زمانی پایین اجرا می شود. این نیاز به توضیح دارد. پارامترهای زیر به روش منتقل می شوند:

                • دسته - دسته نشانگر زیگزاگ از یک بازه زمانی پایین تر.
                • HIFS_BUFFER_INDEX - شاخص بافر شاخص حاوی حداکثر افراط و تفریط.
                • lows_buffer_index - شاخص بافر شاخص حاوی حداقل افراط و تفریط.
                • نماد - نماد بازه زمانی پایین.
                • دوره - دوره زمانی بالاتر.
                • in_period - دوره بازه زمانی پایین.
                • فهرست - شاخص بخش بازه زمانی بالاتر.

                مقادیر پارامتر برگشتی که توسط مرجع منتقل شده است:

                • Start_Time - زمان شروع بخش با توجه به بازه زمانی پایین تر.
                • Stop_time - زمان پایان بخش با توجه به بازه زمانی کمتر.

                ابتدا باید زمان باز اولین و آخرین میله های یک بخش مشخص را بدست آوریم. برای انجام این کار ، اولین روش czigzagmodule :: segmenttimes () را که در بالا توضیح داده شد ، بنامید.

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

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

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

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

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

                اینگونه به نظر می رسد:

                شکل 5. دریافت داده ها در بخش مشخص شده

                در مرحله بعد ، EA دیگری را برای دریافت داده از سه بخش از یک بازه زمانی بالاتر توسعه دهید.

                اکنون باید در ابتدای پرونده چهار نمونه کلاس Czigzagmodule را اعلام کنیم. یکی از آنها برای بازه زمانی بالاتر (H1) در نظر گرفته شده است ، در حالی که سه مورد باقی مانده برای بازه زمانی فعلی در نظر گرفته شده است. در این حالت ، ما آزمایشات M5 را انجام می دهیم.

                برای وضوح بهتر ، بخش های بازه زمانی پایین در بخش های بالاتر در رنگ های مختلف نمایش داده می شود:

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

                در اینجا نحوه نگاه آن در نمودار آمده است:

                شکل 6. دریافت داده ها در سه بخش مشخص شده

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

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

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

                نتیجه

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

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

                 

                نام فایلاظهار نظر
                MQL5 شاخص ها سفارشی Zigzag Exactzz_plus. mq5شاخص Zigzag اصلاح شده
                MQL5 کارشناسان zigzag testzz_01. mq5EA برای آزمایش یک مجموعه داده واحد
                MQL5 کارشناسان zigzag testzz_02. mq5EA برای آزمایش سه مجموعه داده از بازه های زمانی مختلف
                MQL5 کارشناسان zigzag testzz_03. mq5EA برای آزمایش کسب داده ها در یک بخش زمانی بالاتر مشخص شده
                MQL5 کارشناسان zigzag testzz_04. mq5EA برای آزمایش کسب داده ها در سه بخش بازه زمانی بالاتر مشخص شده

                هشدار: کلیه حقوق این مواد توسط Metaquotes Ltd. کپی یا چاپ مجدد این مواد به طور کامل یا جزئی محفوظ است.

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

برچسب : نویسنده : شبنم خلیلی بازدید : 48 تاريخ : دوشنبه 7 فروردين 1402 ساعت: 20:02