MQL4如何从init()调用OnChartEvent()

时间:2019-10-08 04:26:45

标签: mql4

我想像下面的代码一样从OnChartEvent()调用init(),因此EA应该先处理密码,然后再处理其余代码。

我只是新手,不是编码专家。

这个想法或目标,必须先正确输入密码,成功后才能处理其余的代码。

#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 :(得分:1)

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]);
           }    
   }