Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1798

 

Привет всем.

Прошу помощи вот в каком вопросе.

Имеется терминал mt4 и советник (самодельный) который выдает алерты по торговым сигналам. Хочу чтобы алерты приходили на мобильный терминал. В настройках настроил, тест приходит, изменение параметров ордеров приходит, а алерты с советника не приходят... не пойму в чем причина, гугл ответов не дал.

В самом терминале алерты отражаются.
 
и все же неудобное тут место для общения. Надо бы какой-нибудь стэковерфлоу и/или канал в дискорде.
 
Sergey Dymov #:

Привет всем.

Прошу помощи вот в каком вопросе.

Имеется терминал mt4 и советник (самодельный) который выдает алерты по торговым сигналам. Хочу чтобы алерты приходили на мобильный терминал. В настройках настроил, тест приходит, изменение параметров ордеров приходит, а алерты с советника не приходят... не пойму в чем причина, гугл ответов не дал.

Надо код видеть...здесь телепатов нет)
 
MakarFX #:
Надо код видеть...здесь телепатов нет)

Все стандартно       

if ((EURTP>=3)&&(JPYTP<=0)&&(z!=2))

            {Alert("Покупай EURJPY. EUR=", EURTP, ", JPY=", JPYTP); z=2;} //

 
Sergey Dymov #:

Привет всем.

Прошу помощи вот в каком вопросе.

Имеется терминал mt4 и советник (самодельный) который выдает алерты по торговым сигналам. Хочу чтобы алерты приходили на мобильный терминал. В настройках настроил, тест приходит, изменение параметров ордеров приходит, а алерты с советника не приходят... не пойму в чем причина, гугл ответов не дал.

В самом терминале алерты отражаются.

https://www.mql5.com/ru/docs/network/sendnotification

https://docs.mql4.com/ru/common/sendnotification

Документация по MQL5: Сетевые функции / SendNotification
Документация по MQL5: Сетевые функции / SendNotification
  • www.mql5.com
SendNotification - Сетевые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Sergey Dymov #:

Все стандартно       

if ((EURTP>=3)&&(JPYTP<=0)&&(z!=2))

            {Alert("Покупай EURJPY. EUR=", EURTP, ", JPY=", JPYTP); z=2;} //

if ((EURTP>=3)&&(JPYTP<=0)&&(z!=2))
    {
     Alert("Покупай EURJPY. EUR=", EURTP, ", JPY=", JPYTP); z=2;
     SendNotification(текст сообщения);
    } 
 
Спасибо, ребят! Век не забуду!
 

Так-с, сделал создание и удаление линий только по нажатию, а цвет и имя меняется от расположения курсора и... ничего не поменялось, те же проблемы. Линия создаётся в зависимости от расположения панели кнопок. У меня она внизу, значит по условию это жёлтая (Sell Stop) но тут происходит вхождение в условие if(price > Ask) потому что при клике на кнопке за каким-то хером price равняется наивысшей цене на графике, то есть выше аска, поэтому в этот момент price > Ask = true. Ну и хрен с ним, по логике следующее движение мыши должно всё исправить, но нет. Лог только одного клика по кнопке.

2021.12.07 03:05:56.888 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:05:53.408 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:05:53.408 test GBPUSD,M1: Stop Loss rename onto Buy Stop false error 0
2021.12.07 03:05:53.408 test GBPUSD,M1: Buy Stop rename onto Sell Stop true error 0
2021.12.07 03:05:53.408 test GBPUSD,M1: Sell Stop rename onto Buy Stop true error 0
2021.12.07 03:05:53.408 test GBPUSD,M1: Sell Stop create true error 4204

я хз почему 4204 (Нет объекта) может это прошлая ошибка.

После клика на кнопке видно зеленую линию на уровне Бид, на смещение курсора мыши линия не реагирует. Если курсор движется выше Аска, то беспрерывно сыпятся сообщения

2021.12.07 03:14:00.993 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:13:59.563 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:13:57.363 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:13:57.253 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:13:57.223 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:13:57.223 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:13:57.193 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
2021.12.07 03:13:57.153 test GBPUSD,M1: Buy Stop rename onto Buy Stop false error 0
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
    datetime static dt          = 0;
    double   static price       = 0;
    int      static window      = 0;
    double   static sl          = 0;
    string   static line_name;
    double static price2 = 0;
    double static price3 = 0;
    double static price4 = 0;


  if(id==CHARTEVENT_OBJECT_CLICK){
    //Нажатие на SO в зависимоти от расположения панели создаёт линию
    if(sparam=="Button Stop Order"){
      if(panel_position == 1 || panel_position == 2){
        line_name = "Buy Stop";
        CreateLine(line_name, clrGreen);
      }
      if(panel_position == 3 || panel_position == 4){
        line_name = "Sell Stop";
        CreateLine(line_name, clrYellow);
      }
    }
    //Нажатие на линию меняет цвет на красный
    if(sparam=="Buy Stop" || sparam=="Sell Stop") {
      ObjectSetString(0,line_name,OBJPROP_NAME,"Stop Loss");
      line_name = "Stop Loss";
      Print(line_name, " onto red ",ObjectSetInteger(0, line_name, OBJPROP_COLOR, clrRed));
    }
    //Нажатие на красной линии удаляет её и отжимает кнопку
    if(sparam=="Stop Loss"){
      ObjectDelete(line_name);
      button_name = "Button Stop Order";
      ms=GetMicrosecondCount();
    }
  }
  //Если кнопка SO нажата, то линия будет следовать за курсором
  if(ObjectGetInteger(0,"Button Stop Order",OBJPROP_STATE)){
    int x = (int)lparam;
    int y = (int)dparam;
    //Переведём координаты X, Y в дату и время
    if(ChartXYToTimePrice(window,x,y,window,dt,price)){
      Comment(StringFormat("CURSOR PRICE %.5f \nIF PRICE > ASK %.5f\nIF PRICE < BID %.5f\nIF PRICE IN SPREAD ZONE %.5f",
                            price,price2,price4,price3));
      //Линия меняет цвет с зелёного на желтый
      if(price < Bid){
        price4 = price;
        if(ObjectExist(0,"Buy Stop") || ObjectExist(0,"Not Allowed")){
          Print(line_name," rename onto Sell Stop ", ObjectSetString(0,line_name,OBJPROP_NAME,"Sell Stop")," error ", GetLastError());
          line_name = "Stop Loss";
          ObjectSetInteger(0, line_name, OBJPROP_COLOR, clrYellow);
        }
      }
      //Линия меняет цвет с желтого на зелёный
      if(price > Ask){
        price2 = price;
        if(ObjectExist(0,"Sell Stop") || ObjectExist(0,"Not Allowed")){
          Print(line_name," rename onto Buy Stop ", ObjectSetString(0,line_name,OBJPROP_NAME,"Buy Stop")," error ", GetLastError());
          line_name = "Buy Stop";
          ObjectSetInteger(0, line_name, OBJPROP_COLOR, clrGreen);
        }
      }
      //Линия меняет цвет на серый если в зоне спреда
      if(price > Bid && price < Ask){
        price3 = price;
        if(ObjectExist(0,"Sell Stop") || ObjectExist(0,"Buy Stop")){
          Print(line_name," rename onto Not Allowed ", ObjectSetString(0,line_name,OBJPROP_NAME,"Not Allowed")," error ", GetLastError());
          line_name = "Not Allowed";
          ObjectSetInteger(0, line_name, OBJPROP_COLOR, clrGray);
        }
      }
      //Прикрепляем линию к курсору
      if(id == CHARTEVENT_MOUSE_MOVE)
        if(ObjectMove(line_name,0,0,price))
          ChartRedraw(0);
    }
  }else if(ObjectExist(0,line_name)) Print(line_name," delete ",ObjectDelete(line_name)," error ", GetLastError());
  //Если нажать Esc то удалится линия и кнопка отожмется
  if(id == CHARTEVENT_KEYDOWN && lparam == 27){
      button_name = "Button Stop Order";
      ms=GetMicrosecondCount();
  }
}
//----------------------------------------------------------------------
void CreateLine(const string name, const color clr)
{
  Print(name," create ",ObjectCreate(0, name, OBJ_HLINE, 0,TimeCurrent(),Bid)," error ", GetLastError());
  ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
  ObjectSetInteger(0, name, OBJPROP_STYLE, 3); 
}
bool ObjectExist(const long _chartID, const string _name) { return(ObjectFind(_chartID, _name) >= 0); }
 
Nerd Trader #:


Мой тебе совет, как начинающему программисту. Узнай, как использовать дебаг (очень мощный инструмент). И сам во всём разберись. Это интересно. Если будет сложно (что вряд ли), то начни с простого. Дебаг поможет разобраться в том как работает твоё приложение до мельчайших подробностей.

Отладка программ на MQL5
Отладка программ на MQL5
  • www.mql5.com
Эта статья ориентирована в первую очередь на программистов, которые уже изучили язык, но еще недостаточно освоились в разработке программ. Статья раскрывает практические приемы отладки программ и является объединенным опытом, не только моим, но и многих программистов, на опыте которых я учился.
 
Mihail Matkovskij #:

Мой тебе совет, как начинающему программисту. Узнай, как использовать дебаг (очень мощный инструмент). И сам во всём разберись. Это интересно. Если будет сложно (что вряд ли), то начни с простого. Дебаг поможет разобраться в том как работает твоё приложение до мельчайших подробностей.

Я обычно обхожусь без него, потому что он не работает в тестере, но тут случай позволяет на реальных данных, - надо попробовать. Что я понял, вариант этого кода с переименованием объекта не отличается от прошлого, когда объекты пересоздавались при смене цветов, потому что переименование делает тоже самое: создаёт объект с новым именем и удаляет старый.


UPD

Кнопки по которым создаю линии в mql4 в режиме дебага отсутствуют на графике