Алерт в індикаторі. Як вставити алерт і стрілку в індикатор? Сповіщення

Робота з Telegram в MetaTrader. Телеграм-канали та бот

Мої секрети автолоту. Динамічний лот або автолот.

Робота з Telegram в MetaTrader. Телеграм-канали та бот

Мої секрети автолоту. Динамічний лот або автолот.

Опис

Сповіщення: Найчастіші запити в пошукових системах та популярні теми на форумах часто включають наступні фрази. Ось важливі теми про Алерт, про які вам варто знати.

Сповіщення щодо таких тем може допомогти вам залишатися в курсі останніх тенденцій.

  • Сповіщення індикатора
  • Як додати звуковий сигнал до індикатора?
  • Допоможіть вставити звуковий сигнал у індикатор
  • Як вставити сповіщення та стрілки
  • Як надіслати повідомлення на електронну пошту або телефон, коли сигнал надходить від індикатора?

У цій статті я детально опишу простий спосіб додати сповіщення Сповіщення, Пошта, Push та Стрілка до будь-якого індикатора за допомогою додаткового коду, доступного на Expforex.

Генератор коду Alert для MetaTrader

Інструмент для розробників MQL4 / MQL5
Згенеруйте код Alert для вашого індикатора MetaTrader
Налаштуйте джерело сигналу, канали сповіщень, зсув бара та згенеруйте готовий MQL-шаблон Alert для вашого індикатора.
ГЕНЕРАТОР КОДУ
Відкрити налаштування коду Alert
Примітка для розробників: Вставте згенерований блок після розрахунку буферів індикатора або умов сигналу. Цей шаблон призначений для сповіщень. Для автоматичної торгівлі за сигналами індикаторів використовуйте xCustomEA.
Налаштування джерела сигналу
Буфер, який містить значення стрілки BUY.
Буфер, який містить значення стрілки SELL.
Один буфер, значення якого визначають BUY і SELL.
Виберіть, як інтерпретувати значення сигнального буфера.
Проста прикладна умова для alert на основі свічок.
Перша лінія/буфер, що використовується в логіці перетину.
Друга лінія/буфер, що використовується в логіці перетину.
Фіксований ціновий рівень для прикладу логіки пробою.
Виберіть, як ціна має взаємодіяти з рівнем.
Запобігає повторним alerts на кожному tick тієї самої свічки.
Канали сповіщень
Виберіть усі методи сповіщень, які потрібно включити до згенерованого коду.
Стандартний звуковий файл MetaTrader.
Додатковий текст, який додається до згенерованого повідомлення Alert.
Потрібна автоматична торгівля за сигналами індикатора? Цей шаблон Alert корисний для сповіщень. Якщо вам потрібен Expert Advisor, який читає буфери користувацьких індикаторів і автоматично відкриває угоди, використовуйте The xCustomEA.

  

Передмова 

Для правильного встановлення Сповіщень у вашому індикаторі, ви повинні мати відкритий код вашого індикатора. 

Декомпільований код небажаний, оскільки для початківців декомпільований код надає мінімальну інформацію. Його важко зрозуміти. 

Ви також можете зіткнутися з проблемами при компіляції після редагування. 

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 +//+==+

Приклади

Ці приклади взяті з відповідного розділу нашого форуму. Я модифікував індикатори згідно з описаними вище принципами. 

Висновки

У цій статті я пояснив процес створення сигналів для індикатора найбільш детально та зрозуміло.

Вищевказаний код можна використовувати без обмежень на будь-який індикатор. Важливо не змінювати ім’я автора при додаванні коду до індикатора. 

Якщо вам сподобалась ця стаття і ви знайшли цей метод вставлення сигналів корисним, будь ласка, залиште свої коментарі та оцініть теми. 

Signal Bar: Це Важливо Знати

Питання?

Якщо у вас є будь-які питання, будь ласка, задавайте їх. Ми не продаємо свиню в мішку.

Крім того, кожен з наших продуктів можна протестувати перед покупкою.

Ми цінуємо ваш інтерес та підтримку наших продуктів і прагнемо підтримувати високі стандарти якості.

Дякуємо, що ви з нами!

У вас є питання?

Leave a Reply

Your email address will not be published. Required fields are marked *


Ця публікація також доступна на: English Portuguese Español Deutsch Français Русский Українська Indonesian Italiano العربية Chinese 日本語 한국어 Türkçe ไทย Tiếng Việt




    Будь ласка, зачекайте, йде обробка AI...

     

    Попередження про ризик:


    Минулі торгові показники не гарантують майбутніх результатів.

    Маржинальна торгівля іноземною валютою пов'язана з високим ступенем ризику і може не підходити для всіх інвесторів.

    Майте на увазі, що використання торгових роботів пов'язане зі значним ризиком, і ви можете втратити більше, ніж ваші початкові інвестиції.

    Будь ласка, будьте обережні, ретельно оцініть своє фінансове становище і зверніться за порадою до кваліфікованого фахівця.

    Відмова від відповідальності