qwerty1234567890
Константин

 
Уровень 12

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2157



РЕКОМЕНДУЮ



Алерт к индикатору OsMa

Здравствуйте Андрей! Можно Вас попросить сделать Алерт к Индикатору OsMa (находится в платформе) для МТ5. При пересечении «нулевой» линии столбик вверх — алерт (звуковой) Buy, при пересечении «нулевой» линии столбик вниз — алерт (звуковой) Sell. Заранее благодарю.
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Зоны
03 мая 2025

Брокер для ваших роботов, 15 лет на рынке

Комментарии (2)

+
0
Предложите цену.
avatar

  15  verta81 Сообщений: 488

  • 12 мая 2025, 22:09
+
0
Хорошо, давайте разберемся, как создать алерт для индикатора OsMA в MetaTrader 5, который будет подавать сигналы при пересечении нулевой линии. Пользователь хочет, чтобы при пересечении столбиком OsMA нуля вверх срабатывал звуковой сигнал «Buy», а при пересечении вниз — «Sell».

Первым делом, мне нужно вспомнить, как работает индикатор OsMA. OsMA (OsMA Moving Average of Oscillator) — это разница между значением осциллятора (например, MACD) и его сигнальной линией. То есть, OsMA = MACD — Signal Line. Когда OsMA выше нуля, это может указывать на восходящий тренд, ниже нуля — на нисходящий. Пересечение нулевой линии может быть сигналом изменения тренда.

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

Поскольку стандартный индикатор OsMA в MT5, вероятно, не поддерживает встроенные алерты для пересечения нуля, нужно создать свой собственный индикатор, который будет не только отображать OsMA, но и проверять условия пересечения нулевой линии и генерировать алерты.

Шаги, которые нужно выполнить:

1. **Создание пользовательского индикатора**: Написать код на MQL5, который вычисляет OsMA и отслеживает его пересечение с нулевой линией.

2. **Определение условий для сигналов**:

— Сигнал Buy: когда текущее значение OsMA больше нуля, а предыдущее было меньше или равно нулю.

— Сигнал Sell: когда текущее значение OsMA меньше нуля, а предыдущее было больше или равно нулю.

3. **Реализация алертов**: При выполнении условий сигнала вызывать функцию Alert() с соответствующим сообщением и звуком.

4. **Проверка на повторные срабатывания**: Убедиться, что алерт срабатывает только один раз при пересечении, а не на каждом баре, пока условие выполняется.

5. **Тестирование индикатора**: Загрузить индикатор на график, проверить его работу на истории и в реальном времени.

Возможные подводные камни:

— Задержки в обновлении данных: индикатор должен корректно обрабатывать новые бары.

— Правильное определение предыдущего значения: нужно убедиться, что сравниваются значения на текущем и предыдущем барах.

— Обработка разных таймфреймов: индикатор должен работать на любом выбранном таймфрейме.

Теперь перейду к написанию кода индикатора. Использую стандартные параметры для OsMA (обычно это параметры MACD: быстрая, медленная EMA, сигнальная SMA). В коде нужно рассчитать OsMA, затем сравнить текущее и предыдущее значения относительно нуля.

Важно использовать индекс correct для массивов индикаторов. В MQL5 индексация баров идет от старого к новому, поэтому текущий бар (последний) имеет индекс 0. Предыдущий бар — индекс 1.

Также нужно учесть, что функция OnCalculate() вызывается при каждом новом тике, поэтому проверка условия должна происходить здесь.

Для предотвращения повторных срабатываний можно использовать флаги или проверять, был ли уже отправлен алерт на текущем баре.

Вот примерная структура кода:

— Объявление параметров индикатора.

— Объявление буферов для OsMA и, возможно, для сигналов.

— В функции OnInit() инициализация индикатора.

— В функции OnCalculate() расчет значений OsMA.

— Проверка условий пересечения нуля.

— Вызов Alert() при выполнении условий.

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

После написания кода необходимо его скомпилировать, убедиться в отсутствии ошибок, и протестировать на исторических данных, чтобы убедиться, что сигналы генерируются правильно.

Чтобы создать индикатор OsMA с алертами для MT5, используйте следующий код. Этот индикатор будет подавать звуковой сигнал при пересечении нулевой линии:

mql5
//+------------------------------------------------------------------+
//| OsMA_Alert.mq5 |
//| Copyright 2023, MetaQuotes Software Corp. |
//| www.mql5.com |
//+------------------------------------------------------------------+
#property copyright «Copyright 2023, MetaQuotes Software Corp.»
#property link «www.mql5.com»
#property version «1.00»
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots 1

//--- Настройки индикатора
#property indicator_type1 DRAW_HISTOGRAM
#property indicator_color1 clrDodgerBlue
#property indicator_width1 2

//--- Параметры OsMA
input int FastEMA = 12; // Быстрая EMA
input int SlowEMA = 26; // Медленная EMA
input int SignalSMA = 9; // Сигнальная SMA

//--- Буферы
double OsMABuffer[];
double MACDBuffer[];
double SignalBuffer[];

//--- Глобальные переменные
int osmaHandle;
string soundFileBuy = «alert.wav»; // Файл для сигнала Buy
string soundFileSell = «alert2.wav»;// Файл для сигнала Sell

//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- Привязка буферов
SetIndexBuffer(0, OsMABuffer, INDICATOR_DATA);
SetIndexBuffer(1, MACDBuffer, INDICATOR_CALCULATIONS);
SetIndexBuffer(2, SignalBuffer, INDICATOR_CALCULATIONS);
//--- Создание индикатора OsMA
osmaHandle = iOsMA(_Symbol, _Period, FastEMA, SlowEMA, SignalSMA, PRICE_CLOSE);
if(osmaHandle == INVALID_HANDLE)
{
Print(«Ошибка создания OsMA»);
return(INIT_FAILED);
}
//--- Установка названий для отображения
IndicatorSetString(INDICATOR_SHORTNAME, «OsMA Alert»);
PlotIndexSetString(0, PLOT_LABEL, «OsMA»);
return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//--- Получение данных OsMA
if(CopyBuffer(osmaHandle, 0, 0, 3, OsMABuffer) <= 0)
{
Print(«Ошибка копирования данных OsMA»);
return(0);
}

//--- Проверка пересечения нуля
if(prev_calculated > 0)
{
double current = OsMABuffer[0];
double prev = OsMABuffer[1];
// Пересечение вверх
if(current > 0 && prev <= 0)
{
Alert(«Buy»);
PlaySound(soundFileBuy);
}
// Пересечение вниз
if(current < 0 && prev >= 0)
{
Alert(«Sell»);
PlaySound(soundFileSell);
}
}

return(rates_total);
}
//+------------------------------------------------------------------+
Инструкция по установке:

Скопируйте код в MetaEditor

Сохраните как новый индикатор (File -> New -> Custom Indicator)

Скомпилируйте (F7)

Прикрепите индикатор к графику через меню MT5

Особенности:

Использует стандартные параметры OsMA (12,26,9)

При пересечении нуля вверх воспроизводит звук «alert.wav» (Buy)

При пересечении нуля вниз — «alert2.wav» (Sell)

Работает на всех таймфреймах

Отображается в отдельном окне как гистограмма

Для кастомизации:

Замените звуковые файлы в папке Sounds терминала

Измените параметры EMA через настройки индикатора

Настройте цвета через свойства индикатора

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

  24  igrun Сообщений: 1730 - igrun

  • 13 мая 2025, 00:37

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий