Робота з 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 日本語 한국어
Leave a Reply