الگوسهام | AlgoSaham
کل ---%---
پرایس اکشن

فیلتر برگشت از کف کانال صعودی موازی با پایتون

فیلتر سهم‌هایی که در یک کانال صعودی موازی حرکت می‌کنند و در ۵ روز اخیر به کف کانال خورده و برگشته‌اند؛ کانالی که از بالا و پایین تأیید شده و قیمت هنوز در نیمه‌ی پایین آن است.

این فیلتر چیست؟

کانال صعودی موازی یعنی سهم بین دو خط موازی رو به بالا حرکت می‌کند: کف‌ها روی خط پایین می‌نشینند و سقف‌ها به خط بالا می‌رسند. هر بار که قیمت به کف کانال می‌رسد، خریدارها همان‌جا وارد شده‌اند و قیمت را تا نزدیک سقف کانال برده‌اند. این فیلتر کانال را با قاعده‌ای مشخص از روی کف‌ها و سقف‌های سهم می‌کشد، بررسی می‌کند که قیمت بین دو کف واقعاً تا سقف کانال رفته و برگشته باشد، و سهم‌هایی را برمی‌گرداند که در ۵ روز اخیر دوباره به کف کانال خورده‌اند، امروز بالاتر از روز برخورد بسته شده‌اند و هنوز در ۴۰ درصد پایین کانال‌اند.

کد فیلتر با پایتون

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

کانال صعودی موازی چیست و چرا کف آن مهم است

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

کانال را چطور می‌کشیم

قدم اول تعریف کف و سقف است. روزی کف حساب می‌شود که کمترین قیمتش از کمترین قیمت ۳ روز قبل و ۳ روز بعدش پایین‌تر باشد، و روزی سقف که بیشترین قیمتش از ۳ روز قبل و بعدش بالاتر باشد.
قدم دوم کف اول کانال است: پایین‌ترین کف بین ۲۰ تا ۶۰ روز معاملاتی پیش. کانال از اینجا شروع می‌شود، چون در یک روند صعودی پایین‌ترین کف معمولاً قدیمی‌ترین کف است.
قدم سوم کف دوم است و مهم‌ترین قسمت کار. بین کف اول و ۸ روز اخیر معمولاً چند کف دیگر هست. فیلتر خط را از کف اول به هر کدام از این کف‌ها می‌کشد و خطی را انتخاب می‌کند که کمترین شیب را دارد. فقط این خط از زیر همه‌ی کف‌ها رد می‌شود؛ اگر خط را به کفی با شیب تندتر وصل کنیم، کف کم‌شیب‌تر زیر خط می‌ماند. این همان کاری است که با خط‌کش می‌کنید: خط‌کش را روی کف اول نگه می‌دارید و از پایین بالا می‌آورید تا به اولین کفی بخورد. شیب این خط باید مثبت باشد، یعنی کانال واقعاً صعودی باشد.
قدم چهارم سقف کانال است: خطی موازی با کف کانال که از بالاترین نقطه نسبت به کف کانال می‌گذرد. فیلتر برای هر روز از کف اول تا دیروز فاصله‌ی بیشترین قیمت تا کف کانال را حساب می‌کند و بیشترینش را پهنای کانال می‌گیرد. پس هیچ سقفی بالای سقف کانال نمی‌ماند.

نه شرط فیلتر به زبان ساده

یک مثال ساده: کف اول ۴۰ روز پیش با کمترین قیمت ۱۰۰۰ ریال، کف دوم ۲۰ روز پیش با ۱۱۰۰ ریال. کف کانال روزی ۵ ریال بالا می‌رود و امروز روی ۱۲۰۰ ریال است. بالاترین سقف ۱۵۰ ریال بالای خط بوده، پس پهنای کانال ۱۵۰ ریال است و سقف کانال امروز روی ۱۳۵۰.
شرط اول و دوم، دو کف کانال: کف اول پایین‌ترین کف ۲۰ تا ۶۰ روز پیش، و کف دوم کفی که دست‌کم ۸ روز پیش و دست‌کم ۸ روز بعد از کف اول ثبت شده و کم‌شیب‌ترین خط رو به بالا را می‌سازد. فاصله‌ی ۸ روزه برای این است که دو کف خیلی نزدیک، که در واقع یک کف‌اند، کانال نسازند، و برخورد امروز هم با کف دوم یکی نشود.
شرط سوم، سالم ماندن کانال: از کف اول تا امروز هیچ روزی کمترین قیمتش بیشتر از ۱٫۵ درصد زیر کف کانال نرفته باشد. اگر قیمت یک بار کف کانال را جدی شکسته باشد، آن کانال دیگر معتبر نیست. این ۱٫۵ درصد حاشیه برای سایه‌هایی است که کمی از خط رد می‌شوند و همان روز برمی‌گردند.
شرط چهارم، پهنای کانال: پهنا دست‌کم ۸ درصد قیمت باشد؛ در مثال ۱۵۰ تقسیم بر ۱۲۰۰، یعنی ۱۲٫۵ درصد. کانالی که پهنایش ۳ یا ۴ درصد است بیشتر یک روند آرام است و جای کافی برای رشد تا سقفش ندارد.
شرط پنجم، برخورد: در ۵ روز اخیر کمترین قیمت یک روز به کف کانال رسیده باشد، یعنی حداکثر ۱۰ درصد پهنای کانال بالای خط. در مثال یعنی ۱۵ ریال؛ اگر کف کانال دیروز ۱۱۹۵ بوده، کمترین قیمت دیروز باید ۱۲۱۰ یا کمتر بوده باشد.
شرط ششم، زیگزاگ: بین کف اول و کف دوم یک سقف، و بین کف دوم و روز برخورد یک سقف دیگر باید به سقف کانال رسیده باشد، یعنی دست‌کم ۸۵ درصد پهنای کانال بالای کف کانال. این شرط کانال را واقعاً کانال می‌کند: قیمت باید بین دیواره‌ها رفت و برگشت کرده باشد. بدون این شرط، هر سهمی که آرام بالا رفته و امروز کمی اصلاح کرده هم کانال حساب می‌شد.
شرط هفتم، شروع برگشت: پایانی امروز بالاتر از پایانی روز برخورد باشد. شرط هشتم، جا برای رشد: قیمت امروز بالای کف کانال و حداکثر در ۴۰ درصد پایین کانال باشد. در مثال یعنی بین ۱۲۰۰ و ۱۲۶۰. شرط نهم، نقدشوندگی: ارزش معاملات امروز بیشتر از ۳ میلیارد ریال، یعنی ۳۰۰ میلیون تومان، باشد.

روزها را چطور می‌شمارد: x، off و ردیف‌های تاریخچه

در کد، x شماره‌ی روز به عقب است: x برابر ۱ دیروز است، ۲ پریروز و همین‌طور تا عقب. x برابر صفر خود امروز است که قیمتش از تابلو می‌آید. تابع line(x) جایی است که کف کانال در روز x به آن رسیده و line(x)+w جای سقف کانال در همان روز است.
«روز» یعنی ردیف تاریخچه، نه روز تقویمی. تعطیلی‌ها و روزهایی که نماد بسته بوده ردیف ندارند و کانال هم در همین روزهای معاملاتی بالا می‌رود. شیب کانال در ستون سوم هم بر حسب ۲۰ روز معاملاتی، تقریباً یک ماه، گزارش می‌شود.
متغیر off مثل بقیه‌ی فیلترهای الگوسهام برای این است که x برابر ۱ همیشه واقعاً دیروز باشد. اگر اولین ردیف تاریخچه همان قیمت پایانی، تعداد معامله و ارزش معاملاتی را داشته باشد که تابلوی امروز نشان می‌دهد، آن ردیف خود امروز است و فیلتر یک ردیف جلوتر شروع می‌کند.

کد خط به خط

var h=[it] تاریخچه‌ی تعدیل‌شده را در h می‌گذارد و چند خط بعد نمادی را که تاریخچه ندارد، قیمتش صفر است یا کمتر از ۷۰ روز تاریخچه دارد کنار می‌گذارند. توابع lo، hi و cl کمترین، بیشترین و پایانی روز x را برمی‌گردانند و حلقه‌ی بعدی بررسی می‌کند که در ۶۳ روز اخیر هیچ ردیف خالی یا صفری نباشد.
isLow و isHigh تعریف کف و سقف‌اند؛ نامساوی‌ها یکی سخت و یکی ملایم‌اند تا از دو روز برابر فقط یکی کف یا سقف شود. حلقه‌ی xa پایین‌ترین کف ۲۰ تا ۶۰ روز پیش را پیدا می‌کند. حلقه‌ی xb برای هر کف بین ۸ روز پیش و ۸ روز بعد از کف اول شیب sx را حساب می‌کند و کمترینش را نگه می‌دارد؛ s شیب کف کانال به ریال در هر روز است و اگر مثبت نباشد نماد کنار می‌رود.
تابع line معادله‌ی کف کانال است. حلقه‌ی بعدی شرط سوم است و حلقه‌ی w پهنای کانال را پیدا می‌کند. بعد شرط پهنای ۸ درصدی می‌آید. حلقه‌ی xt در ۵ روز اخیر اولین روزی را پیدا می‌کند که کمترین قیمتش در ۱۰ درصد پایین کانال بوده. تابع topBetween بررسی می‌کند که بین دو روز، سقفی به ۸۵ درصد پهنای کانال رسیده باشد، و دو بار صدا زده می‌شود: یک بار بین کف دوم و کف اول و یک بار بین برخورد و کف دوم.
pos جای قیمت امروز در کانال است: صفر یعنی روی کف کانال و ۱ یعنی روی سقف. پنج خط بعدی ستون‌ها را پر می‌کنند و خط return شرط‌های هفتم تا نهم را می‌سنجد. کل بدنه داخل تابعی است که بلافاصله اجرا می‌شود و true===function(){...}() نتیجه‌اش را به true یا false تبدیل می‌کند.

عددها را چطور با سلیقه‌ی خودتان تنظیم کنید

برای اینکه اثر هر تغییر ملموس باشد، چند نسخه از فیلتر را روی همان بازار پایان معاملات ۲۱ مهر ۱۴۰۵ اجرا کردیم که نسخه‌ی اصلی در آن ۳ نماد برگرداند: غمینو، سخواف و سنوین. همین فیلتر را روی ۳۰ روز معاملاتی قبل از آن هم اجرا کردیم و به‌طور متوسط روزی ۲ تا ۳ نماد برگرداند.
مهم‌ترین شرط زیگزاگ است. اگر دو خط topBetween را حذف کنید، فهرست آن روز از ۳ به ۴۷ نماد می‌رسد؛ بیشترشان سهم‌هایی‌اند که آرام بالا رفته‌اند و کانال واقعی نساخته‌اند.
اگر برخورد دقیق‌تر می‌خواهید، w*0.1 را در حلقه‌ی xt به w*0.05 تغییر دهید؛ سخواف که کمترین قیمتش ۸ درصد پهنای کانال بالای خط بود بیرون رفت. اگر فقط سهم‌هایی را می‌خواهید که هنوز نزدیک کف کانال‌اند، pos<0.4 را به pos<0.25 تغییر دهید؛ باز هم سخواف با ستون اول ۳۱ بیرون رفت.
حاشیه‌ی شرط سوم را با 0.985 تنظیم کنید. با 0.97، یعنی ۳ درصد حاشیه، دو نماد دیگر هم اضافه شدند؛ کانال‌هایی که کمترین قیمت یک روزشان بین ۱٫۵ تا ۳ درصد زیر کف کانال رفته بود. با 0.995 همان ۳ نماد ماند. تغییر حد پهنا به ۱۲ درصد، بازه‌ی برخورد به ۳ روز، حد ۵۰ درصد برای جای قیمت، K برابر ۲ یا ارزش معاملات ۱۰ میلیارد ریال در آن روز چیزی را عوض نکرد.
برای کانال‌های بلندتر بازه‌ی کف اول را بزرگ کنید: x<=60 را در حلقه‌ی xa به x<=90 و عدد 63 را به 93 و 70 را به 100 تغییر دهید. در آن روز غمینو بیرون رفت، چون در بازه‌ی ۹۰ روزه کف پایین‌تری پیدا شد و کانال دیگری کشیده شد. برای این تغییر تاریخچه‌ی تعدیل‌شده‌ی ۳۰۰ روزه را بارگذاری کنید.

خروجی فیلتر را چطور بخوانیم

ستون اول جای قیمت در کانال است. عدد نزدیک صفر یعنی قیمت هنوز روی کف کانال است و برگشت تازه شروع شده؛ عدد نزدیک ۴۰ یعنی بخشی از راه رفته شده. ستون پنجم فاصله تا سقف کانال است، یعنی اگر قیمت مثل موج‌های قبل تا سقف کانال برود چقدر جا دارد.
ستون دوم پهنای کانال است و ستون سوم شیبش. کانال پهن با شیب ملایم جای بیشتری برای نوسان دارد؛ کانال باریک با شیب تند معمولاً عمر کوتاه‌تری دارد، چون قیمت نمی‌تواند برای همیشه با آن سرعت بالا برود. ستون چهارم تعداد روزهای گذشته از برخورد است و نشان می‌دهد برگشت چقدر تازه است.
بعد از فیلتر، برای هر نماد این‌ها را نگاه کنید: آیا در روز برخورد یا امروز پول حقیقی وارد شده، آیا حجم برگشت از حجم اصلاح بیشتر است، و آیا قیمت در روزهای بعد بالای کف کانال می‌ماند. کانالی که قیمت زیر کفش بسته شود و همان‌جا بماند، شکسته شده است.

سیگنال‌های اصلی

  • کف کانال از پایین‌ترین کف ۲۰ تا ۶۰ روز اخیر و کف دومی که کم‌شیب‌ترین خط رو به بالا را می‌سازد
  • سقف کانال موازی با کف، از بالاترین سقف نسبت به کف کانال
  • رفت و برگشت قیمت بین کف و سقف کانال، با دو سقف که به سقف کانال رسیده‌اند
  • برخورد به کف کانال در ۵ روز اخیر و پایانی امروز بالاتر از روز برخورد
  • قیمت امروز در ۴۰ درصد پایین کانال
  • ارزش معاملات امروز بیشتر از ۳۰۰ میلیون تومان

کاربردهای این فیلتر

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

اشتباه‌های رایج در استفاده از این فیلتر

  • این فیلتر دست‌کم ۷۰ روز تاریخچه‌ی تعدیل‌شده لازم دارد. تاریخچه‌ی ۹۰ روزه کافی است، ولی اگر بازه‌ی کف اول را بزرگ می‌کنید تاریخچه‌ی ۳۰۰ روزه را بارگذاری کنید.
  • کانال بر اساس کف‌ها کشیده می‌شود و سقف کانال فقط موازی آن است. اگر سقف‌های سهم شیب دیگری داشته باشند، مثلاً کانال در بالا باریک‌تر شود، این فیلتر آن را کانال موازی می‌بیند و سقف کانال را بالاتر از جایی که سقف‌ها واقعاً هستند نشان می‌دهد.
  • فیلتر برخورد ۵ روز اخیر را نگاه می‌کند، پس یک نماد ممکن است چند روز پشت سر هم در خروجی بیاید. ستون چهارم را ببینید تا بدانید برخورد چند روز پیش بوده.
  • وسط بازار قیمت پایانی هنوز نهایی نشده و جای قیمت در کانال هر لحظه عوض می‌شود. نتیجه‌ی قطعی را بعد از بسته شدن بازار ببینید.
  • برخورد به کف کانال احتمال برگشت را بالا می‌برد، تضمینش نمی‌کند. هر برخورد یک آزمون است و کانالی که چند بار تست شده ممکن است بار بعد شکسته شود.

پرسش‌های پرتکرار

کانال صعودی موازی در این فیلتر چطور رسم می‌شود؟
کف کانال از پایین‌ترین کف ۲۰ تا ۶۰ روز اخیر شروع می‌شود و به کفی وصل می‌شود که دست‌کم ۸ روز بعد ثبت شده و کم‌شیب‌ترین خط را می‌سازد؛ این تنها خطی است که از زیر همه‌ی کف‌ها رد می‌شود. سقف کانال خطی موازی با آن است که از بالاترین سقف نسبت به کف کانال می‌گذرد.
چرا شرط زیگزاگ لازم است؟
بدون آن، هر سهمی که آرام بالا رفته و کمی اصلاح کرده کانال حساب می‌شد. شرط زیگزاگ می‌خواهد قیمت دست‌کم دو بار، یک بار بین دو کف و یک بار بعد از کف دوم، تا سقف کانال رفته باشد. در اجرای ۲۱ مهر ۱۴۰۵ حذف این شرط فهرست را از ۳ به ۴۷ نماد رساند.
حد ضرر و هدف را چطور از کانال بخوانیم؟
رایج‌ترین روش این است که حد ضرر کمی زیر کف کانال گذاشته شود، چون بسته شدن زیر کف کانال یعنی کانال شکسته شده، و هدف اول سقف کانال باشد. ستون پنجم فاصله‌ی قیمت امروز تا سقف کانال را به درصد نشان می‌دهد و ستون اول نشان می‌دهد قیمت چقدر از کف کانال فاصله گرفته است.
می‌شود همین فیلتر را برای کانال نزولی نوشت؟
بله، با برعکس کردن منطق. خط اصلی را از سقف‌ها بکشید: بالاترین سقف ۲۰ تا ۶۰ روز اخیر و سقفی که کم‌شیب‌ترین خط رو به پایین را می‌سازد، یعنی بزرگ‌ترین شیب منفی. کف کانال خطی موازی از پایین‌ترین کف نسبت به آن است. بعد برخورد به سقف کانال در ۵ روز اخیر و پایانی امروز پایین‌تر از روز برخورد را بخواهید.
چرا بعضی روزها هیچ سهمی از این فیلتر رد نمی‌شود؟
کانال تمیز با دو برخورد به سقف کم پیش می‌آید و برخورد به کف آن هم فقط چند روز طول می‌کشد. در ۳۰ روز معاملاتی قبل از ۲۱ مهر ۱۴۰۵ این فیلتر به‌طور متوسط روزی ۲ تا ۳ نماد برگرداند و بعضی روزها هیچ. در بازارهای ریزشی که کانال‌های صعودی شکسته می‌شوند، فهرست ممکن است چند روز خالی بماند.

فیلترهای مرتبط

می‌خواهید این فیلتر را روی بازار زنده امتحان کنید؟

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