چطور با استراتژیهای Pine Script بهصورت خودکار معامله کنیم؟
در حال حاضر، ترید خودکار با استفاده از استراتژیهای Pine Script فقط در حالت بکتست (Backtesting) قابل انجامه. یعنی میتونی استراتژیات رو بنویسی، اجراش کنی، و نتایج گذشتهاش رو ببینی — اما نمیتونی مستقیماً از طریق اکانت بروکری داخل تریدینگویو اون رو بهصورت خودکار اجرا کنی.
فعلاً امکان ترید خودکار با اتصال مستقیم به کارگزاری (Broker) از طریق استراتژیهای Pine Script توی TradingView فعال نیست. البته تیم تریدینگویو گفته دارن این قابلیت رو برای آینده بررسی میکنن.
استراتژی، بکتستینگ و فوروارد تستینگ یعنی چی؟
استراتژی یه اسکریپته (کدی که با زبان Pine Script توی TradingView نوشته میشه) که میتونه روی چارت دستور خرید و فروش بده، سفارش بفرسته، لغوش کنه یا تغییرش بده و یه جورایی شبیهسازی ترید واقعی رو انجام بده، بدون اینکه واقعاً تریدی انجام بشه.
بکتستینگ یعنی اینکه استراتژیت رو ببری روی دادههای گذشتهی بازار و ببینی اگه این استراتژی رو قبلاً اجرا میکردی، چه اتفاقی میافتاد. مثلاً سود میکردی یا ضرر. این کار کمک میکنه بفهمی استراتژیت چقدر کارآمد بوده.
فوروارد تستینگ یعنی همین استراتژی رو بذاری روی چارت زنده و ببینی با حرکت قیمتهای واقعی الان، چطور کار میکنه. یعنی توی زمان واقعی رفتار استراتژیت رو ببینی، ولی هنوز سفارش واقعی نمیذاری. فقط یه مدل شبیهسازیه که همراه با آپدیت شدن چارت، عملکرد استراتژی رو نشون میده.
چطور میتونم نتایج یه استراتژی رو تحلیل کنم؟

وقتی یه استراتژی رو به چارت اضافه میکنی، یه بخش جدید به اسم Strategy Tester (تستر استراتژی) ظاهر میشه که نتایج عملکرد استراتژی رو بهت نشون میده.
توی این بخش، سه قسمت مختلف وجود داره:
- Overview (نمای کلی): یه خلاصه از عملکرد استراتژی رو نشون میده.
- Performance Summary (خلاصه عملکرد): آمار دقیقتری مثل درصد سود، حداکثر افت سرمایه، نسبت سود به ضرر و چیزهای دیگه.
- List of Trades (لیست معاملات): تمام خرید و فروشهایی که استراتژی انجام داده رو به ترتیب نشون میده، با جزئیاتی مثل زمان ورود، خروج، سود یا ضرر هر معامله.
توی خود چارت هم پوزیشنهایی که استراتژی باز یا بسته کرده با فلش نشون داده میشن که بسته به نوع عملیات (خرید یا فروش) رنگشون فرق میکنه.

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

استراتژیها هم مثل هر اسکریپت دیگهای که با Pine Script نوشته میشن، قابل انتشار هستن.
وقتی یه استراتژی رو منتشر میکنی، گزارش کامل عملکردش همراه با تمام شاخصها (Indicators) توی همون انتشار قرار میگیره تا بقیه هم بتونن عملکردش رو ببینن.
چطور میتونم دادههای استراتژی رو خروجی بگیرم؟
اگه میخوای دادههای بخش Strategy Tester رو ذخیره کنی، میتونی از قابلیت خروجی گرفتن (Export) استفاده کنی و اون اطلاعات رو بهصورت فایل CSV دانلود کنی.
برای این کار، کافیه بری به تب Strategy Tester و روی دکمهی Download کلیک کنی.

اطلاعات هر تب بهصورت جداگانه خروجی گرفته میشن. یعنی:
- اگه روی دکمهی Download توی تب List of Trades کلیک کنی، فقط اطلاعات مربوط به معاملات خروجی گرفته میشن.
- اگه از تب Performance Summary خروجی بگیری، فقط دادههای مربوط به شاخصها و آمار عملکرد (مثل سود کل، درصد معاملات موفق، ضرر بیشینه و...) ذخیره میشن.
نکتهی مهم اینه که این قابلیت فقط برای کاربرهایی فعاله که پلن Plus یا Premium دارن. اگه از پلن رایگان یا Essential استفاده میکنی، گزینهی خروجی گرفتن فعال نخواهد بود.
ویژگیهای استراتژی (Strategy Properties)
هر استراتژی که با Pine Script نوشته میشه، یهسری ویژگی داره که رفتار اون استراتژی رو مشخص میکنه. این ویژگیها توی تنظیمات استراتژی و بخش Properties قرار دارن و شامل موارد زیر میشن:
- Initial Capital
- Base Currency
- Order Size
- Pyramiding
- Commission
- Verify Price For Limit Orders
- Slippage
- Margin
- Recalculate
- Fill Orders

هر استراتژی که با تابع strategy()
در Pine Script تعریف میشه، میتونه مجموعهای از پارامترها رو داشته باشه که رفتار کلی استراتژی رو مشخص میکنن. این پارامترها در تب Properties از تنظیمات استراتژی در تریدینگویو قابل ویرایش هستن.
در ادامه، تکتک این پارامترها رو بررسی میکنیم:
۱ - Initial Capital
نشوندهندهی مقدار سرمایهایه که استراتژی از ابتدا برای انجام معاملات در اختیار داره. این مقدار بر اساس ارزیه که توی گزینهی Base Currency تعریف شده.
بهطور پیشفرض، این مقدار برابر با ۱٬۰۰۰٬۰۰۰ هست.
ممکنه برای اینکه استراتژی بتونه روی بعضی نمادها معامله انجام بده، نیاز باشه این مقدار رو بیشتر کنی.
۲ - Base Currency
مشخص میکنه که چه ارزی برای محاسبات استفاده بشه. نتایجی که توی تب Strategy Tester نمایش داده میشن (مثل سود، ضرر، Drawdown و ...) بر اساس همین ارز نشون داده میشن.
گزینههای قابل انتخاب شامل این موارد هستن:
Default, USD, EUR, AUD, GBP, NZD, CAD, CHF, HKD, JPY, NOK, SEK, SGD, TRY, ZAR
اگه گزینهی Default انتخاب بشه، استراتژی از ارز پیشفرض همون نماد استفاده میکنه و هیچ تبدیل ارزی انجام نمیشه.
۳ - Order Size
مشخص میکنه که استراتژی با چه حجمی وارد معامله بشه و این حجم چطور محاسبه بشه. برای این بخش، باید هم مقدار بدی (value) و هم نوع محاسبه (mode).
درضمن، مقدار نهایی ممکنه بسته به حداقل مقدار قابل معامله برای اون نماد محدود بشه.
حالتهای قابل انتخاب:
- Contracts
استراتژی با تعداد مشخصی قرارداد، سهم یا لات وارد میشه. مثلاً ۱ قرارداد یا ۱۰۰ سهم. - Amount in currency
استراتژی با مقدار مشخصی پول وارد معامله میشه. این مقدار بر حسب ارز پایه تعیین میشه. مثلاً ۵۰۰ دلار. - Percentage of equity
حجم معامله بهصورت درصدی از سرمایهی موجود (equity) در لحظهی باز شدن پوزیشن محاسبه میشه. مثلاً ۱۰٪ از کل سرمایه.
۴ - Pyramiding
مشخص میکنه که استراتژی حداکثر چند بار میتونه بهصورت متوالی در یک جهت (لانگ یا شورت) وارد معامله بشه.
اگه Pyramiding غیرفعال باشه (یعنی مقدارش صفر باشه)، استراتژی فقط میتونه یک پوزیشن لانگ یا شورت باز کنه، حتی اگه شرایط ورود دوباره فراهم باشه.
این ویژگی فقط روی ورودیهایی که با تابع strategy.entry()
ساخته میشن اثر داره. روی سفارشهایی که با strategy.order()
ایجاد میشن هیچ اثری نداره.
۵ - Commission
مقدار کارمزدی هست که برای هر معامله پرداخت میشه. برای تعریفش باید هم مقدار عددی بدی و هم روش محاسبه رو مشخص کنی.
دقت کن که کارمزد هم روی ورود (entry) و هم روی خروج (exit) از معامله اعمال میشه. اگه روش درصدی رو انتخاب کنی، کارمزد بر اساس ارزش معامله محاسبه میشه و ممکنه با تغییر حجم، مقدارش هم تغییر کنه.
حالتهای موجود:
- درصد از ارزش معامله
برای هر سفارش، درصد مشخصی بهعنوان کارمزد حساب میشه. - مقدار ثابت برای هر قرارداد
برای هر قرارداد یا سهم، یک مقدار ثابت کارمزد در نظر گرفته میشه. - مقدار ثابت برای هر سفارش
برای هر سفارش (چه یک سهم باشه چه صد تا)، یه کارمزد ثابت در نظر گرفته میشه.
۶ - Verify Price For Limit Orders
شرایط ورود به معامله با استفاده از سفارشهای Limit رو سختگیرانهتر میکنه.
بهصورت پیشفرض، مقدار این پارامتر ۰ هست. یعنی توی دادههای گذشته، به محض اینکه قیمت بازار به قیمت سفارش لیمیت برسه، سفارش اجرا میشه.
اما اگه این پارامتر عددی غیر از صفر داشته باشه، سفارش لیمیت فقط وقتی توی همون کندل فعال میشه که قیمت بازار از قیمت سفارش لیمیت به اندازهی مشخصی (تعداد Tick) عبور کرده باشه.
این کار باعث میشه بکتست واقعبینانهتر بشه و از پر شدن غیرواقعی سفارشهای لیمیت جلوگیری کنه.
۷ - Slippage
مقدار لغزش قیمتی رو مشخص میکنه که به قیمت اجرای سفارشهای Market یا Stop اضافه میشه.
این مقدار به تعداد تیک (tick) تعیین میشه و برای شبیهسازی اختلافی که ممکنه بین قیمت موردنظر و قیمت واقعی اجرای سفارش وجود داشته باشه استفاده میشه.
از این پارامتر معمولاً برای در نظر گرفتن اسپرد (Spread) یا نوسانات سریع بازار استفاده میکنن، تا نتایج بکتست واقعبینانهتر بشه.
۸ - Margin for Long/Short positions
این پارامترها مقدار مارجینی که برای هر معامله نیاز هست رو مشخص میکنن، یعنی درصدی از حجم پوزیشن که معاملهگر باید با سرمایهی خودش تأمین کنه.
مثلاً اگه مارجین برای پوزیشن لانگ روی ۲۵٪ تنظیم شده باشه، یعنی معاملهگر باید ۲۵٪ از ارزش کل معامله رو از جیب خودش تأمین کنه، و این امکان رو داره که تا ۴ برابر سرمایهش (یعنی ۴۰۰٪) وارد معامله بشه.
اگه معامله باز بشه و وارد ضرر بشه و اونقدر ضرر کنه که سرمایهی معاملهگر دیگه نتونه اون ۲۵٪ رو پوشش بده، Margin Call اتفاق میافته و بخشی از پوزیشن به اجبار بسته میشه تا ضرر بیشتر نشه.
۹ - Recalculate options
مشخص میکنن که استراتژی هر چند وقت یکبار محاسبه بشه. بهصورت پیشفرض، استراتژی فقط در پایان هر کندل دوباره محاسبه میشه. ولی با استفاده از گزینههای زیر، میتونی کاری کنی که استراتژی داخل همون کندل هم مجدد محاسبه بشه:
After Order is Filled
اگه این گزینه فعال باشه، بعد از اینکه یه سفارش اجرا (Fill) شد، استراتژی یه بار دیگه توی همون کندل محاسبه میشه. این محاسبه اضافه هم روی کندلهای تاریخی انجام میشه و هم روی کندلهای زنده.
On Every Tick
بهطور پیشفرض، استراتژیها فقط روی کلوز کندلهای زنده محاسبه میشن. با فعال کردن این گزینه، استراتژی با هر آپدیت قیمت (تیک) دوباره محاسبه میشه، درست مثل یه اندیکاتور.
نکتههای مهم:
- وقتی چارت رو رفرش میکنی، اطلاعات تیک پاک میشن.
- استراتژیهایی که این گزینه رو دارن ممکنه ریپینت (repaint) داشته باشن.
- این تنظیم روی کندلهای گذشته تأثیری نداره و توی بکتست نتایج واقعگرایانهای نشون نمیده چون دادههای تیک در گذشته وجود ندارن.
۱۰ - Fill Orders
این بخش مربوط به تنظیماتی هست که مشخص میکنه سفارشها در بکتست یا زمان اجرای زنده دقیقاً چطور پر بشن. چند حالت مختلف وجود داره:
Using bar magnifier
این گزینه به شبیهساز بروکر میگه که موقع بکتست، بهجای اینکه فقط از تایمفریم فعلی استفاده کنه، از قیمتهای دقیقتری که در تایمفریم پایینتر هستن استفاده کنه. این کار باعث میشه نتایج بکتست واقعیتر باشن، چون داخل هر کندل جزئیات بیشتری در نظر گرفته میشه.
On bar close
اگه این گزینه فعال باشه، استراتژی تلاش میکنه سفارشها رو بلافاصله بعد از بسته شدن کندل اجرا کنه، همون موقعی که محاسبهی استراتژی تموم میشه.
- اگه سفارش از نوع Market باشه، شبیهساز بروکر اون رو قبل از باز شدن کندل بعدی اجرا میکنه.
- اگه سفارش به قیمت خاصی وابسته باشه، فقط در صورتی اجرا میشه که قیمت موردنظر دیده بشه.
در حالت پیشفرض، سفارشها در Close کندل فعلی صادر میشن ولی در Open کندل بعدی اجرا میشن. با این گزینه، سفارش همون موقعی که ساخته میشه (روی Close) اجرا میشه.
نکته: اجرای سفارش در همون تیکی که سفارش صادر شده، توی دنیای واقعی معمولاً ممکن نیست، پس ممکنه نتایج گمراهکننده باشن.
Using standard OHLC
این گزینه باعث میشه اگه استراتژی روی چارت Heikin Ashi اجرا بشه، سفارشها با قیمت واقعی OHLC (باز، بالا، پایین، بستهی استاندارد) پر بشن، نه قیمتهای ساختگی Heikin Ashi.
بهطور پیشفرض، اسکریپت استراتژی از قیمتهای چارت استفاده میکنه، فرقی نمیکنه نوع چارت چی باشه. اما توی Heikin Ashi قیمتها ترکیبی و ساختگی هستن و ممکنه با واقعیت مطابقت نداشته باشن.
مثال: توی چارت روزانهی NASDAQ:AAPL با کندل Heikin Ashi، یه سفارش توی تاریخ ۲۵ سپتامبر ۲۰۲۳ با قیمت 175.61 دلار پر شد (که قیمت ساختگی بود). ولی وقتی گزینهی "Using standard OHLC" فعال شد، همون سفارش با قیمت واقعی 174.20 دلار اجرا شد.

