هر هشدار یک پیام را به همهی مقصدهایی که تیک زدهاید میفرستد. این پیام بهتنهایی میگوید چه اتفاقی افتاده، قیمت در آن لحظه چقدر بوده و آیا هشدار روشن میماند یا نه. اگر میخواهید پیام چیزهای بیشتری داشته باشد، یادداشتی دربارهی پلن معاملاتیتان به آن اضافه کنید تا پیش از باز کردن چارت بدانید چه در نظر داشتید. ساختن هشدار و پیام آن به سادگی، سریع و دقیق است: در چند ثانیه آن را در ویرایشگر بنویسید، یا با صدای خودتان یا به صورت متنی به AI Trading Assistant بگویید یا از او بخواهید.
اگر از نرمافزار خودتان، Discord یا Slack استفاده میکنید، وبهوک هر هشدار را به آنجا هم میفرستد، بیآنکه لازم باشد چیزی را دستی کپی کنید. این راهنما هر دو را توضیح میدهد.
مثال: هشداری روی EURUSD که وقتی قیمت در چارت 5m از 1.09 رو به بالا عبور کند، فعال میشود.
آنچه پیام خودکار میگوید
وقتی کادر Message خالی است، هشدار هنگام فعال شدن پیامش را خودش مینویسد. در مثال ما، پیام این است:
EURUSD crossed above 1.09
Price 1.0901.
This alert is now off. It was set to fire once.
سطر اول میگوید چه اتفاقی افتاده، با همان کلمههای ویرایشگر هشدار. سطر بعدی عددهای همان لحظه را میدهد. سطر آخر میگوید آیا هشدار روشن میماند یا نه. در مثال از گزینهی Once only استفاده شده است، پس هشدار حالا خاموش است. با گزینههای دیگر تنظیم Trigger، سطر آخر «This alert stays on.» است.
هشدارهای دیگر هم همین ترتیب را دارند. چند سطر اول را همراه با سطر عددهای زیرشان ببینید:
یک خط: «GBPJPY touched 1h Resistance R1» و «Price 210.16, line at 210.20.»
شکست یک خط: «GBPJPY broke above 1h Resistance R1» و «The 1h candle closed at 210.32, above the line at 210.20.»
یک اندیکاتور: «BTCUSD: 1h RSI(14) crossed above 70» و «RSI(14) was 71.4 when the 1h candle closed at 105240.50.»
تغییر یک پیشبینی: «GBPJPY: 1h forecast turned bearish» و «Before: bullish above 209.80. Now: bearish below 209.40.»
هشداری که چند شرط دارد میگوید چند شرط برقرار شده است. بعد برای هر شرطی که برقرار شده یک سطر میآورد:
BTCUSD: both conditions met
• Price crossed above 105000: the 1h candle closed at 105240.50
• 1h RSI(14) is above 55 (now 58.2)
This alert stays on.
با شرطهای بیشتر، سطر اول مثلاً «all 3 conditions met» یا «2 of 3 conditions met» است. وقتی فقط یک شرط برقرار شده باشد، مثلاً با رابط or، سطر اول همان شرط را نام میبرد و عددهایش بعد از آن میآیند.
نوشتن پیام
ویرایشگر هشدار را باز کنید و به تب Options بروید.
روی ردیف Message کلیک کنید. تا وقتی این ردیف خالی است، Auto را نشان میدهد. یک کادر متن زیر آن باز میشود.
پیامتان را بنویسید. این کادر حداکثر 400 کاراکتر جا دارد.
برای افزودن یک مقدار لحظهای، بخش Available variables را زیر کادر باز کنید. متغیر را دقیقاً همانطور که هست، همراه با آکولادهای دوتاییاش، کپی کنید.

عبارت Automatic message: کادر خالی. متن خودتان را اینجا بنویسید یا آن را خالی بگذارید.
متن زیر کادر: «Leave it blank and the alert says what happened and at what price. A message of your own is sent first, with that under it.»، یعنی اگر کادر را خالی بگذارید، هشدار میگوید چه اتفاقی افتاده و در چه قیمتی. اگر پیام خودتان را بنویسید، اول پیام شما فرستاده میشود و این متن زیر آن میآید.
بخش Available variables: مقدارهای لحظهای که میتوانید به پیامتان اضافه کنید.
متن شما سطر اول میشود و متن خودکار بعد از آن میآید. در مثال، این پیام:
{{symbol}} on {{timeframe}}: check the 1h trend before entering.
اینطور میرسد:
EURUSD on 5m: check the 1h trend before entering.
EURUSD crossed above 1.09. Price 1.0901.
This alert is now off. It was set to fire once.
قیمت و شرط از قبل در سطرهای زیر متن شما هستند. پیام خودتان را برای چیزهایی به کار ببرید که این سطرها نمیگویند، مثلاً پلن معاملاتیتان.
پیامی که مینویسید، نام هشدار در فهرست هشدارها هم هست. اگر پیامی ننویسید، فهرست نامی نشان میدهد که از روی شرط ساخته شده است. برای یک سطح قیمت، این نام کوتاه است، مثل «EURUSD crossing up 1.09». یک خط یا چند شرط همانطور که ویرایشگر مینویسد نشان داده میشوند، مثل «GBPJPY: 1h Price touches 1h Resistance R1». وقتی شرط را تغییر دهید، این نام هم همراهش عوض میشود. وقتی هشدار را دوباره باز کنید، کادر Message همچنان خالی است. هشدارهایی که قبلاً بدون پیام ذخیره کردهاید هم نامشان را به همین شکل نشان میدهند.
آنچه هر مقصد نشان میدهد
همهی مقصدها یک پیام را میگیرند، اما هرکدام آن را به شکل خودش نشان میدهد:
| مقصد | آنچه نشان میدهد |
|---|---|
| اعلان درون برنامه | سطر اول با حروف درشت و عددها زیر آن. |
| Notify my devices | سطر اول بهعنوان عنوان و سطرهای دیگر زیر آن. |
| Send to MetaTrader | سطر اول بهعنوان عنوان و سطرهای دیگر زیر آن. زمان را خود MetaTrader کنار پیام نشان میدهد. |
| Telegram | پیام، زمان به وقت منطقهی زمانی خودتان و لینکی به چارت. |
| Send email | پیام، همراه با تاریخ و زمان به وقت منطقهی زمانی خودتان. |
| Webhook URL | سرویسهای Discord و Slack پیام را با زمان به وقت UTC میگیرند. با گزینهی Raw JSON، نرمافزار شما متغیرهای پایین را میگیرد. |
پیام Telegram زمان را اینطور مینویسد: «24 Sep, 11:02 London time». اگر منطقهی زمانی درست نیست، منطقهی خودتان را در کادر Timezone در صفحهی Your profile انتخاب کنید. وقتی ForecastCity منطقهی زمانی شما را نمیداند، زمان به وقت UTC است.
لینک داخل پیام Telegram، ایمیل، اعلان گوشی یا پنجرهی بازشوی MetaTrader، چارت همان نماد را همراه با پنل Alerts باز میکند. در بیشتر هشدارهای 4CM-AI، این لینک چارت را همراه با پنجرهی Alert observation همان دفعهی فعال شدن باز میکند.
افزودن مقدارهای لحظهای با متغیرها
وقتی هشدار فعال میشود، هر متغیر با مقدار خودش جایگزین میشود. متغیرهای بخش Available variables اینها هستند:
| متغیر | آنچه مینویسد | مثال |
|---|---|---|
{{symbol}} |
نماد | EURUSD |
{{price}} و {{close}} |
قیمت در لحظهی فعال شدن هشدار | 1.0901 |
{{condition_text}} |
آنچه رخ داده، بدون نماد | Price crossed above 1.09 |
{{condition}} |
شرط بهصورت یک کد کوتاه | CROSSING_UP 1.09 |
{{timeframe}} |
تایمفریم هشدار | 5m |
{{time_iso}} |
تاریخ و ساعت، به وقت UTC | 2026-09-24 10:02 UTC |
{{time}} |
همان زمان بهصورت تعداد ثانیه، برای نرمافزارها | 1790244120 |
{{time_now}} |
لحظهی فرستاده شدن پیام، بهصورت عدد | 1790244121 |
{{exchange}} |
منبع قیمتها | TwelveData |
{{status}} |
اینکه هشدار روشن میماند یا نه | This alert stays on. |
{{alert_url}} |
لینکی به چارت همان نماد، همراه با هشدارهای شما | یک آدرس وب |
{{name}} |
پیام شما که هر متغیرش با مقدار خودش جایگزین شده، یا نامی که فهرست هشدارها نشان میدهد | EURUSD crossing up 1.09 |
برای یک خط، متغیر {{condition_text}} مثلاً «Price touched 1h Resistance R1» میشود. با چند شرط، شرطهای برقرارشده را با کلمهی and به هم وصل میکند. بعد از فعال شدن هشداری با گزینهی Once only، متغیر {{status}} «This alert is now off. It was set to fire once.» میشود. برای هشداری با چند شرط، یک خط یا یک اندیکاتور، متغیر {{condition}} مقدار TREE دارد. این متغیر کدی برای نرمافزارهاست.
در هشدارهای 4CM-AI، متغیر {{forecast_summary}} خلاصهای از آنچه در پیشبینی رخ داده است مینویسد و متغیر {{forecast_symbol}} نماد پیشبینی را میآورد. متغیر {{forecast_cycle}} شمارندهای است که هر بار که هشدار دوباره نوبت بررسی را شروع میکند، یکی بالا میرود. در پیامی که {{forecast_summary}} دارد، سطرهای خودکار زیر پیام نمیآیند، چون خود خلاصه میگوید چه اتفاقی افتاده است.
متغیرهای {{price}} و {{close}} در بیشتر هشدارهای 4CM-AI خالی میمانند، چون این هشدارها قیمت واحدی ندارند. متغیر {{time_iso}} از UTC استفاده میکند، پس ممکن است با ساعت کامپیوتر شما فرق داشته باشد. متغیری که وجود نداشته باشد، دقیقاً همانطور که نوشتهاید باقی میماند: {{prices}} که غلط نوشته شده، به همان شکل {{prices}} میرسد.
فرستادن هشدارها به وبهوک
وبهوک هر هشدار را به یک آدرس وب میفرستد و آنجا نرمافزار خودتان، یک کانال Discord یا یک کانال Slack آن را دریافت میکند. پلن اشتراک شما باید وبهوک را شامل شود.
در تب Options، زیر بخش Notifications، گزینهی Webhook URL را تیک بزنید. یک کادر آدرس، کادر Format و یک کادر بدنه ظاهر میشوند.
آدرسی را که گیرندهی شما روی آن گوش میدهد بچسبانید. این آدرس باید با
http://یاhttps://شروع شود.کادر Format را روی Raw JSON بگذارید و کادر بدنه را خالی بگذارید.
دکمهی Create را بزنید، یا برای هشداری که ویرایش کردهاید دکمهی Save را.

آدرسی که گیرندهی شما روی آن گوش میدهد. از پورتهای استاندارد، یعنی 80 یا 443، استفاده کنید.
کادر Format: گزینهی Raw JSON برای نرمافزار خودتان، یا Discord یا Slack برای همین سرویسها.
اگر کادر بدنه خالی باشد، گیرندهی شما یک شیء JSON با همهی متغیرهای جدول دریافت میکند، بهعلاوهی alertId و triggerId. این دو، هشدار و همین یک بار فعال شدن آن را مشخص میکنند. پیش از اینکه چیزی بسازید که به فیلدهای این دادهها وابسته است، یک ارسال واقعی را ببینید.
ویرایشگر زیر کادر، آدرس سروری را که درخواستهای ما از آن فرستاده میشوند نشان میدهد. اگر گیرندهی شما فقط آدرسهای شناختهشده را میپذیرد، این آدرس را به فهرست مجاز خود اضافه کنید.
آنچه آدرس لازم دارد
یک آدرس عمومی روی یک پورت استاندارد: 80 برای http و 443 برای https. پیامها به پورتهای دیگر، به localhost یا به آدرس یک شبکهی خصوصی فرستاده نمیشوند.
بدون نام کاربری یا رمز عبور داخل آدرس.
پاسخ در کمتر از 3 ثانیه، از خود همان آدرس. هدایت (redirect) به آدرسی دیگر، ناموفق حساب میشود.
ویرایشگر فقط بررسی میکند که آدرس با http:// یا https:// شروع شود. شرایط دیگر هنگام فرستادن پیام بررسی میشوند، پس آدرس خود را با یک هشدار واقعی تست کنید. در هشدارهای قیمتی و تکنیکال، اگر گیرندهی شما خطای موقتی داشته باشد، پیام حداکثر دو بار دیگر فرستاده میشود. پیام هشدار 4CM-AI پس از تمام شدن مهلت پاسخ (timeout) یا خطای سرور دوباره فرستاده نمیشود، چون ممکن است گیرندهی شما قبلاً بر اساس آن کاری انجام داده باشد.
نوشتن بدنهی دلخواه وبهوک
در کادر بدنه میتوانید متنی با همان متغیرهای پیام بنویسید. این کادر حداکثر 2000 کاراکتر جا دارد. کادر اجازه میدهد بیشتر بنویسید، ولی بدنهی طولانیتر هنگام ذخیره پذیرفته نمیشود.
برای قالب Raw JSON، گیرندهای که یک شیء کوچک انتظار دارد میتواند این بدنه را دریافت کند:
{"symbol":"{{symbol}}","condition":"{{condition_text}}","time":"{{time_iso}}","source":"ForecastCity"}
متغیرها بهصورت متن ساده جایگذاری میشوند. مقداری که علامت نقلقول یا سطر جدید در خود داشته باشد، میتواند JSON شما را خراب کند. بدنهای که JSON معتبر نباشد، بهصورت متن ساده فرستاده میشود.
برای یک کانال Discord، کادر Format را روی Discord بگذارید و از آدرس وبهوک همان کانال استفاده کنید. سپس یک متن کوتاه یکسطری در کادر بدنه بنویسید، مثلاً:
{{symbol}}: {{condition_text}}. Open your alerts: {{alert_url}}
برای Slack، گزینهی Slack را انتخاب کنید و به همین شکل بنویسید. ForecastCity متن شما را به شکلی درمیآورد که هر سرویس انتظار دارد. اگر کادر خالی باشد، هر دو سرویس پیام هشدار را، همانطور که بالاتر دیدید، دریافت میکنند و در سطر آخرش زمان به وقت UTC میآید.
بررسی نتیجه
صبر کنید تا هشدار فعال شود، سپس تب Log را در پنل Alerts باز کنید.
آنچه گیرندهی شما دریافت کرده است را با مورد ثبتشده در Log مقایسه کنید: آنچه رخ داده، نماد و زمان.
در Log میبینید که هشدار فعال شده است، ولی نمیبینید که گیرندهی شما پیام را پذیرفته است یا نه، پس گزارشهای خود گیرنده را هم بررسی کنید. اگر آکولادهایی مثل {{prices}} میبینید، نام یک متغیر غلط نوشته شده است. اگر گیرندهی شما بدنه را رد میکند، JSON را بررسی کنید.
خوب است بدانید
پیام به همهی مقصدهایی که تیک زدهاید میرود. بدنهی وبهوک فقط به وبهوک میرود.
سرویس Discord حداکثر 1900 کاراکتر و سرویس Slack حداکثر 3000 کاراکتر را نشان میدهد. متن طولانیتر بریده میشود.