راهنمای Pine Script v5: اولین اندیکاتور اختصاصی فارکس خود را کدنویسی کنید

با ساخت ابزارهایی متناسب با استراتژی خود، از «زنجیره غذایی فارکس» فراتر روید. این راهنما به شما می‌آموزد چگونه برای ساخت اندیکاتورهای حرفه‌ای در Pine Script v5 مسلط شوید.

FXNX

FXNX

writer

۷ اسفند ۱۴۰۴
9 دقیقه مطالعه
A high-tech workspace showing a laptop with the TradingView Pine Editor open, featuring clean code on one side and a professional forex chart with a custom indicator on the other.

تصور کنید ساعت‌ها در کتابخانه عمومی TradingView جستجو می‌کنید، فقط برای اینکه بفهمید هر اندیکاتور «جام مقدس» (Holy Grail) دچار تاخیر است، ری‌پینت (Repaint) می‌شود یا نمودار شما را با نویزهای بی‌پایان شلوغ می‌کند. برای یک معامله‌گر سطح متوسط، زنجیره غذایی فارکس طوری طراحی شده است که کسانی را که به ابزارهای آماده و عمومی متکی هستند، ببلعد. رمز اجرای معاملات در سطح حرفه‌ای، یافتن یک اندیکاتور بهتر نیست؛ بلکه ساختن ابزاری است که به زبان استراتژی خاص شما صحبت کند. با تسلط بر Pine Script v5، شما دیگر مصرف‌کننده داده‌های تاخیری نخواهید بود و به معمار آلفا تبدیل می‌شوید. این راهنما شما را از یک اسکریپت خالی به یک ابزار کاربردی و سفارشی می‌رساند که نویز بازار را فیلتر کرده و کاملاً با پروفایل ریسک شما همسو است. آیا آماده‌اید که «خرید اندیکاتور» را متوقف کرده و کدنویسی مزیت معاملاتی خود را شروع کنید؟

موتور Pine Script v5: تفکر کندل‌به‌کندل

چرا نسخه ۵ استاندارد مدرن است؟

اگر قبلاً در TradingView کدنویسی کرده باشید، ممکن است اسکریپت‌هایی را دیده باشید که با //@version=4 یا حتی قدیمی‌تر شروع می‌شوند. در حالی که آن‌ها هنوز کار می‌کنند، Pine Script v5 به دلایلی استاندارد فعلی صنعت است. این نسخه فضاهای نام (Namespaces) را برای گروه‌بندی منطقی توابع، کتابخانه‌های بهتر و اجرای پایدارتر معرفی کرد. برای یک معامله‌گر، این به معنای باگ‌های کمتر در هنگام محاسبه یک سیگنال ورود پیچیده در جفت‌ارز GBP/USD در زمان بازگشایی پرنوسان لندن است. نسخه ۵ طوری طراحی شده که تمیزتر و خواناتر باشد، که این موضوع زمانی که در حال تبدیل شدن به یک معمار سیستم هستید، بسیار حیاتی است.

مدل اجرا: Pine در مقابل برنامه‌نویسی سنتی

A conceptual diagram showing the 'Bar-by-Bar' execution model: an arrow moving across a series of candles, with a 'Calculation' box above each one.
To visually explain the fundamental way Pine Script processes data.

اکثر زبان‌های برنامه‌نویسی مانند Python یا C++ یک بار از بالا به پایین اجرا می‌شوند. Pine Script متفاوت است؛ این یک موتور «کندل‌به‌کندل» (Bar-by-bar) است. آن را مانند یک پروژکتور فیلم تصور کنید. اگر نمودار شما دارای ۵۰۰ کندل باشد، اسکریپت شما ۵۰۰ بار اجرا می‌شود، یعنی یک بار برای هر کندل از چپ به راست. در آخرین کندل (کندل لایو)، اسکریپت با هر تیک قیمت (Tick) مجدداً اجرا می‌شود.

درک این موضوع، لحظه درخشش شماست. شما اسکریپتی نمی‌نویسید که کل نمودار را یک‌باره ببیند؛ شما منطقی را برای یک کندل واحد می‌نویسید و Pine تکرار آن را برای شما مدیریت می‌کند. به همین دلیل است که محاسبات حتی زمانی که از ریاضیات سنگین در نمودار ۱ دقیقه‌ای استفاده می‌کنید، سبک و سریع باقی می‌مانند.

نکته حرفه‌ای: از آنجایی که اسکریپت در هر تیکِ کندل زنده مجدداً اجرا می‌شود، باید بین محاسبات «گذرا» (که در هر تیک بازنشانی می‌شوند) و متغیرهای «پایدار» (که مقدار خود را از کندل قبلی به یاد می‌آورند) تمایز قائل شوید. اگر می‌خواهید یک متغیر مقدار خود را در طول کندل‌ها حفظ کند، از کلمه کلیدی var استفاده کنید.

آناتومی یک اسکریپت و قدرت داده‌های «سری»

تجزیه و تحلیل اعلان و منطق

هر Pine Script حرفه‌ای از یک ساختار چهار بخشی خاص پیروی می‌کند. اول اعلان (Declaration) است، جایی که به TradingView می‌گویید «این نسخه ۵ است» و «این یک اندیکاتور است، نه یک استراتژی». دوم ورودی‌ها (Inputs) هستند که منوی تنظیمات را برای کاربران شما ایجاد می‌کنند. سوم منطق محاسباتی (Calculation Logic) است که در آن ریاضیات انجام می‌شود. در نهایت، خروجی (Output) که در آن از توابعی مانند plot() برای ترسیم روی نمودار استفاده می‌کنید.

تسلط بر آرایه‌های OHLC بدون حلقه‌های پیچیده

در اکثر زبان‌ها، اگر بخواهید میانگین ۱۴ قیمت پایانی اخیر را پیدا کنید، باید یک حلقه «for» بنویسید تا در یک آرایه پیمایش کند. Pine Script این کار را از طریق داده‌های سری (Series) بسیار آسان کرده است.

در Pine، کلمه close فقط یک عدد نیست؛ بلکه یک سری (لیستی) از تمام قیمت‌های پایانی در تاریخچه است. برای نگاه به گذشته، از عملگر ارجاع به تاریخچه [] استفاده می‌کنید.

مثال: close[0] قیمت فعلی است. close[1] قیمت پایانی کندل قبلی است. اگر در حال معامله شکست (Breakout) در EUR/USD هستید، بررسی اینکه آیا high[0] > high[1] است، یک کار تک‌خطی است، نه یک حلقه ۱۰ خطی.

این مدیریت داخلی تاریخچه قیمت، چیزی است که Pine Script را به کارآمدترین زبان برای تحلیل تکنیکال تبدیل می‌کند. می‌توانید جزئیات بیشتر درباره این انواع داده را در مستندات رسمی TradingView بیابید.

A split-screen comparison: One side showing raw price action, the other showing the same chart with a custom color-coded momentum indicator.
To demonstrate the power of visual logic and conditional coloring.

ساخت رابط کاربری: ایجاد ورودی‌های داینامیک کاربر

قابل تنظیم کردن اندیکاتور

کدنویسی اعداد به صورت ثابت (Hard-coding) سریع‌ترین راه برای خراب کردن یک استراتژی است. اگر یک میانگین متحرک ۲۰ دوره‌ای را به صورت ثابت کدنویسی کنید، هر بار که بازار از یک محیط رونددار به رنج تغییر می‌کند، باید کد را بازنویسی کنید. در عوض، ما از کتابخانه input استفاده می‌کنیم. این به شما اجازه می‌دهد پارامترها را در آیکون چرخ‌دنده «Settings» تغییر دهید بدون اینکه دیگر به کد نگاه کنید.

انواع ورودی: int، float و source

برای ساخت یک رابط کاربری حرفه‌ای، باید از انواع ورودی صحیح استفاده کنید:

  1. input.int: برای اعداد صحیح مانند طول دوره‌ها (مثلاً RSI با دوره ۱۴) استفاده می‌شود.
  2. input.float: برای اعداد اعشاری (مثلاً ضریب ATR برابر با ۱.۵) استفاده می‌شود.
  3. input.source: این یک ورودی قدرتمند است. به کاربر اجازه می‌دهد انتخاب کند از کدام داده‌های قیمت استفاده شود؛ close ،hl2 (میانه) یا حتی خروجی یک اندیکاتور دیگر.

هشدار: همیشه برای ورودی‌های خود عناوین واضح و «tooltips» (راهنما) قرار دهید. یک سال دیگر، به یاد نخواهید آورد که "Var1" چه کاری انجام می‌دهد، اما "Trend Filter Sensitivity" را درک خواهید کرد. حرفه‌ای بودن در رابط کاربری منجر به خطاهای اجرای کمتر در معاملات زنده می‌شود.

هنگام انتخاب ورودی‌های خود، استفاده از اندیکاتورهای تطبیقی را در نظر بگیرید که بر اساس کانتکست بازار تغییر می‌کنند، نه اعداد ایستا.

منطق بصری: کدنویسی مومنتوم و رنگ‌های شرطی

A screenshot of the TradingView 'Settings' menu showing custom inputs (integer sliders, dropdowns, and color pickers) created via code.
To show the reader what the end-user interface looks like.

پیاده‌سازی دستورات 'If' برای شرایط بازار

اکنون به قلب اسکریپت می‌رسیم: منطق. فرض کنید می‌خواهید یک موقعیت خرید (Long) با احتمال بالا را شناسایی کنید. ممکن است بخواهید قیمت بالای EMA ۲۰۰ روزه باشد، در حالی که RSI زیر ۳۰ (اشباع فروش) است. در Pine، این شبیه به یک بررسی منطقی ساده است:

isLong = price > ema200 and rsiValue < 30

این متغیر بولین (true/false) سپس می‌تواند برای ایجاد تغییرات بصری در نمودار شما استفاده شود. اینگونه است که شما بر نوسانات مسلط می‌شوید؛ با ایجاد فیلترهایی که فقط زمانی سیگنال‌ها را نشان می‌دهند که شرایط خاصی برقرار باشد.

جلوه‌های بصری داینامیک با color.new و plot()

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

plotColor = isLong ? color.green : color.red
plot(ema20, color=plotColor, linewidth=2)

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

ابزارهای حرفه‌ای: عیب‌یابی و تله ری‌پینت

استفاده از Data Window به عنوان کنسول عیب‌یابی

یکی از بزرگترین ناامیدی‌ها برای کدنویس‌های تازه کار این است که اندیکاتور به درستی محاسبه نمی‌شود. تابع plot() در اینجا بهترین دوست شماست. حتی اگر نمی‌خواهید مقداری را روی نمودار ببینید، می‌توانید آن را ترسیم کرده و در Data Window (نوار کناری در TradingView) بررسی کنید. اگر محاسبات شما می‌گوید ATR باید ۰.۰۰۱۵ باشد اما Data Window عدد ۱۵۰.۰ را نشان می‌دهد، متوجه می‌شوید که قبل از ریسک کردن حتی یک دلار، خطای جایگذاری اعشار دارید.

An infographic summarizing the 4 parts of a script: Declaration, Inputs, Logic, and Output.
To provide a quick-reference summary of the article's core technical lesson.

چرا اندیکاتورها در گذشته عالی به نظر می‌رسند (و چگونه آن را اصلاح کنیم)

این همان «تله ری‌پینت» (Repainting Trap) است. برخی توابع، به ویژه request.security (که برای تحلیل چند‌تایم‌فریمه استفاده می‌شود)، می‌توانند به طور تصادفی در طول بک‌تست به آینده نگاه کنند.

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

نکته حرفه‌ای: همیشه هنگام دریافت داده از تایم‌فریم‌های بالاتر از lookahead = barmerge.lookahead_off استفاده کنید. این اطمینان می‌دهد که اسکریپت شما فقط از داده‌هایی استفاده می‌کند که در آن لحظه خاص واقعاً در دسترس بوده‌اند. اجتناب از این تله‌ها برای حذف لغزش قیمت و خطاهای اجرا ضروری است.

نتیجه‌گیری

تسلط بر Pine Script مهم‌ترین قدم در تبدیل شدن از یک «خریدار اندیکاتور» خرد به یک معامله‌گر سیستماتیک است. ما مسیر درک موتور v5 تا ساخت یک ابزار بصری و داینامیک را که نویز زنجیره غذایی فارکس را فیلتر می‌کند، پوشش دادیم. با کدنویسی ابزارهای خود، اطمینان حاصل می‌کنید که تحلیل تکنیکال شما بازتاب مستقیمی از پروفایل ریسک منحصر‌به‌فرد شماست، نه یک قالب عمومی. همانطور که به اصلاح اسکریپت خود ادامه می‌دهید، به یاد داشته باشید که قدرتمندترین اندیکاتورها اغلب ساده‌ترین‌هایی هستند که شما عمیقاً آن‌ها را درک می‌کنید. در FXNX، ما به توانمندسازی معامله‌گران با داده‌ها و ابزارهای مورد نیاز برای دقت معتقدیم؛ اولین اسکریپت سفارشی شما، پایه و اساس آن دقت است.

قدم بعدی شما: همین حالا Pine Editor خود را در TradingView باز کنید و سعی کنید یک اندیکاتور ساده تقاطع EMA کدنویسی کنید که وقتی نوسانات (ATR) بالای میانگین ۱۴ روزه خود است، تغییر رنگ دهد. پس از ساخت آن، نتایج خود را با جامعه FXNX به اشتراک بگذارید!

سوالات متداول

کاربرد Pine Script v5 چیست؟

‏Pine Script v5 زبان برنامه‌نویسی اختصاصی TradingView است که برای ایجاد اندیکاتورهای تکنیکال سفارشی، استراتژی‌های بک‌تست و هشدارهای خودکار برای بازارهای مالی مانند فارکس و سهام استفاده می‌شود.

آیا می‌توانم از Pine Script برای خودکارسازی معاملات فارکس استفاده کنم؟

بله، در حالی که Pine Script در TradingView اجرا می‌شود، می‌توانید اسکریپت‌های خود را به کارگزاران متصل کنید یا از Webhookها برای ارسال سیگنال به پلتفرم‌های اجرای خودکار استفاده کنید که اجازه معامله کاملاً بدون دخالت دست را می‌دهد.

چگونه یک اندیکاتور ری‌پینت شونده را در Pine Script v5 اصلاح کنم؟

برای رفع ری‌پینت، مطمئن شوید که از داده‌های آینده در محاسبات خود استفاده نمی‌کنید. هنگام استفاده از توابع چند‌تایم‌فریمه مانند request.security ، همیشه پارامتر lookahead را روی barmerge.lookahead_off تنظیم کنید تا اسکریپت فقط از داده‌های تاریخی تایید شده استفاده کند.

همین حالا شروع کنید

با اسپرد ۰.۰ پیپ و بیش از ۵۰۰ ابزار معاملاتی، به هزاران تریدر حرفه‌ای بپیوندید.

Share

درباره نویسنده

FXNX

FXNX

نویسنده محتوا
موضوعات:
  • راهنمای Pine Script v5
  • اندیکاتور سفارشی فارکس
  • برنامه‌نویسی تریدینگ ویو
  • معاملات الگوریتمیک فارکس
  • تحلیل تکنیکال فارکس