Советник или индикатор?

 
Добрый день, господа. Хочу написать программу-аллерт для уведомления о событиях на основе технического анализа. Пример - 21 ЕМА пересекает 200 ЕМА. При этом сделка не должна открываться, только уведомление нужно. Подскажите, что это за тип программы должен быть - советник, или индикатор, или что-то ещё?  И как лучше писать это - через алго или нейронку? Не владею ни тем, ни другим, так что придется изучать с нуля. Заранее спасибо
 
Chrono161:
Добрый день, господа. Хочу написать программу-аллерт для уведомления о событиях на основе технического анализа. Пример - 21 ЕМА пересекает 200 ЕМА. При этом сделка не должна открываться, только уведомление нужно. Подскажите, что это за тип программы должен быть - советник, или индикатор, или что-то ещё?  И как лучше писать это - через алго или нейронку? Не владею ни тем, ни другим, так что придется изучать с нуля. Заранее спасибо

Если ничем не владеешь - видимо, лучше сюда

https://www.mql5.com/ru/job

Торговые приложения для MetaTrader 5 на заказ
Торговые приложения для MetaTrader 5 на заказ
  • 2024.08.30
  • www.mql5.com
Самый большой фриланс c разработчиками программ на MQL5
 
Walerij75 #:

Если ничем не владеешь - видимо, лучше сюда

https://www.mql5.com/ru/job

Не, хочется самому разобраться

 
Chrono161:
Добрый день, господа. Хочу написать программу-аллерт для уведомления о событиях на основе технического анализа. Пример - 21 ЕМА пересекает 200 ЕМА. При этом сделка не должна открываться, только уведомление нужно. Подскажите, что это за тип программы должен быть - советник, или индикатор, или что-то ещё?  И как лучше писать это - через алго или нейронку? Не владею ни тем, ни другим, так что придется изучать с нуля. Заранее спасибо

это явный индикатор, 

для начала - возьмите в CodeBase схожие индикаторы (пересечение двух MA) и разберитесь с их кодом. 

 
Maxim Kuznetsov #:

это явный индикатор, 

для начала - возьмите в CodeBase схожие индикаторы (пересечение двух MA) и разберитесь с их кодом. 

Спасибо!

 
Chrono161:
Хочу написать программу-аллерт для уведомления о событиях на основе технического анализа. Пример - 21 ЕМА пересекает 200 ЕМА. При этом сделка не должна открываться, только уведомление нужно. Подскажите, что это за тип программы должен быть - советник, или индикатор, или что-то ещё?
Maxim Kuznetsov #:
это явный индикатор

Интересно, почему именно индикатор?

Ведь из описания функции SеndNоtification, которую ТС очевидно планирует использовать для отправки уведомлений, неявно следует, что она является синхронной, т.е. вызывает остановку вызывающей её MQL программы до окончания своего выполнения.

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

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

 
Alexey Gudima #:
Ведь из описания функции SеndNоtification, которую ТС очевидно планирует использовать для отправки уведомлений, неявно следует, что она является синхронной, т.е. вызывает остановку вызывающей её MQL программы до окончания своего выполнения.

Где Вы такое прочитали в описании этой функции?

SеndNоtification, если мне не изменяет память, вообще ставит уведомление в очередь. Т.е. никаких ожиданий успешной отправки до адресата.

 
Artyom Trishkin #:

Где Вы такое прочитали в описании этой функции?

SеndNоtification, если мне не изменяет память, вообще ставит уведомление в очередь. Т.е. никаких ожиданий успешной отправки до адресата.

Именно потому, что конкретно такого я там не прочитал, я и написал, что это неявно следует из описания.

Рассуждал я так — обычно, когда функция является асинхронной, об этом либо явно сказано, либо упомянуто о том, что функция возвращает true в случае успешной постановки уведомления в очередь.
А в нашем случае в описании функции SеndNоtification сказано буквально следующее:

Возвращаемое значение

true при успешной отправке уведомления из терминала,  в случае неудачи возвращает false.

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

Исходя из такого описания, я бы не стал полагаться на то, что эта функция является асинхронной и, соответственно, использовать её в индикаторах. 

 
Chrono161:
Добрый день, господа. Хочу написать программу-аллерт для уведомления о событиях на основе технического анализа. Пример - 21 ЕМА пересекает 200 ЕМА. При этом сделка не должна открываться, только уведомление нужно. Подскажите, что это за тип программы должен быть - советник, или индикатор, или что-то ещё?  И как лучше писать это - через алго или нейронку? Не владею ни тем, ни другим, так что придется изучать с нуля. Заранее спасибо

Простейший советник, который использует 2 EMA. Вот код одной ученицы, он 11-летней давности и на MQL4, но смысл понятен. И если женщина в 40 лет с нуля обучилась неплохо программировать, то вам грех сдаваться и идти на поклон к фрилансерам!

//+------------------------------------------------------------------+
//|                                                 FindCross_MA.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Elena G"

extern int ТР = 300;           // Тайкпрофит
extern int TimeF = 1;          // Таймфрейм
extern int Period_Higt = 4;    // Период для быстрого Muvinga
extern int Period_Low = 16;    // Период для медленного Muvinga
extern int Cross = 0;          // Признак пересечения двух Muving Avirage


//Алексей, это два в одном первые задания вебинара за 12.12.2013.
//Простейший советник, который на каждом пересечении открывает позицию на покупку или продажу.
//Здесь нет анализа на ошибки открытия позиций, чтобы не загружать код, так легче тебе будет проверять
//Ещё я не уверена, что правильно Cross - вовращаемый параметр.


//*******************************************************************
int init()
{
    return(0);
}

int deinit()
{

    return(0);
}

int start()
{
    FindCrossMA(TimeF, Period_Higt, Period_Low, Cross);
    if (Cross == 1)  OrderSend(Symbol(), OP_BUY, 0.1, NormalizeDouble(Ask, Digits), 30, 0, NormalizeDouble(Ask + ТР*Point, Digits), "Lena", 77777, 0, Green);
    if (Cross == -1) OrderSend(Symbol(), OP_SELL, 0.1, NormalizeDouble(Bid, Digits), 30, 0, NormalizeDouble(Bid - ТР*Point, Digits), "Lena", 11111, 0, Red);
    if (Cross == 0)  return (0);
    return(0);
}

//Эта функция проводит анализ средних на последнем и предпоследнем барах.

int FindCrossMA( int TimeF, int Period_Higt, int Period_Low, int &Cross) // Алексей, имена переменных такие же, я думаю, что это можно!!!
{
    double point_Higt_0, point_Higt_1;   // средние на быстhом Muvinge
    double point_Low_0, point_Low_1;     // средние на медленном Muvinge


    point_Higt_0 = iMA(NULL, TimeF, Period_Higt, 0, MODE_EMA, PRICE_OPEN, 0);
    point_Low_0 = iMA(NULL, TimeF, Period_Low, 0, MODE_EMA, PRICE_OPEN, 0);

    point_Higt_1 = iMA(NULL, TimeF, Period_Higt, 0, MODE_EMA, PRICE_OPEN, 1);
    point_Low_1 = iMA(NULL, TimeF, Period_Low, 0, MODE_EMA, PRICE_OPEN, 1);

    if(point_Low_1 > point_Higt_1 && point_Low_0 < point_Higt_0) //Пересечение вверх, тренд на покупку
        //?????? Может быть здесь делать ещё проверку на >= и <=
    {
        Cross = 1;
        return (0);
    }
    if(point_Low_1 < point_Higt_1 && point_Low_0 > point_Higt_0) //Пересечение вниз, тренд на продажу
    {
        Cross = -1;
        return (0);
    }
    else
    {
        Cross = 0;
        return (0);
    }
}
 
Chrono161:
Добрый день, господа. Хочу написать программу-аллерт для уведомления о событиях на основе технического анализа. Пример - 21 ЕМА пересекает 200 ЕМА. При этом сделка не должна открываться, только уведомление нужно. Подскажите, что это за тип программы должен быть - советник, или индикатор, или что-то ещё?  И как лучше писать это - через алго или нейронку? Не владею ни тем, ни другим, так что придется изучать с нуля. Заранее спасибо

Сначала пишете индикатор. Настраиваете его параметры на получение удовлетворительного сигнала.

Затем, в силу того что у Вас в вопросе присутствует слово "сделка", переносите логику получения сигнала (математику из индикатора) в советник

а индикатор оставляете для наглядности

 
Chrono161:
И как лучше писать это - через алго или нейронку? Не владею ни тем, ни другим, так что придется изучать с нуля.

В таком случае может изучать и писать не нужно начинать: