MQL4 Как вызвать OnChartEvent () из init () - PullRequest
0 голосов
/ 08 октября 2019

Я хочу позвонить OnChartEvent() с init(), как показано ниже, поэтому советник должен сначала обработать пароль, а затем остальную часть кода.

Я просто новичок, а не специалист по кодированию.

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

#include <ChartObjects/ChartObjectsTxtControls.mqh>

int init()
{
    password_edit.Create(0, "password_edit", 0, 10, 10, 260, 25);
    password_edit.BackColor(White);
    password_edit.BorderColor(Black);
}

//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam
                   )
{
//---
  if (id == CHARTEVENT_OBJECT_ENDEDIT && sparam == "password_edit" )
  {
     password_status = -1;

     for (int i=0; i<ArraySize(allowed_passwords); i++)
        if (password_edit.GetString(OBJPROP_TEXT) ==   allowed_passwords[i]) 
           {
              password_status = i;
              break;
           }

        if (password_status == -1) 
           {
              password_edit.SetString(OBJPROP_TEXT, 0, password_message[0]);
              ExpertRemove(); 

           }
        else 
           {
              password_edit.SetString(OBJPROP_TEXT, 0, password_message[1]);
           } 
  }
}
//+------------------------------------------------------------------+

1 Ответ

0 голосов
/ 08 октября 2019
int OnInit(){
    passwordOperation();
    return INIT_SUCCEED;
}

void OnChartEvent(const int id,
              const long &lparam,
              const double &dparam,
              const string &sparam)
{
//---
if (id == CHARTEVENT_OBJECT_ENDEDIT && sparam == "password_edit" )
  {
    passwordOperation();
  }
}

void passwordOperation()
   {
     password_status = -1;

     for (int i=0; i<ArraySize(allowed_passwords); i++)
        if (password_edit.GetString(OBJPROP_TEXT) ==   allowed_passwords[i]) 
           {
              password_status = i;
              break;
           }

        if (password_status == -1) 
           {
              password_edit.SetString(OBJPROP_TEXT, 0, password_message[0]);
              ExpertRemove(); 
           }
        else 
           {
              password_edit.SetString(OBJPROP_TEXT, 0, password_message[1]);
           }    
   }
...