برو به محتوای اصلی

کانکتور تریدینگ ویو به متاتریدر

تنظیم آلرت ها

تنظیم الرت ها 4 بخش اصلی تقسیم میشه .

ارسال هشدار تستی

Webhook Address
اگه می‌خوای از TradingView هشدار بفرستی به پورتال و اکسپرت PineConnector، باید از این آدرس Webhook استفاده کنی:

https://webhook.pineconnector.com

تو این مثال، قراره با یه هشدار تستی از TradingView، به PineConnector بگی که ۱ لات EURUSD خرید انجام بده روی متاتریدرت.

  1. پیدا کردن نماد

برای پیدا کردن نماد EURUSD، کلیدهای Ctrl + U رو بزن تا لیست نمادها (Symbol List) توی متاتریدر باز بشه.
نمادی که باید ازش استفاده کنی، همونیه که سمت چپ پنجره نشون داده می‌شه (تو مثال‌ها با کادر قرمز مشخص شده).

در متاتریدر 4:

در متاتریدر 5:

نکته:
حتماً توجه داشته باش که هر بروکر ممکنه نمادها رو با اسم متفاوتی تنظیم کرده باشه.
مثلاً به‌جای EURUSD، ممکنه اسم نماد EURUSD.i یا EURUSD.mini باشه.

خیلی مهمه که دقیقاً همون اسم نمادی که توی Symbol List نوشته شده رو توی هشدار وارد کنی — حتی کوچیک و بزرگ بودن حروف (case sensitivity) هم مهمه و باید رعایت بشه.

  1. ساخت هشدار در TradingView

اجرای سریع‌تر با تیکرهای فعال‌تر
اگه می‌خوای هشدار تستی سریع‌تر اجرا بشه، پیشنهاد می‌شه که هشدار رو روی چارت BTCUSD از صرافی Coinbase بسازی.

این تیکر (BTCUSD از Coinbase) معمولاً همیشه فعاله، حتی آخر هفته‌ها هم. به خاطر همین گزینه‌ی خوبیه برای تست هشدارها.

برای دسترسی به بخش هشدارها توی TradingView، روی آیکن دوم از بالا در ستون سمت راست کلیک کن.

برای ساخت هشدار جدید، روی آیکون ساعت با علامت + کلیک کن.

  1. تنظیم هشدار

تنظیمات رو به شکل زیر انجام بده:

پیام مورد نظرت رو توی قسمت Alert Message وارد کن.

مطمئن شو که گزینه‌ی Webhook URL فعال شده.
اگه خواستی، می‌تونی بقیه گزینه‌های بخش Notifications رو هم فعال کنی.

Message:

LicenseID,buy,symbol,risk=1

Alert Actions:

https://webhook.pineconnector.com

دستورالعمل‌ها:

  • LicenseID رو با کدی که از Licensing Dashboard گرفتی جایگزین کن (یه عدد که با 6 شروع می‌شه، مثلاً 60123456789).
  • Symbol رو طبق مرحله (1) تنظیم کن (مثلاً "EURUSD").
  • هیچ فاصله‌ای بین کاماها در پیام قرار نده.

وقتی همه تنظیمات بالا رو انجام دادی، روی دکمه‌ی “Create” کلیک کن تا هشدار ساخته بشه.

توضیح

وقتی هشدار فعال بشه، فقط یه بار اجرا می‌شه.
این هشدار به سرور PineConnector فرستاده می‌شه.
پیام داخل هشدار، شامل دستور خرید ۱ لات EURUSD هست، با استفاده از License ID مشخص‌شده.

  1. بررسی اجرای هشدار

بعد از اینکه هشدار رو تنظیم کردی، خیلی مهمه که مطمئن بشی واقعاً اجرا شده.
برای این کار، برو به بخش Alerts Log توی TradingView — اونجا همه هشدارهایی که فعال شدن، ثبت می‌شن و می‌تونی ببینی که هشدار مورد نظر اجرا شده یا نه.

  1. تأیید دریافت سیگنال

توی پنل کاربری‌ت در سایت PineConnector، باید یه ورودی جدید برای سیگنالی که فرستادی ببینی.
اونجا زمان دقیق دریافت سیگنال توسط سرور و زمانی که اکسپرت (EA) پیام رو باز کرده هم نمایش داده می‌شه.

ردیابی سیگنال‌ها با Signal ID

هر سیگنالی که فرستاده می‌شه، یه Signal ID مخصوص خودش داره.
این آی‌دی بهت کمک می‌کنه تا:

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

کجا می‌تونی Signal ID رو ببینی؟

  • توی تب Experts داخل ترمینال متاتریدر
  • و همچنین داخل بخش Signals Log در پنل کاربری PineConnector
  1. تأیید اجرای معامله

توی ترمینال متاتریدر، پایین صفحه برو به تب "Trade".
اگه همه‌چیز درست پیش رفته باشه و تنظیمات پیش‌فرض Volume Type در اکسپرت فعال بوده باشه، باید ببینی که یه سفارش خرید ۱ لات EURUSD ثبت و اجرا شده.

توی تب "Experts" در متاتریدر، می‌تونی ببینی که پیام هشدار چطور بر اساس تنظیمات اکسپرت (EA) پردازش شده.

مانیتورینگ برای اطمینان از موفقیت

پیشنهاد می‌کنیم مرتباً تب "Experts" رو بررسی کنی تا ببینی اکسپرت چطور پیام‌های هشدار رو پردازش می‌کنه
به‌خصوص وقتی داری سینتکس جدید تست می‌کنی یا تنظیمات EA رو تغییر می‌دی.



هشدار Low-Code

اگه به کد اندیکاتور یا استراتژی داخل TradingView دسترسی نداری، به راهنمای بدون کدنویسی (No-Code Guide) مراجعه کن.

تو بخش Basic Alert یاد می‌گیری چطور برای ورود‌هات فلش (Arrow) اضافه کنی و هشدارهایی با پیام‌های از پیش تعریف‌شده بسازی.

وقتی وارد بخش Intermediate Alert بشی، یاد می‌گیری چطور هشدارهایی با پیام‌های داینامیک و قابل شخصی‌سازی بسازی.

مقدماتی


Pine Script نسخه 5

این راهنما بر پایه‌ی Pine Script نسخه 5 نوشته شده.

چطور بررسی کنیم؟
پایین ترمینال TradingView، روی تب “Pine Editor” کلیک کن.
تو چند خط اول کد، نسخه Pine Script مشخص شده.

مثال:

//@version=5

اگه نسخه‌ای که استفاده می‌کنی 4 یا پایین‌تره، اسکریپتت رو به نسخه 5 تبدیل کن تا بتونی از این راهنما استفاده کنی.

نوع اسکریپت

توی چند خط اول اسکریپتت، باید یکی از کلمات “strategy” یا “indicator” رو ببینی.

مثال برای استراتژی:

//@version=5
strategy('Supertrend Strategy - PineConnector', overlay=true)

مثال برای اندیکاتور:

//@version=5
indicator('AlphaTrend - PineConnector', overlay=true)

اگه اسکریپتت از نوع indicator هست، مستقیم برو به بخش مربوط به اندیکاتورها.

استراتژی
توی این آموزش، از اسکریپت استراتژی SuperTrend استفاده می‌کنیم تا اول فلش (Arrow) برای نمایش روی چارت اضافه کنیم و بعد قابلیت هشدار (Alert) رو بهش اضافه کنیم.

اینم نسخه‌ی اصلی اسکریپت قبل از هر تغییری:

//@version=5
strategy('Supertrend Strategy', overlay=true)

[supertrend, direction] = ta.supertrend(3, 10)

bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, 'Up Trend', color=color.new(color.green, 0), style=plot.style_linebr)
downTrend = plot(direction < 0 ? na : supertrend, 'Down Trend', color=color.new(color.red, 0), style=plot.style_linebr)

fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)

if ta.change(direction) < 0
    strategy.entry('My Long Entry Id', strategy.long)

if ta.change(direction) > 0
    strategy.entry('My Short Entry Id', strategy.short)
  1. اضافه کردن تأییدیه علامت روی چارت ( فلش)

اول، شرایط ورود دقیق رو برای اضافه کردن علامت روی چارت مشخص کن.

کد زیر رو انتهای اسکریپت اضافه کن:

plotshape(LongEntryCondition, style=shape.labelup, location=location.belowbar, color=color.new(#046ff9, 0), size=size.large, text='PineConnector \n Buy', textcolor=color.new(color.white, 0)) //plotting up arrow when buy/long conditions met 
plotshape(ShortEntryCondition, style=shape.labeldown, location=location.abovebar, color=color.new(#046ff9, 0), size=size.large, text='PineConnector \n Sell', textcolor=color.new(color.white, 0)) //plotting down arrow when sell/short conditions met

به‌روزرسانی شرایط ورود


مقادیرLongEntryCondition و ShortEntryCondition رو با شرایط واقعی ورود بلند و کوتاه جایگزین کن.

شرط ورود من چیه؟
شرط ورودت بعد از “if” قرار داره — همه چیزی که در خط بعد از “if” و قبل از strategy.entry نوشته شده.

مثال
متن زیر خط زیرش کشیده و بولد شده، شرط‌های واقعی ورود هستن:

if ta.change(direction) < 0
strategy.entry('My Long Entry Id', strategy.long)

if ta.change(direction) > 0
strategy.entry('My Short Entry Id', strategy.short)

بعد از اضافه کردن کد plotshape به دو خط آخر، اسکریپت باید این شکلی بشه:

//@version=5
strategy('Supertrend Strategy', overlay=true)

[supertrend, direction] = ta.supertrend(3, 10)

bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, 'Up Trend', color=color.new(color.green, 0), style=plot.style_linebr)
downTrend = plot(direction < 0 ? na : supertrend, 'Down Trend', color=color.new(color.red, 0), style=plot.style_linebr)

fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)

if ta.change(direction) < 0
    strategy.entry('My Long Entry Id', strategy.long)

if ta.change(direction) > 0
    strategy.entry('My Short Entry Id', strategy.short)
    
plotshape(ta.change(direction) < 0, style=shape.labelup, location=location.belowbar, color=color.new(#046ff9, 0), size=size.large, text='PineConnector \n Buy', textcolor=color.new(color.white, 0)) //plotting up arrow when buy/long conditions met 
plotshape(ta.change(direction) > 0, style=shape.labeldown, location=location.abovebar, color=color.new(#046ff9, 0), size=size.large, text='PineConnector \n Sell', textcolor=color.new(color.white, 0)) //plotting down arrow when sell/short conditions met

روی 'Save' کلیک کن تا کدت ذخیره بشه، بعدش هم روی 'Add to chart' بزن تا اسکریپت روی چارت اعمال بشه.

چارت باید فلش‌های آبی PineConnector رو نشون بده که نقاط خرید (Buy) و فروش (Sell) رو مشخص می‌کنن.

تفاوت بین فلش‌های PineConnector و فلش‌های Strategy

فلش‌های آبی PineConnector باید یک کندل قبل از ورود استراتژی (یعنی My Long Entry Id و My Short Entry Id) ظاهر بشن.
دلیلش اینه که فلش‌های PineConnector در پایان کندل فعلی رسم می‌شن، ولی ورود استراتژی در ابتدای کندل بعدی انجام می‌شه.

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

  1. اضافه کردن تابع هشدار

حالا که علامت‌ فلش‌ها اضافه شدن، بریم سراغ اضافه کردن کدهای هشدار.

کدهای هشدار باید نزدیک به strategy.entry قرار بگیرن، که معمولاً توی چند خط آخر اسکریپت هستن.

از اونجایی که اولین strategy.entry مربوط به strategy.long هست، کد زیر رو وارد کن:

alert('LicenseID,buy,EURUSD,risk=1', alert.freq_once_per_bar_close)

و چون دومین strategy.entry مربوط به strategy.short هست، این کد رو وارد کن:

alert('LicenseID,sell,EURUSD,risk=1', alert.freq_once_per_bar_close)

به‌روزرسانی License ID


LicenseID داخل کدهای بالا رو با لایسنس واقعی خودت جایگزین کن.

بعد از اضافه کردن فلش‌ها و تابع هشدار، اسکریپتت باید این شکلی باشه:

//@version=5
strategy('Supertrend Strategy', overlay=true)

[supertrend, direction] = ta.supertrend(3, 10)

bodyMiddle = plot((open + close) / 2, display=display.none)
upTrend = plot(direction < 0 ? supertrend : na, 'Up Trend', color=color.new(color.green, 0), style=plot.style_linebr)
downTrend = plot(direction < 0 ? na : supertrend, 'Down Trend', color=color.new(color.red, 0), style=plot.style_linebr)

fill(bodyMiddle, upTrend, color.new(color.green, 90), fillgaps=false)
fill(bodyMiddle, downTrend, color.new(color.red, 90), fillgaps=false)

if ta.change(direction) < 0
    strategy.entry('My Long Entry Id', strategy.long)
    alert('60123456789,buy,EURUSD,risk=1', alert.freq_once_per_bar_close)

if ta.change(direction) > 0
    strategy.entry('My Short Entry Id', strategy.short)
    alert('60123456789,sell,EURUSD,risk=1', alert.freq_once_per_bar_close)

plotshape(ta.change(direction) < 0, style=shape.labelup, location=location.belowbar, color=color.new(#046ff9, 0), size=size.large, text='PineConnector \n Buy', textcolor=color.new(color.white, 0)) //plotting up arrow when buy/long conditions met 
plotshape(ta.change(direction) > 0, style=shape.labeldown, location=location.abovebar, color=color.new(#046ff9, 0), size=size.large, text='PineConnector \n Sell', textcolor=color.new(color.white, 0)) //plotting down arrow when sell/short conditions met

بعد از اینکه LicenseID، LongEntryCondition و ShortEntryCondition رو به‌روزرسانی کردی، اسکریپت اصلاح‌شده رو ذخیره کن.

ایجاد هشدار

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

توی این مثال، قراره هشدار رو برای نماد EURUSD از FXCM روی تایم‌فریم ۱ ثانیه‌ای تنظیم کنیم.

تنظیم هشدار

هشدار رو طبق تنظیمات زیر پیکربندی کن:

Component Configuration
Condition: Supertrend Strategy
Option: alert() function calls only
Webhook URL: https://webhook.pineconnector.com

اسم هشدار رو هر جور که دوست داری بذار
Alert name قابل تغییره و می‌تونی یه اسم دلخواه انتخاب کنی تا راحت‌تر بشناسیش.

بعد از اینکه تنظیمات هشدار رو انجام دادی، روی “Create” کلیک کن تا ساخته بشه.

اجرای هشدار

وقتی شرایط ورود استراتژیت برقرار بشه، یه فلش آبی روی چارت ظاهر می‌شه
و هم‌زمان یه ردیف جدید توی Alerts Log ثبت می‌شه.

هشدار توی Alerts Log ذخیره می‌شه، همراه با زمانی که فعال شده.

باید یه پوزیشن جدید روی نماد EURUSD توی ترمینال متاتریدرت ببینی.

کد جدید؟ هشدار جدید


اگه کدت رو تغییر دادی، هشدارهای قبلی به‌صورت خودکار آپدیت نمی‌شن — اون‌ها همچنان از همون کدی استفاده می‌کنن که موقع ساخت هشدار ذخیره شده.

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


اندیکاتور
توی این آموزش، از اسکریپت اندیکاتور تقاطع میانگین متحرک نمایی (EMA Crossover) استفاده می‌کنیم تا هم فلش‌ها رو (برای نقاط ورود) اضافه کنیم و هم قابلیت هشدار (Alert) رو پیاده‌سازی کنیم.

این هم اسکریپت اصلیه قبل از هرگونه تغییر:

//@version=5
indicator("EMA", overlay=true)

ema20 = ta.ema(close,20)
ema50 = ta.ema(close,50)
plot(ema20, color=color.new(color.blue, 5))
plot(ema50, color=color.new(color.red, 5))

long = ta.crossover(ema20, ema50) and close > ema20
short = ta.crossunder(ema20, ema50) and close < ema20
  1. اضافه کردن تأییدیه رو چارت (فلش)

اول، شرایط ورود رو برای اضافه کردن علامت روی چارت مشخص کن.

کد زیر رو انتهای اسکریپت اضافه کن:

plotshape(LongEntryCondition, style=shape.labelup, location=location.belowbar, color=color.new(#046ff9, 0), size=size.large, text='PineConnector \n Buy', textcolor=color.new(color.white, 0)) //plotting up arrow when buy/long conditions met 
plotshape(ShortEntryCondition, style=shape.labeldown, location=location.abovebar, color=color.new(#046ff9, 0), size=size.large, text='PineConnector \n Sell', textcolor=color.new(color.white, 0)) //plotting down arrow when sell/short conditions met

به‌روزرسانی شرایط ورود

مقادیر LongEntryCondition و ShortEntryCondition رو با شرایط واقعی ورود بلند و کوتاه جایگزین کن.

شرط ورود من چیه؟
شرط ورود معمولاً پایین اسکریپت قرار داره.
اگه با خوندن کدها آشنا نیستی، شاید نیاز باشه با آزمون و خطا پیداش کنی.

به‌طور معمول، این شرط‌ها در انتهای اسکریپت هستن — اول اونجا رو نگاه کن.

بعد از اضافه کردن کد plotshape به دو خط آخر، اسکریپت باید این شکلی باشه:

//@version=5
indicator("EMA", overlay=true)

ema20 = ta.ema(close,20)
ema50 = ta.ema(close,50)
plot(ema20, color=color.new(color.blue, 5))
plot(ema50, color=color.new(color.red, 5))

long = ta.crossover(ema20, ema50) and close > ema20
short = ta.crossunder(ema20, ema50) and close < ema20

plotshape(long, style=shape.labelup, location=location.belowbar, color=color.new(#046ff9, 0), size=size.large, text='PineConnector \n Buy', textcolor=color.new(color.white, 0)) //plotting up arrow when buy/long conditions met 
plotshape(short, style=shape.labeldown, location=location.abovebar, color=color.new(#046ff9, 0), size=size.large, text='PineConnector \n Sell', textcolor=color.new(color.white, 0)) //plotting down arrow when sell/short conditions met

روی 'Save' کلیک کن تا کدت ذخیره بشه، بعد روی 'Add to chart' بزن تا اسکریپت روی چارت اعمال بشه.

چارت باید فلش‌های آبی PineConnector رو نشون بده که نقاط خرید (Buy) و فروش (Sell) رو مشخص می‌کنن.

بررسی فلش‌های رسم‌شده

چک کن که فلش‌ها دقیقاً در همون جاهایی روی چارت ظاهر می‌شن که انتظار داری.
اگه فلش‌ها در جای نادرست نشون داده شدن، ممکنه شرایط ورود رو اشتباه تعریف کرده باشی.

  1. اضافه کردن تابع هشدار

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

مثال:

if LongEntryCondition
    alert('LicenseID,buy,EURUSD,risk=1', alert.freq_once_per_bar_close)

if ShortEntryCondition
    alert('LicenseID,sell,EURUSD,risk=1', alert.freq_once_per_bar_close)

به‌روزرسانی شرایط ورود و License ID

  • LongEntryCondition و ShortEntryCondition رو با شرط‌های واقعی ورودت جایگزین کن
  • LicenseID داخل کد هشدار رو با License ID واقعی خودت عوض کن

کدت، شامل فلش‌ها و تابع هشدار، حالا باید به این شکل باشه:

//@version=5
indicator("EMA", overlay=true)

ema20 = ta.ema(close,20)
ema50 = ta.ema(close,50)
plot(ema20, color=color.new(color.blue, 5))
plot(ema50, color=color.new(color.red, 5))

long = ta.crossover(ema20, ema50) and close > ema20
short = ta.crossunder(ema20, ema50) and close < ema20

plotshape(long, style=shape.labelup, location=location.belowbar, color=color.new(#046ff9, 0), size=size.large, text='PineConnector \n Buy', textcolor=color.new(color.white, 0)) //plotting up arrow when buy/long conditions met 
plotshape(short, style=shape.labeldown, location=location.abovebar, color=color.new(#046ff9, 0), size=size.large, text='PineConnector \n Sell', textcolor=color.new(color.white, 0)) //plotting down arrow when sell/short conditions met

if long
    alert('60123456789,buy,EURUSD,risk=1', alert.freq_once_per_bar_close)

if short
    alert('60123456789,buy,EURUSD,risk=1', alert.freq_once_per_bar_close)

بعد از اینکه LicenseID، LongEntryCondition و ShortEntryCondition رو به‌روزرسانی کردی، اسکریپت اصلاح‌شده رو ذخیره کن.

3. ساخت هشدار

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

برای این مثال، هشدار رو براساس نماد “EURUSD” و روی تایم‌فریم ۱ ثانیه‌ای تنظیم می‌کنیم.

تنظیم هشدار

هشدار رو طبق مشخصات زیر پیکربندی کن و بعد روی “Create” کلیک کن:


Component Configuration
Condition: EMA
Option: Any alert() function calls only
Webhook URL: https://webhook.pineconnector.com

Alert name قابل تغییره و می‌تونی یه اسم دلخواه انتخاب کنی تا راحت‌تر بتونی بعداً شناسایی‌ش کنی.

اجرای هشدار

به‌محض اینکه شرایط ورود به معامله برقرار بشه، یه فلش آبی روی چارت ظاهر می‌شه و هشدار هم‌زمان فعال می‌شه.

این هشدار همچنین توی Alerts Log ثبت می‌شه، همراه با زمان دقیق اجرا.

باید یه پوزیشن جدید روی نماد EURUSD توی ترمینال متاتریدرت ببینی.

کد جدید؟ هشدار جدید


اگه کدت رو تغییر دادی، هشدارهای قبلی به‌صورت خودکار آپدیت نمی‌شن — اون‌ها همچنان از همون کدی استفاده می‌کنن که موقع ساخت هشدار ذخیره شده.

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


سطح متوسط (Intermediate)
آهسته و پیوسته پیش برو

قبل از اینکه وارد ماژول هشدارهای سطح متوسط بشی، پیشنهاد می‌کنیم اول مفاهیم پایه‌ای سینتکس و تنظیمات EA رو خوب درک کنی.
ماژول هشدارهای Intermediate بر پایه‌ی همون چیزهایی ساخته شده که توی ماژول ساده و کم‌کدنویسی (Basic Low-Code) یاد گرفتی.

اینجا قراره پیام‌های هشدار ساده رو به پیام‌هایی دقیق‌تر و پویا‌تر (Dynamic) تبدیل کنیم تا اطلاعات بیشتری در لحظه ارسال هشدار ارائه بدن.

Repainting (بازنویسی یا تغییر رفتار در گذشته)

توی تابع‌های هشدارمون، از alert.freq_once_per_bar_close استفاده می‌کنیم تا ریپینت شدن رو به حداقل برسونیم.
ریپینت زمانی اتفاق می‌افته که اسکریپت توی شرایط زنده (real-time) رفتاری متفاوت نسبت به دیتای گذشته (historical) داشته باشه.

خلاصه‌ای از Repainting:

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

این اتفاق خیلی رایجه و می‌تونه دلایل زیادی داشته باشه.
بیش از ۹۵٪ اندیکاتورها (مثل MACD و RSI) ریپینت دارن — یعنی مقدارشون توی گذشته با مقدار واقعی‌ای که موقع اجرای زنده نشون می‌دن فرق داره.

1. سطح پایه (Basic)

توی ماژول پایه، هشدارها به‌صورت ثابت (static) ساخته می‌شن، مثل کد زیر:

alert('LicenseID,buy,EURUSD,risk=1', alert.freq_once_per_bar_close)

کد بالا یه پیام هشدار تولید می‌کنه که توش نماد (symbol) و مقدار ریسک (risk) به‌صورت ثابت مشخص شدن.

2. چندین پارامتر

alert('LicenseID,buy,EURUSD,risk=1,sl=10,tp=20', alert.freq_once_per_bar_close)

پیام هشدار هنوز ثابت (static) هست، اما حالا شامل پارامترهای بیشتری مثل sl= (حد ضرر) و tp= (حد سود) هم هست.

3. نماد داینامیک (Dynamic Symbol)

alert('LicenseID,buy,' + syminfo.ticker + ',sl=10,tp=20,risk=1', alert.freq_once_per_bar_close)

توی این حالت، نماد به‌صورت داینامیک تغییر می‌کنه و وابسته به چارتیه که روی اون هشدار ساخته می‌کنی.

مثال:
اگه هشدار رو روی چارت US100 بسازی و شرط هشدار فعال بشه، پیام ارسالی این‌طوری خواهد بود:

LicenseID,buy,US100,sl=10,tp=20,risk=1

اگه نماد تو NAS100 باشه چطور؟

اگه بروکرت به‌جای نماد US100 از NAS100 استفاده می‌کنه، می‌تونی نمادی که تو پیام هشدار چاپ می‌شه رو به‌صورت دستی تنظیم کنی:

symbol = syminfo.ticker

if syminfo.ticker == "US100"
symbol := "NAS100"

if LongEntryCondition
alert('LicenseID,buy,' + symbol + ',sl=10,tp=20,risk=1', alert.freq_once_per_bar_close)

  • توی خط اول، یه متغیر به اسم symbol تعریف می‌شه که مقدار پیش‌فرضش همون تیکر چارت توی TradingView هست.
  • توی شرط اول، اگه تیکر US100 باشه، مقدار symbol رو به NAS100 تغییر می‌دیم.
  • توی شرط دوم، به‌جای syminfo.ticker از symbol استفاده می‌کنیم تا مقدار نهایی توی پیام هشدار، همون چیزی باشه که بروکرت استفاده می‌کنه.

کد جدید؟ هشدار جدید


اگه کدت رو تغییر دادی، هشدارهای قبلی به‌طور خودکار آپدیت نمی‌شن — اون‌ها همچنان از همون نسخه قدیمی کد استفاده می‌کنن که موقع ساخت هشدار ذخیره شده.

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

4. مقادیر داینامیک

LongSL = low[1]
LongTP = ta.ema(close,50)
RiskValue = 1

if LongEntryCondition
    alert('LicenseID,buy,' + syminfo.ticker + ',sl=' + str.tostring(LongSL) + ',tp=' + str.tostring(LongTP) + ',risk=' + str.tostring(RiskValue), alert.freq_once_per_bar_close)

به‌جای اینکه مقادیر sl=، tp= و risk= رو به‌صورت ثابت (hardcoded) بنویسی، می‌تونی از متغیرهایی استفاده کنی که مقدارشون داینامیکه.

LongSL - داده کندل
low[1] یعنی کمترین قیمت کندل قبلی
(مثلاً low[2] می‌شه کمترین قیمت دو کندل قبل)

LongTP - فرمول
LongTP هم متغیری داینامیکه که آخرین مقدار EMA 50 رو نگه می‌داره و با بسته شدن هر کندل آپدیت می‌شه.

RiskValue - مقدار ثابت
RiskValue یه مقدار ثابته که اینجا برابر با 1 تعریف شده.

نکته‌ی مهم در پیاده‌سازی
تابع alert() فقط رشته (string) قبول می‌کنه، در حالی که LongSL، LongTP و RiskValue از نوع عدد (float) هستن.
برای اینکه بشه ازشون توی alert استفاده کرد، باید با تابع str.tostring() تبدیلشون کنی به متن.

5. اضافه کردن کامنت

برای اضافه کردن بخش کامنت (comment) به پیام هشدار، باید دقت کنی که از " دوبل فقط برای کل پیام هشدار استفاده بشه و از ' تکی برای اجزای داخل پیام.

LongSL = low[1]
LongTP = ta.ema(close,50)
RiskValue = 1

if LongEntryCondition
    alert('LicenseID,buy,' + syminfo.ticker + ',sl=' + str.tostring(LongSL) + ',tp=' + str.tostring(LongTP) + ',risk=' + str.tostring(RiskValue) + ',comment="Strategy 1"', alert.freq_once_per_bar_close)

6. چندین License ID

اگه چند تا License ID داری، می‌تونی خیلی راحت هشدار رو برای همه‌شون بفرستی.

if LongEntryCondition
    alert('LicenseID1,buy,' + syminfo.ticker + ',risk=1,sl=20', alert.freq_once_per_bar_close)
    alert('LicenseID2,buy,' + syminfo.ticker + ',risk=1,sl=30', alert.freq_once_per_bar_close)
    alert('LicenseID3,buy,' + syminfo.ticker + ',risk=1,sl=40', alert.freq_once_per_bar_close)
    alert('LicenseID4,buy,' + syminfo.ticker + ',risk=1,sl=40', alert.freq_once_per_bar_close)
    alert('LicenseID5,buy,' + syminfo.ticker + ',risk=1,sl=40', alert.freq_once_per_bar_close)

برای پیاده‌سازی فقط کافیه کد هشدار رو کپی‌ـ‌پیست کنی و توی هر کدوم، License ID مربوطه رو جایگزین کنی.

حتی اگه فقط یک هشدار ساخته باشی، وقتی شرایط ورود برقرار بشه، هر ۵ خط alert() که توی کدت نوشتی هم‌زمان اجرا می‌شن و هر ۵ تا هشدار با License ID‌های مختلف به‌صورت هم‌زمان فعال می‌شن.

آسمون محدودیت نداره — ولی ۱۵ تا چرا!

یه هشدار (alert) می‌تونه حداکثر ۱۵ بار توی بازه‌ی ۳ دقیقه فعال بشه.
اگه این محدودیت رد بشه، هشدار به‌صورت خودکار متوقف (paused) می‌شه.

  1. جمع‌بندی
    با تغییر سینتکس به حالتی که چندتا پارامتر داشته باشه، داینامیک کردن نماد طوری که اسم نماد تو هشدار بر اساس تیکری باشه که هشدار براش ساخته شده، و اضافه کردن استاپ‌لاس و تی‌پی داینامیک، به‌علاوه اینکه چندتا هشدار هم‌زمان برای لایسنس‌های مختلف فعال بشه، به نتیجه‌ی زیر می‌رسیم:

نکته مهم

لازم نیست همه اجزای ماژول سطح متوسط رو توی تنظیماتت استفاده کنی.
فقط اونایی رو به کار ببر که برای نیازت کاربرد دارن — مثلاً استاپ‌لاس و تیک‌پرافیت داینامیک.

//@version=5
indicator("EMA", overlay=true)

ema20 = ta.ema(close,20)
ema50 = ta.ema(close,50)
plot(ema20, color=color.new(color.blue, 5))
plot(ema50, color=color.new(color.red, 5))

long = ta.crossover(ema20, ema50) and close > ema20
short = ta.crossunder(ema20, ema50) and close < ema20

// فلش گذاشتن روی چارت وقتی شرط ورود برقرار بشه
plotshape(long, style=shape.labelup, location=location.belowbar, color=color.new(#046ff9, 0), size=size.large, text='PineConnector \n Buy', textcolor=color.new(color.white, 0)) 
plotshape(short, style=shape.labeldown, location=location.abovebar, color=color.new(#046ff9, 0), size=size.large, text='PineConnector \n Sell', textcolor=color.new(color.white, 0))

// اگه تیکر US100 باشه، تبدیلش کن به NAS100
symbol = syminfo.ticker
if syminfo.ticker == "US100"
    symbol := "NAS100"

// متغیرهایی برای مقداردهی داینامیک
LongSL = low[1]
LongTP = ta.ema(close,50)
RiskValue = 1

// فرستادن ۳ هشدار به ۳ لایسنس مختلف با سینتکس داینامیک
if long
    alert('LicenseID1,buy,' +symbol+ ',sl=' +str.tostring(LongSL)+ ',tp=' +str.tostring(LongTP)+ ',risk='+str.tostring(RiskValue), alert.freq_once_per_bar_close)
    alert('LicenseID2,buy,' +symbol+ ',sl=' +str.tostring(LongSL)+ ',tp=' +str.tostring(LongTP)+ ',risk='+str.tostring(RiskValue), alert.freq_once_per_bar_close)
    alert('LicenseID3,buy,' +symbol+ ',sl=' +str.tostring(LongSL)+ ',tp=' +str.tostring(LongTP)+ ',risk='+str.tostring(RiskValue), alert.freq_once_per_bar_close)


هشدار NO-Code

اتومات کردن اسکریپت‌هایی که به کدشون دسترسی نداری


اگه به کد یه اسکریپت دسترسی نداری، بازم ممکنه بتونی اون استراتژی یا اندیکاتور رو اتومات کنی—به شرط اینکه یکی از سه تستی که پایین گفته می‌شه رو پاس کنه.

اگه به کد اسکریپت توی تریدینگ‌ویو دسترسی داری، به جای این بخش، برو سراغ راهنمای Low-Code.

بررسی امکان اتومات کردن اسکریپت بدون دسترسی به کد
برای اینکه بفهمی یه اسکریپت قابل اتومات‌سازی هست یا نه (بدون اینکه به کدش دسترسی داشته باشی)، باید به ترتیب این تست‌ها رو انجام بدی:

تست ۱: بررسی اینکه اسکریپت از نوع استراتژیه یا نه
اسکریپت رو روی چارتت اعمال کن و یه هشدار بساز (کلید میانبر: Alt+A تو ویندوز / Option+A تو مک).
توی بخش "Condition"، اون استراتژی‌ای که می‌خوای اتوماتش کنی رو انتخاب کن و گزینه‌ی "Order fills only" رو بزن.

اگه تونستی گزینه‌ی "Order fills only" رو انتخاب کنی، یعنی اون اسکریپت به احتمال زیاد قابل اتومات کردنه.
حالا می‌تونی بری سراغ بخش Strategy Implementation (پیاده‌سازی استراتژی).

تست ۲: بررسی وجود تابع alert()
اسکریپت رو به چارت وصل کن و روی اسم اسکریپت که بالا سمت چپ چارت نوشته شده، دکمه "Settings" رو بزن.

توی پنجره‌ای که باز می‌شه، برو به تب "Inputs".
اگه اصلاً همچین تبی نمی‌بینی، یعنی اسکریپت تست ۲ رو رد کرده و باید بری سراغ تست ۳.

بین گزینه‌های ورودی (Inputs)، دنبال گزینه‌ای مثل "License ID" یا چیزی شبیه به اون بگرد.
اگه همچین گزینه‌ای وجود داشت، احتمال زیاد می‌تونی با استفاده از تابع alert() اون اسکریپت رو اتومات کنی — برو سراغ بخش alert() Implementation.

ولی اگه هیچ ورودی‌ای با عنوان License ID ندیدی، یعنی اسکریپت تست ۲ رو رد کرده — برو تست ۳ رو امتحان کن.

تست ۳: بررسی وجود alertcondition()
اسکریپت رو روی چارت بنداز و یه هشدار بساز (Alt+A تو ویندوز / Option+A تو مک).
توی بخش "Condition"، اسکریپتی که رو چارت فعاله رو انتخاب کن.

ببین بالای فیلد "Crossing" گزینه‌هایی مثل "Going Long" یا "Going Short" وجود داره یا نه.
ممکنه نویسنده‌ی اسکریپت اسم‌های متفاوتی استفاده کرده باشه، پس فقط دنبال همین دوتا نباش.

اگه همچین گزینه‌هایی دیدی، یعنی اسکریپت احتمالاً با استفاده از alertcondition() قابل اتومات شدنه — برو سراغ بخش alertcondition() Implementation.

اگه هیچ گزینه‌ای بالای "Crossing" نمایش داده نشد، یعنی اسکریپت تست ۳ رو هم رد کرده و بدون دسترسی به کد قابل اتومات‌سازی نیست.

اگه همه‌ی تست‌ها رد بشن


یعنی اون اسکریپت بدون اینکه نویسنده‌اش کد لازم رو اضافه کنه قابل اتومات‌سازی نیست.
میتونی از نویسنده بخوای اسکریپت رو طوری تغییر بده که با PineConnector سازگار بشه — با استفاده از همین دستورالعمل‌هایی که اینجا گفته شده.

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

پیاده‌سازی با strategy()


برای اسکریپت‌هایی که تست ۱ رو پاس کردن:

  • اسکریپت رو روی چارت و تایم‌فریمی که می‌خوای اجرا کن
  • یه هشدار جدید بساز (Alt+A تو ویندوز / Option+A تو مک)
  • تو بخش "Condition"، همون استراتژی رو انتخاب کن
  • گزینه‌ی "Order fills only" رو بزن تا هشدار فقط وقتی فعال بشه که واقعاً یه سفارش اجرا شده باشه

تنظیم پیام هشدار برای مشخص کردن پارامترهای ترید. از یه فرمت ساده مثل این استفاده کن:

LicenseID,buy,{{ticker}},risk=1

برای هشدارهای داینامیک‌تر از جای‌نگهدار (placeholder) استفاده کن:

LicenseID,buy,{{ticker}},risk=1,sl=10,tp=20

مقدارهای مربوط به risk، stop loss (sl)، take profit (tp) و بقیه پارامترها رو هر جور خواستی تنظیم کن.

LicenseID,{{strategy.order.action}},{{ticker}},risk={{strategy.order.contracts}}

گزینه‌های Placeholder


می‌تونی لیست کامل placeholderها رو برای اندیکاتورها و استراتژی‌ها از اینجا ببینی.

چندتا از پرکاربردترین placeholderها:

  • {{ticker}} → تیکر نمادی که هشدار براش ساخته شده رو برمی‌گردونه (مثلاً EURUSD یا BTCUSD)
  • {{strategy.position_size}} → سایز پوزیشن فعلی رو برمی‌گردونه
  • {{strategy.order.action}} → مقدار "buy" یا "sell" رو برمی‌گردونه بسته به اینکه چه سفارشی اجرا شده
  • {{strategy.order.contracts}} → تعداد قراردادهای سفارش اجرا شده رو برمی‌گردونه
  • {{strategy.market_position_size}} → سایز پوزیشن فعلی رو به‌صورت عدد مثبت (بدون علامت منفی) برمی‌گردونه

هشدار رو ذخیره کن و منتظر بمون تا بر اساس شرط‌های استراتژی فعال بشه.
وقتی هشدار فعال بشه، همون پیامی که تنظیم کردی ارسال می‌شه و PineConnector اون رو برای اجرای ترید استفاده می‌کنه.
پوزیشن‌هات رو زیر نظر داشته باش و طبق پلنت مدیریتشون کن.
اگه لازم شد، می‌تونی از پنل Alerts توی TradingView هشدار رو ویرایش یا موقتاً متوقف کنی.
اگه می‌خوای همین استراتژی رو روی نمادها و تایم‌فریم‌های دیگه هم اتومات کنی، همین مراحل رو تکرار کن.
هر هشدار جداگانه کار می‌کنه، پس یادت نره برای هر نماد و تایم‌فریمی که می‌خوای، جداگانه هشدار بسازی.

پیاده‌سازی alert()
برای اسکریپت‌هایی که تست ۲ رو پاس کردن:

تنظیمات ورودی اسکریپت رو به‌روز کن، مثلاً License ID، استاپ‌لاس، ریسک و غیره.
ممکنه گزینه‌هایی که می‌بینی با توجه به اسکریپت فرق داشته باشن.
بعد از انجام تغییرات، روی "Ok" کلیک کن تا ذخیره بشه.

برو روی نماد و تایم‌فریمی که می‌خوای، بعد یه هشدار بساز.
توی بخش "Condition"، همون اسکریپتی که روی چارت فعاله رو انتخاب کن و این آدرس Webhook رو وارد کن:

https://webhook.pineconnector.com

هشداری که ساختی، نماد و تایم‌فریمی که داره روش اجرا می‌شه رو نشون می‌ده.

هشدارهایی که فعال می‌شن، همراه با تنظیماتی که وارد کردی، توی بخش Alerts log نمایش داده می‌شن.
اگه می‌خوای نمادها یا تایم‌فریم‌های دیگه‌ای رو هم اتومات کنی، همین مراحل رو براشون تکرار کن.

پیاده‌سازی alertcondition()
برای اسکریپت‌هایی که تست ۳ رو پاس کردن:

یه هشدار بساز و توی بخش "Condition" اسکریپت مورد نظر و گزینه‌ی مناسب (مثلاً ورود لانگ یا شورت) رو انتخاب کن.
ممکنه اسم اسکریپت یا گزینه‌ها با چیزی که تو ذهنته فرق داشته باشه، چون نویسنده ممکنه اسم‌های دلخواه خودش رو گذاشته باشه.

توی بخش "Options"، گزینه‌ی "Once Per Bar Close" رو انتخاب کن تا مشکل ریپینت به حداقل برسه.

پیام هشدار رو بسته به اینکه اسکریپتت استراتژیه یا اندیکاتور، تنظیم کن:

برای هشدارهای ساده:

LicenseID,buy,{{ticker}},risk=1
LicenseID,buy,{{ticker}},risk=1,sl=10,tp=20

برای اسکریپت‌های استراتژی:

LicenseID,{{strategy.order.action}},{{ticker}},risk={{strategy.order.contracts}}

لیست placeholderهایی که برای استراتژی‌ها و اندیکاتورها قابل استفاده‌ان رو یه نگاهی بنداز


چندتا از پرکاربردترین‌ها:

{{ticker}} → نماد مربوط به هشدار (مثل EURUSD، BTCUSD و ...)
{{strategy.position_size}} → سایز پوزیشن فعلی
{{strategy.order.action}} → مقدار "buy" یا "sell" برای سفارش اجرا شده
{{strategy.order.contracts}} → تعداد قراردادهایی که تو سفارش اجرا شده
{{strategy.market_position_size}} → سایز پوزیشن فعلی به صورت عدد مطلق (همیشه مثبت)

اگه یه هشدار فعال بشه، می‌تونی اون هشدار رو موقتاً متوقف (pause) کنی.

هشدارهایی که فعال می‌شن، توی اسکریپت‌های اندیکاتور مقدار {{strategy.order.action}} رو نشون می‌دن، ولی توی اسکریپت‌های استراتژی، مقدار واقعی مثل "buy" یا "sell" دیده می‌شه.

همین تنظیمات رو برای نمادها و تایم‌فریم‌های دیگه‌ای که می‌خوای اتومات کنی هم تکرار کن.

مطمئن شو که پیام هشدارت طبق سینتکس مورد نیاز PineConnector نوشته شده.

کلمه‌ی "LicenseID" توی پیام رو با لایسنس آی‌دی واقعی خودت از پنل PineConnector جایگزین کن — این آی‌دی یه رشته عددیه که با ۶ یا ۷ شروع می‌شه.



Missing Signals

رفع اشکال سیگنال‌های ناپدیدشده


محدودیت‌ها
گاهی وقتا ممکنه سیگنال‌ها با تاخیر برسن یا اصلاً نرسن، و این به خاطر محدودیت‌های Webhook توی TradingView هست.
متأسفانه تو این موارد دیگه دست ما نیست و نمی‌تونیم دخالتی کنیم.

بررسی سیگنال‌های ناپدیدشده: راهنمای قدم‌به‌قدم
اگه دیدی سیگنال‌هات نمی‌رسن یا مشکلی توی اجرای اون‌ها هست، این مراحل رو قدم‌به‌قدم دنبال کن تا بتونی مشکل رو پیدا و برطرفش کنی:

۱. اتصال پایدار اینترنت رو حتماً برقرار نگه دار
برای اینکه متاتریدر و PineConnector درست کار کنن، اتصال اینترنت باید همیشه پایدار باشه. چند تا نکته مهم برای اینکه مطمئن شی اینترنتت قطع نمی‌شه:

بررسی پایداری اتصال:
مطمئن شو که متاتریدر بازه و PineConnector بدون قطع و وصل کار می‌کنه.

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

فعال کردن High Power Mode در ویندوز:
برای اینکه سیستم بدون وقفه کار کنه، ویندوز رو بذار روی حالت High Performance. این‌طوری:

  1. وارد Control Panel شو
  2. برو به Hardware and Sound > Power Options
  3. حالت “High Performance” رو انتخاب کن یا یه Power Plan سفارشی بساز که نذاره سیستم به حالت خواب بره یا اینترنت قطع بشه

چند پیشنهاد تکمیلی برای ویندوز:

  • خاموش کردن Sleep Mode:
    Settings > System > Power & sleep
    گزینه‌ی “Sleep” رو روی “Never” بذار، هم برای حالت باتری هم برق مستقیم
  • غیرفعال کردن Power Saving برای کارت شبکه:
    Device Manager > Network adapters
    روی کارت شبکت راست‌کلیک کن > Properties
    تب Power Management
    تیک گزینه‌ی “Allow the computer to turn off this device to save power” رو بردار

با این کارا مطمئن می‌شی که متاتریدر همیشه به اینترنت وصله و سیگنال‌های PineConnector بدون قطعی دریافت می‌شن.

۲. بررسی فعال شدن هشدار توی TradingView
برو به بخش Alerts Log توی تریدینگ‌ویو و ببین که واقعاً هشدار فعال شده یا نه.
اگه هشدار درست کار کرده باشه، باید یه ورودی جدید توی لاگ ببینی که نشون می‌ده هشدار اجرا شده.

۳. مطمئن شو آدرس Webhook درسته
چک کن که لینکی که توی هشدار وارد کردی دقیقاً این باشه:

https://webhook.pineconnector.com

بررسی آدرس Webhook استفاده‌شده
برای اینکه ببینی توی هشدار فعال‌شده چه آدرس Webhookی استفاده شده، روی هشدار دوبار کلیک کن.

توی پنجره‌ای که باز می‌شه، روی تب “Notifications” کلیک کن.
اونجا می‌تونی آدرس Webhookی که برای هشدار استفاده شده رو ببینی.

۴. بررسی سازگاری پیام هشدار
مطمئن شو که پیام هشداری که تنظیم کردی با فرمت PineConnector سازگاره. از چک‌لیست زیر استفاده کن تا ببینی سینتکس و ساختار درست رعایت شده یا نه. این کار کمک می‌کنه اگه مشکلی یا خطایی وجود داشته باشه، راحت‌تر پیداش کنی و برطرفش کنی.

۴.۱. License ID اشتباه
مطمئن شو که توی پیام هشدارت، License ID درست خودت وارد شده.

۴.۲. فرمت سینتکس اشتباه
ترتیب اشتباه ❌

LicenseID,EURUSD,buy,risk=1

ترتیب درست ✅

LicenseID,buy,EURUSD,risk=1

چند دستور توی یه پیام ❌

LicenseID,closelong,EURUSD,buy,GBPUSD,risk=1

✅ دستورها جداگانه فرستاده بشن:

LicenseID,closelong,EURUSD
LicenseID,buy,GBPUSD,risk=1

۴.۳. دستور اشتباه در سینتکس
مطمئن شو دستوری که توی پیام استفاده کردی، جزو دستوراتی باشه که توی صفحه‌ی Syntax لیست شده.

❌ دستور نامعتبر:

LicenseID,closesome,EURUSD,risk=1

✅ دستور معتبر:

LicenseID,closelongpct,EURUSD,risk=1

۴.۴. غلط املایی
یکی از دستورات یا بخش‌های پیام اشتباه نوشته شده — معمولاً کلمات "risk" و "trail" اشتباه تایپ می‌شن.

❌ اشتباه:

LicenseID,buy,EURUSD,rsik=1

✅ درست:

LicenseID,buy,EURUSD,risk=1

❌ اشتباه:

LicenseID,buy,EURUSD,risk=1,trialtrig=10,trialdist=8,trialstep=5

✅ درست:

LicenseID,buy,EURUSD,risk=1,trailtrig=10,traildist=8,trailstep=5

۴.۵. چیزهای اضافه‌ی اشتباهی
گاهی وقتا یه سری چیزا مثل براکت یا کاما اضافی وارد پیام می‌شن — مخصوصاً وقتی از کدهای داینامیک یا placeholder استفاده می‌کنی.

❌ اشتباه:

LicenseID,buy,EURUSD,risk=1,sl=5}

❌ اشتباه:

LicenseID,buy,EURUSD,risk=1,sl=5,

✅ درست:

LicenseID,buy,EURUSD,risk=1,sl=5

اگه لازم داشتی، اینم آدرس Webhook برای نسخه v3:

https://webhook.pineconnector.com

۴.۶. طول بیش‌ازحد کامنت
طول کامنت بیشتر از حد مجازه — نباید بیشتر از ۲۰ کاراکتر باشه.

✅ قابل قبول (دقیقاً ۲۰ کاراکتر):

LicenseID,buy,EURUSD,risk=1,comment=12345678901234567890

❌ غیرقابل قبول (۲۱ کاراکتر):

LicenseID,buy,EURUSD,risk=1,comment=123456789012345678901

مقایسه‌ی دقیق
خیلی مهمه که لاگ هشدارهای تریدینگ‌ویو رو با تب Experts توی متاتریدر مقایسه کنی — نه با چارت تریدینگ‌ویو.

EA خالی باز شده


وقتی سیگنال‌ها دریافت می‌شن و توی Signal Log هم دیده می‌شن، ولی ستون EA Opened خالی می‌مونه، ممکنه یکی از این حالت‌ها اتفاق افتاده باشه:

۱. شماره حساب دیده نمی‌شه

لایسنس فعال نیست

اگه شماره حساب (Account Number) نشون داده نمی‌شه، یعنی هیچ حساب تریدی به اون License ID وصل نیست.

تو این حالت باید مطمئن شی که PineConnector EA نسخه 3.13 یا بالاتر روی متاتریدر ۴ یا ۵ اجرا شده و لایسنس هم درست وارد شده.

۲. شماره حساب دیده می‌شه

تب Experts رو چک کن

اگه شماره حساب نشون داده می‌شه ولی ستون EA Opened هنوز خالیه، برو توی تب Experts توی متاتریدر و ببین آیا اروری یا پیغامی هست که دلیل مشکل رو نشون بده.