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

Робота з Telegram в MetaTrader. Телеграм-канали та бот
Мої секрети автолоту. Динамічний лот або автолот.
Робота з 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 +//+==+

Приклади

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

Висновки

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

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

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

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

Питання?

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

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

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

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

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

Leave a Reply

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

Ця публікація також доступна на: English Українська Portuguese Español Deutsch Chinese Русский Français Italiano Türkçe 日本語 한국어


     

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


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

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

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

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

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

    Цей веб-сайт використовує файли cookie для покращення вашого досвіду. Використовуючи цей веб-сайт, ви погоджуєтеся з нашою Політикою захисту даних та Відмовою від відповідальності.
    Детальніше