نمایش سطح پشتیبانی/مقاومت

ساخت وبلاگ

Displaying of Support/Resistance Levels

این مقاله به تشخیص و نشان دادن سطح پشتیبانی/مقاومت در برنامه Metatrader 4 می پردازد. بر اساس یک الگوریتم ساده ، نشانگر مناسب و جهانی FindLevels خطوط پشتیبانی افقی را در نماد نماد ایجاد می کند. می توانید آن را در زیر مشاهده کنید:

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

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

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

بررسی نظری

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

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

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

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

توابع کمکی

همانطور که در بالا توضیح داده شد ، نشانگر FindLevels برای کار با نقل قول ها از هر بازه زمانی طراحی شده است. بازه زمانی توسط کاربر (متغیر Timeperiod) تنظیم شده است. به خاطر سادگی کد ، ما دو کارکرد آسان را تنظیم خواهیم کرد که نیازی به توضیحات اضافی ندارند:

دو برابرprlow (در نظر گرفتنمن)<برگشت (alow(خالی,TimePeriod,i));> دو برابرprhigh (در نظر گرفتنمن)<برگشت (من(خالی,TimePeriod,i));>

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

در نظر گرفتنPRION2INT (در نظر گرفتنtmperiod)<تعویض(tmperiod)<مورد perio_m1 : برگشت(0); مورد perter_m5 : برگشت(1); مورد PRION_M15 : برگشت(2); مورد PRION_M30 : برگشت(3); مورد PERION_H1 : برگشت(4); مورد دوره_4 : برگشت(5); مورد دوره_د 1 : برگشت(6); مورد دوره_ W1 : برگشت(7); مورد PERION_MN1 : برگشت(8);> برگشت (0);> رشتهدوره 2AlpThabetString (در نظر گرفتنtmperiod)<برگشت(Alphabet[Period2Int(TmPeriod)]);>

حس تنظیم عملکرد PRION2ALPHABETSTRING () در بخش "تعامل شاخص ها" شرح داده شده است ، و استفاده از عملکرد PruD2Int () از بخش بعدی مشخص خواهد شد.

نوشتن نشانگر

بگذارید با متغیرهای خارجی ، که توسط کاربر تنظیم شده است شروع کنیم:

بیرونی در نظر گرفتنmaxlimit =1000; بیرونی در نظر گرفتنmaxcrosseslevel =10; بیرونی دو برابرmaxr =0. 001; بیرونی در نظر گرفتنTimeperiod =0; بیرونی رنگlinecolor = سفید ؛بیرونی در نظر گرفتنخط عرض =0; بیرونی در نظر گرفتنlinestyle =0;

Maxlimit - میزان میله های تاریخی مورد استفاده ؛

MaxCrossesLevel - حداقل تفاوت بین حداکثر محلی و حداقل محلی (توضیحات مفصل را در بخش "بررسی نظری" مشاهده کنید.

MAXR - شعاع منطقه ای که حداقل در آن تشخیص داده می شود.

Timeperiod - بازه زمانی برای تشخیص سطح پشتیبانی. به طور پیش فرض ، این بازه زمانی پنجره نقشه برداری است.

Linecolor - رنگ خطوط نمایش داده شده ؛ LineWidth - عرض خط ، 0 به طور پیش فرض ؛ Linestyle - سبک خط ، 0 به طور پیش فرض.

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

در نظر گرفتنinit()<if(بازه زمانی ==0) بازه زمانی =دوره زمانی(); if(بازه زمانی !=0&& LineWidth ==0) if(Period2Int(TimePeriod) - Period2Int(دوره زمانی())>= 0) LineWidth = Widths[Period2Int(TimePeriod) - Period2Int(دوره زمانی())]; دیگر 0; if(LineStyle ==0) LineStyle =STYLE_DASH;> if(بازه زمانی !=0&& LineColor == سفید) LineColor = رنگها[Period2Int(TimePeriod)];برگشت(0);>

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

آرایه های Colors[] و Width[] به صورت زیر تعریف می شوند:

رنگرنگها[] = ;در نظر گرفتنعرض[] = 1, 2, 3, 4, 5, 6, 7, 8, 9>;

اجازه دهید متغیرهای باقیمانده را تعریف کنیم:

در نظر گرفتنCrossBarsNum[];بوولCrossBarsMin[];دو برابرd1Num =0.0، d2Num =0.0; زمان قرارTMaxI =0;

آرایه CrossBarsNum[] آرایه ای که مقدار میله ها را برای هر قیمت نشان می دهد.

CrossBarsMin[] - آرایه مربوط به این واقعیت است که آیا خط با قیمت تعیین شده حداقل محلی است یا خیر.

d1Num و d2Num - حداقل و حداکثر قیمت هایی که به بازه نوار از 0 تا MaxLimit تعلق دارند.

TMaxI - نشان دهنده زمان آخرین نوار پردازش شده است.

#تعريف كردنMaxLines1000 رشتهLineName[MaxLines];در نظر گرفتنLineIndex =0;

MaxLines - حداکثر مقدار خطوطی که ایجاد می کنید. LineName[] - آرایه نام آنها. LineIndex - نمایه سلول خالی در آرایه LineName[].

اجازه دهید تابع start():

در نظر گرفتنcounted_bars =شاخص شمارش شده(); در نظر گرفتنحد =MathMin(میله ها- counted_bars، MaxLimit)؛دو برابرd1 = prLow(iLowest(خالی، بازه زمانی،MODE_LOW، حد،0)); دو برابرd2 = prHigh(iHighest(خالی، بازه زمانی،MODE_HIGH، حد،0));

ما متغیر حد را با استفاده از تعداد میله هایی که از آخرین واکشی نشانگر تغییر نکرده اند محاسبه می کنیم. d1 و d2 حداقل و حداکثر قیمت در بازه 0 تا حد هستند.

if(d1Num != d1 || d2Num != d2)<ArrayResize(CrossBarsNum، (d2 - d1)*10000); ArrayResize(CrossBarsMin، (d2 - d1)*10000); if(d1Num != d1 && d1Num !=0.0) <ArrayCopy(crossbarsnum ، crossbarsnum ،0، (d1num - d1)*10000); ArrayCopy(Crossbarsmin ، Crossbarsmin ،0، (d1num - d1)*10000);> d1Num = d1; d2Num = d2;>

در حین عملکرد نشانگر ، شکاف های قیمت پوشانده شده با Arrays Crossbarsnum [] و Crossbarsmin [] می توانند تغییر کنند. هر بار که اتفاق می افتد ، باید مقدار سلول ها را در آرایه افزایش دهیم و در صورت لزوم آن را به سمت راست حرکت دهیم. معمولاً اگر متغیرهای جدید D1 ، D2 با متغیرهای D1NUM ، D2NUM مطابقت نداشته باشد که در شروع قبلی از شروع عملکرد () مطابقت ندارند.

برای(دو برابرD = D1 ؛D 0. 0001) <در نظر گرفتنdi = (d - d1)*10000; برای(در نظر گرفتنمن =1؛منif(d>prlow (i) && dif(زمان[حد]! = tmaxi && tmaxi! =0) if(d>prlow (باکشیفتی(خالی, 0، tmaxi)) && dباکشیفتی(خالی, 0, TMaxI))) CrossBarsNum[di]--;>TMaxI =زمان[حد] -1;

بعد از اینکه اطمینان حاصل کردیم که آرایه های ما متناسب با ابعاد لازم است ، ما شروع به محاسبه میله های جدید برای هر قیمت و افزایش ارزش crossbarsnum [] در هنگام عبور نوار از سطح قیمت می کنیم. از آنجا که میله های خبری دائماً در حال ظهور هستند ، میله های قدیمی از فاصله [0: حد] مستثنی می شوند. به همین دلیل ما باید چنین نوع میله ها را بررسی کنیم و در صورت تقاطع ، ارزش Crossbarsnum [] را کاهش دهیم. سپس زمان آخرین نوار محاسبه شده را به متغیر Tmaxi اختصاص خواهیم داد.

دو برابرl = maxr*10000; برای(D = D1 + MAXR ؛ D 0. 0001) 10000; if(! crossbarsmin [di] && crossbarsnum [arraymaximum(crossbarsnum ،2*l ، di - l)] - crossbarsnum [arrayminimum(crossbarsnum ،2*l, di - l)]>maxcrosseslevel && crossbarsnum [di] == crossbarsnum [arrayminimum(crossbarsnum ،2*l ، di - l)] && crossbarsnum [di-1]! = crossbarsnum [arrayminimum(crossbarsnum ،2*l ، di - l)])درست است، واقعی؛نام کتانی [LineIndex] = Perio2alpThabetString (Timeperiod) + Timeperiod +"_"+ D ؛اشخاص(خط کتان [LineIndex] ،OBJ_HLINE, 0, 0، د) ؛پژوهش(خط کتان [LineIndex] ،objprop_color، رنگ خط)؛پژوهش(خط کتان [LineIndex] ،objprop_width، خط عرض) ؛پژوهش(خط کتان [LineIndex] ،objprop_style, LineStyle); LineIndex++;> if(crossbarsmin [di] && crossbarsnum [di]! = crossbarsnum [arrayminimum(crossbarsnum ،2*l ، di - l)])دروغ; هدف اصلی(دوره 2AlpThabetString (Timeperiod) + Timeperiod +"_" + d);>>

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

crossbarsnum [di] == crossbarsnum [arrayminimum(crossbarsnum ،2*l ، di - l)] && crossbarsnum [di-1]! = crossbarsnum [arrayminimum(crossbarsnum ،2*l ، di - l)]

هیچ چیز پیچیده ای در ایجاد یک شیء گرافیکی جدید - خط مرزی وجود ندارد. ما ویژگی های این خط را تنظیم می کنیم: عرض ، سبک ، رنگ ، که قبلاً در روش INIT طراحی شده است. هیچ چیز پیچیده ای در حذف سطوح وجود ندارد که به نظر می رسد دیگر سطح پشتیبانی نیستند. یک چیز وجود دارد که مشخص نیست: چرا و برای چه هدفی از عملکرد دوره 2AlpThabetString (Timeperiod) به نام شی استفاده می کنیم. پاراگراف بعدی این مسئله را توصیف می کند ، که قبلاً چندین بار ذکر شده است.

تعامل شاخص ها

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

باید چندین بار نشانگر را راه اندازی کرد و شاخص باید داده های ورودی را با دوره زمانی داشته باشد.

خطوط باید متفاوت باشند و ما باید به راحتی تعریف کنیم که هر دوره پشتیبانی از هر دوره تعلق دارد.

تمام خطوط باید هم از مدت طولانی و هم از زمان کوتاه ردیابی شوند.

نکته اول مشکلی ایجاد نمی کند. ما هیچ متغیر جهانی نداریم. نام های مختلفی از اشیاء گرافیکی برای هر دوره زمانی وجود دارد ، زیرا ما دوره ای را به نام شی داریم ، (به عنوان مثال "F30_1. 25600000" ، 30 دوره زمانی است) ، و بنابراین در هنگام راه اندازی هیچ تضادی وجود نخواهد داشتچندین شاخص

نکته دوم با موفقیت تحقق می یابد ، زیرا هر خط بسته به دوره (Linecolor = Colors [Prior2int (TimePeriod))) رنگ خود را دارد.

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

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

رشتهدوره 2AlpThabetString (در نظر گرفتنtmperiod)<برگشت (Alphabet[Period2Int(TmPeriod)]);>

الفبای آرایه ای از حروف لاتین به ترتیب معکوس است. نام کامل هر سطح پشتیبانی به شرح زیر است: دوره 2AlpThabetString (TimePeriod)+TimePeriod+"_"+d.

برای درک بهتر ، اجازه دهید از ابتدای مقاله به تصاویر مراجعه کنم:

خلاصه

آزمایش شاخص نشان داد که خوب کار می کند. استفاده از آن آسان است زیرا می تواند داده ها را از بازه های زمانی مختلف نمایش دهد. دوره آزمایش نشان داد که اگر شاخص 3-10 سطح پشتیبانی را برای هر دوره زمانی نشان دهد ، راحت تر است. برای دستیابی به این هدف ، باید ورودی های ورودی مربوطه را MAXR و MAXCROSSESLEVEL انتخاب کنیم. در طول آزمایش MAXR از 0. 0003 برای بازه های زمانی کوتاهتر به 0. 002 برای مدت طولانی متغیر بود. MaxCrosseslevel از 3 تا 20 متغیر است. شاید پیکربندی این شاخص مفید باشد تا بتواند مقدار مشخصی از مهمترین سطح پشتیبانی را نشان دهد ، اما اگر چنین باشد ، این کد را پیچیده تر می کرد. من فکر می کنم کسانی که نشانگر من را دوست دارند می توانند خودشان به راحتی این کار را انجام دهند.

پرونده های پیوست | findlevels. mq4 (5. 21 kb)

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

مقالات دیگر این نویسنده

  • نمایش تقویم خبری
  • Martingale چیست و استفاده از آن منطقی است؟
  • روشی برای ترسیم سطح پشتیبانی/مقاومت
معاملات FX...
ما را در سایت معاملات FX دنبال می کنید

برچسب : نویسنده : شهلا ریاحی بازدید : <-PostHit-> تاريخ : پنجشنبه 26 مرداد 1402 ساعت: 16:08