Робота з Telegram в MetaTrader. Телеграм-канали та бот
Мої секрети автолоту. Динамічний лот або автолот.

Опис
Сповіщення: Найчастіші запити в пошукових системах та популярні теми на форумах часто включають наступні фрази. Ось важливі теми про Алерт, про які вам варто знати.
Сповіщення щодо таких тем може допомогти вам залишатися в курсі останніх тенденцій.
- “Сповіщення індикатора“
- “Як додати звуковий сигнал до індикатора?“
- “Допоможіть вставити звуковий сигнал у індикатор“
- “Як вставити сповіщення та стрілки“
- “Як надіслати повідомлення на електронну пошту або телефон, коли сигнал надходить від індикатора?“
У цій статті я детально опишу простий спосіб додати сповіщення Сповіщення, Пошта, Push та Стрілка до будь-якого індикатора за допомогою додаткового коду, доступного на Expforex.
Передмова
Для правильного встановлення Сповіщень у вашому індикаторі, ви повинні мати відкритий код вашого індикатора.
Декомпільований код небажаний, оскільки для початківців декомпільований код надає мінімальну інформацію. Його важко зрозуміти.
Ви також можете зіткнутися з проблемами при компіляції після редагування.
xCustomEA
Якщо ви шукаєте простіший спосіб автоматизувати вашу торгову стратегію без занурення у складне індивідуальне програмування, розгляньте xCustomEA.
Цей експертний радник від Expforex призначений для безшовної роботи з індикаторами, які генерують сигнали зі стрілками. За допомогою xCustomEA ви можете легко автоматизувати будь-який індикатор, який показує стрілки купівлі або продажу, дозволяючи створити потужну автоматизовану стратегію без клопоту з розробкою індивідуального коду.
xCustomEA робить автоматизацію стратегій на основі сигналів індикаторів надзвичайно доступною. Це дозволяє трейдерам зосередитися на оптимізації своєї торгівлі, замість того щоб витрачати час і ресурси на індивідуальне програмування. Цей експертний радник є відмінною альтернативою найму програміста, забезпечуючи просте рішення для перетворення сигналів індикаторів у торги.
Для отримання додаткової інформації відвідайте сторінку xCustomEA або ознайомтеся з іншими експертними радниками Expforex.
Початок Роботи для вставлення Сповіщення
Спочатку потрібно визначити, які буфери індикатора надають конкретні сигнали, мету створення сповіщення та умови визначення сигналу на індикаторі.
Важливо: У індикаторах можуть відображатися тільки зовнішні буфери, визначені на початку коду змінних:
#property indicator_buffers 1
Однак індикатор також може містити приховані буфери, які встановлюються у функції init() та оголошуються як змінні:
IndicatorBuffers(7): Нам потрібні тільки перші буфери.
Якщо, наприклад, у вас є 1 зовнішній буфер, тоді подивіться на змінну:
SetIndexBuffer(0, SarBuffer);
- 0 – перший буфер
- 1 – другий буфер
Ці буфери або їхні назви можна ідентифікувати, навівши курсор на конкретний рядок індикатора на графіку.
Value1 – Це перший буфер або 0 у системі індексації коду.
SetIndexBuffer(0, SarBuffer); // The name of the buffer we need
Якщо це SarBuffer, тоді ми його використаємо.


Крім того, це технічне питання визначення того, як буде спрацьовувати сигнал;
Наприклад, якщо це перетин лінії 0 зверху (знизу), що рухається вниз (вгору), це виглядатиме так:
SarBuffer[shift+1] >= 0 && SarBuffer[shift] < 0
Індикатор перетинає поточну ціну або бар, пробивання бару індикатором тощо:
SarBuffer[shift+1] >= Close[shift] && SarBuffer[shift] < Close[shift]
Якщо це перетин унікальних рівнів, індикатори, такі як стохастики:
SarBuffer[shift+1] <= 75 && SarBuffer[shift] > 75; SarBuffer[shift+1] >= 25 && SarBuffer[shift] < 25;
Якщо в вашому індикаторі вже є стрілки, то можливий також наступний тип сигналу:
DnTrend[1] != EMPTY_VALUE && DnTrend[1] != 0 && UpTrend[2] != EMPTY_VALUE
У будь-якому випадку, вам потрібно застосувати логіку та креативність, щоб правильно записати сигнал. Якщо ви зіткнетеся з труднощами, напишіть у цю тему, додайте індикатор, покажіть рядки на графіку та детально опишіть, що ви не можете зробити. Надсилання повідомлення на кшталт “вам потрібно вставити сповіщення в індикатор” без пояснення, де і що робити, та без надання самого індикатора, не допоможе.
Код “Сповіщення та стрілки від www.expforex.com”
Наступний крок додавання нашого сповіщення до вашого індикатора складається з кількох пунктів:
КРОК 1
Вставте наступний код на початку експертного радника перед функцією OnCalculate () (start) функції:
//+==+//+ www.expforex.com edit AlertArrow +//+==+
extern string Alerts="Alerts and arrows from www.expforex.com";
extern bool AlerT=true; // Issue an alert to the screen
extern bool Mail=true; // Send message
extern bool Push=true; // Send PUSH to phone
extern bool Arrow=true; // Put arrows on signals
extern int shift=1; // On which bar to count the signal 0 - on the current one, 1 - on the closed
int timeee;
// Internal variable
string nameInd;
void SetArrow(int cd, color cl, string nm="", datetime t1=0, double p1=0, int sz=3)
{
if(nm=="")
nm=DoubleToStr(Time[0], 0);
if(t1 <= 0)
t1=Time[0];
if(p1 <= 0)
p1=Bid;
nameInd=WindowExpertName();
int wind=WindowFind(nameInd);
wind=0;
if(ObjectFind(nm) < 0)
ObjectCreate(nm, OBJ_ARROW, wind, 0, 0);
ObjectSet(nm, OBJPROP_TIME1, t1);
ObjectSet(nm, OBJPROP_PRICE1, p1);
ObjectSet(nm, OBJPROP_ARROWCODE, cd);
ObjectSet(nm, OBJPROP_COLOR, cl);
ObjectSet(nm, OBJPROP_WIDTH, sz);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void Expforex_AlertArrow(string text="", int arrowdir=0, bool history=false, int i=0)
{
nameInd=WindowExpertName();
int wind=WindowFind(nameInd);
if(wind==-1)
wind=0;
ObjectCreate("Originalalert", OBJ_LABEL, wind, 0, 0);
ObjectSetText("Originalalert", "Modification AlertArrow www.expforex.com", 10, "Arial Bold", Red);
ObjectSet("Originalalert", OBJPROP_CORNER, 2);
ObjectSet("Originalalert", OBJPROP_XDISTANCE, 200);
ObjectSet("Originalalert", OBJPROP_YDISTANCE, 10);
if(!history)
{
if(AlerT)
Alert(text);
if(Arrow)
if(arrowdir==1)
SetArrow(241, Blue, nameInd + DoubleToStr(Time[shift], 0), Time[shift], Low[shift]);
if(Arrow)
if(arrowdir==2)
SetArrow(242, Red, nameInd + DoubleToStr(Time[shift], 0), Time[shift], High[shift]);
if(!IsTesting())
if(Mail)
SendMail(text, text);
if(!IsTesting())
if(Push)
SendNotification(text);
}
if(history)
{
if(Arrow)
if(arrowdir==1)
SetArrow(241, Blue, nameInd + DoubleToStr(Time[shift + i2], 0), Time[shift + i2], Low[shift + i2]);
if(Arrow)
if(arrowdir==2)
SetArrow(242, Red, nameInd + DoubleToStr(Time[shift + i2], 0), Time[shift + i2], High[shift + i2]);
}
}//+==+//+ www.expforex.com edit AlertArrow +//+==+
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
for(int i=ObjectsTotal(); i>=0; i--)
{
if(StringFind(ObjectName(i), nameInd)!=-1)
ObjectDelete(ObjectName(i));
}
}
//+------------------------------------------------------------------+
КРОК 2
Перед закриттям функції OnCalculate (), вставте наступний код:
return(rates_total); }
Вставте наступний код:
//+==+//+ www.expforex.com edit AlertArrow +//+==+
nameInd=WindowExpertName();
if(timeee != Time[0] && SarBuffer[shift+1] <= 75 && SarBuffer[shift] > 75)
{
Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " UP", 1);
timeee=Time[0];
}
if(timeee != Time[0] && SarBuffer[shift+1] >= 25 && SarBuffer[shift] < 25)
{
Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " DN", 2);
timeee=Time[0];
}//+==+//+ www.expforex.com edit AlertArrow +//+==+
КРОК 3
Цей код буде служити нашим сигналом.
Звісно, вам потрібно замінити деякий код на свій власний.
Наступний код служить сигналом для сповіщення:
1. Перетин лінії 0 зверху (знизу), що рухається вниз (вгору), це виглядатиме так:
SarBuffer[shift+1] >= 0 && SarBuffer[shift] < 0
2. Індикатор перетинає поточну ціну або бар, пробивання бару індикатором тощо:
SarBuffer[shift+1] >= Close[shift] && SarBuffer[shift] < Close[shift]
3. Якщо це перетин унікальних рівнів, індикатори, такі як стохастики:
SarBuffer[shift+1] <= 75 && SarBuffer[shift] > 75; SarBuffer[shift+1] >= 25 && SarBuffer[shift] < 25;
Після Використання
Щоб додати звуковий сигнал до індикатора, виконайте наступні кроки:
- 1. Відкрийте налаштування індикатора.
- 2. Знайдіть розділ “Сповіщення” або “Стрілки“.
- 3. Виберіть опцію додавання звукового сповіщення.
- 4. Виберіть звуковий файл, який ви хочете використовувати як сповіщення.
- 5. Збережіть зміни.
Вставивши звуковий сигнал у індикатор, ви можете отримувати звукове сповіщення, коли виконуються певні умови, що може допомогти вам приймати кращі торгові рішення.
Якщо вам потрібні стрілки на історії, тоді вам потрібно зробити наступне:
Після наведеного вище коду додайте наступне:
//+==+//+ www.expforex.com edit AlertArrow +//+==+
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
if(counted_bars > 0)
counted_bars--;
int limit2 = Bars - counted_bars;
for(int i2 = 0; i2 < limit2; i2++) {
nameInd = WindowExpertName();
if(SarBuffer[shift+1+i2] <= 75 && SarBuffer[shift+i2] > 75)
{
Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " UP" + i2, 1, true, i2);
}
if(SarBuffer[shift+1+i2] >= 25 && SarBuffer[shift+i2] < 25)
{
Expforex_AlertArrow(Symbol() + " " + Period() + nameInd + " DN" + i2, 2, true, i2);
}
}
//+==+//+ www.expforex.com edit AlertArrow +//+==+
Приклади
Ці приклади взяті з відповідного розділу нашого форуму. Я модифікував індикатори згідно з описаними вище принципами.
Висновки
У цій статті я пояснив процес створення сигналів для індикатора найбільш детально та зрозуміло.
Вищевказаний код можна використовувати без обмежень на будь-який індикатор. Важливо не змінювати ім’я автора при додаванні коду до індикатора.
Якщо вам сподобалась ця стаття і ви знайшли цей метод вставлення сигналів корисним, будь ласка, залиште свої коментарі та оцініть теми.
- Фріланс: Індивідуальне програмування на MetaTrader та MQL!
- Індикатор сигналу бару. З якого бару брати сигнал? Малювання індикаторів.
- Індикатор CrossObjectAlert сповіщення при перетині з об’єктами для терміналів mt4 та mt5
- Робота з електронною поштою та push у MetaTrader
Signal Bar: Це Важливо Знати
Питання?
Якщо у вас є будь-які питання, будь ласка, задавайте їх. Ми не продаємо свиню в мішку.
Крім того, кожен з наших продуктів можна протестувати перед покупкою.
Ми цінуємо ваш інтерес та підтримку наших продуктів і прагнемо підтримувати високі стандарти якості.
Дякуємо, що ви з нами!
У вас є питання?
Ця публікація також доступна на: English Portuguese Español Deutsch Українська Chinese Русский Français Italiano Türkçe 日本語 한국어 العربية Indonesian ไทย Tiếng Việt


Leave a Reply