Алерт в индикатор. Как вставить Alert и Arrow в индикатор?

Работа с Telegram в MetaTrader. Каналы и бот Телеграм
Мои секреты Автолота. Динамический лот или автолот.
Работа с Telegram в MetaTrader. Каналы и бот Телеграм
Мои секреты Автолота. Динамический лот или автолот.

Описание

Оповещение: Наиболее частые запросы в поисковых системах и популярные темы на форумах часто включают следующие фразы.

Оповещение по таким темам может помочь вам быть в курсе последних тенденций.

  • Индикатор оповещений
  • Как добавить звуковой сигнал к индикатору?
  • Помогите вставить звуковой сигнал в индикатор
  • Как вставить Оповещения и Стрелки
  • Как отправить сообщение на email или телефон, когда сигнал поступает от индикатора?

В этой статье я подробно опишу простой способ добавить уведомления Оповещение, Почта, 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); // Название нужного нам буфера  

Если это 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; // Выводить оповещение на экран
extern bool Mail=true; // Отправлять сообщение
extern bool Push=true; // Отправлять PUSH на телефон
extern bool Arrow=true; // Устанавливать стрелки на сигналы
extern int shift=1; // На каком баре считать сигнал 0 - на текущем, 1 - на закрытом
int timeee;
// Внутренняя переменная
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 *

This post is also available in: English Українська Portuguese Español Deutsch Chinese Русский Français Italiano Türkçe 日本語 한국어


    Пожалуйста, подождите, идет связь с ИИ...

     

    Предупреждение о риске:


    Прошлые торговые показатели не гарантируют будущих результатов.

    Маржинальная торговля иностранной валютой сопряжена с высокой степенью риска и может не подходить для всех инвесторов.

    Имейте в виду, что использование торговых роботов сопряжено с существенным риском, и Вы можете потерять больше, чем Ваши первоначальные инвестиции.

    Пожалуйста, действуйте с осторожностью, тщательно оценивайте свою финансовую ситуацию и обратитесь за советом к квалифицированному специалисту.

    Отказ от ответственности

    Этот сайт использует файлы cookie для улучшения вашего опыта. Используя этот сайт, вы соглашаетесь с нашей Политикой защиты данных и Отказом от ответственности.
    Читать далее