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

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

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

Close > Open (آخرین بزرگتر از اولین)
ب) شرط برابری بسته شدن با بالاترین قیمت
برای اینکه مطمئن شویم سایه بالایی نداریم، باید قیمت بسته شدن را با بالاترین قیمت (High) برابر در نظر بگیریم:
Close == High (آخرین مساوی با بالاترین)

ج) شرط اندازه سایه پایینی نسبت به بدنه
این بخش کمی محاسباتیتر است. ما باید دو مقدار را محاسبه کنیم:
- اندازه سایه پایینی: قیمت باز شدن منهای قیمت پایینترین قیمت (Open - Low).
- اندازه بدنه: قیمت بسته شدن منهای قیمت باز شدن (Close - Open).
حالا شرط نهایی این است که سایه پایینی حداقل دو برابر بدنه باشد:

(Open - Low) >= 2 * (Close - Open)
اجرای فیلتر و نتیجهگیری
وقتی تمام این شروط را با هم ترکیب میکنیم (با استفاده از عملگر AND)، ما یک فیلتر دقیق و اختصاصی ساختهایم که فقط نمادهایی را نشان میدهد که دقیقاً این الگوی خاص را دارند. در یک مثال واقعی، این فیلتر میتواند در یک روز خاص فقط چند نماد (مثلاً ۸ نماد) را در بورس و فرابورس شناسایی کند.

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