mql5语言的特点、微妙之处以及技巧 - 页 181

 
Andrey Khatimlianskii:

我通常在这样的终端上有1-2个图表,很难弄混。但问题是明确的。

我交易更多的符号,更多的EA正在运行。还在监测非交易的符号。自定义符号 被创建,测试器正在运行,等等。

一般来说,是个工作狂。
 
fxsaber:

交易更多的符号,运行更多的EA。还在监测非交易的符号。自定义符号正在被创建,测试器正在运行,等等。

一般来说,是个工作主力。

我有一个只在投资者密码下的工作母机,用于所有账户。而且那里是否有任何EA并不重要。

 
trader_number_one:

我只在我的投资密码下为所有账户设置了一个工作母机。而且我不在乎里面是否有任何顾问。

顾问不只是用于交易。此外,你必须能够在一个工作岗位上进行交易。

 
fxsaber:

我有十个终结者。在一个的动荡中,我转到了另一个账户。时间过去了,我看了看终端机,发现我需要另一个账户--我切换到旧账户。而且完全没有料到EA会挂掉,我看到EA已经开始了。

这个简单的代码能在账户转换时发挥作用吗?

bool IsShowMessageBox = true;
//+------------------------------------------------------------------+
int OnInit()
{
   if(IsShowMessageBox && MessageBox("Произвести запуск эксперта?", "Run EA", MB_OKCANCEL) == IDCANCEL) return(INIT_FAILED);
   IsShowMessageBox = false;
   return(INIT_SUCCEEDED);
}


而当连接中断时,重新登录会不会运行这段代码?

 
Igor Makanu:

像这样的简单代码能在账户变更时发挥作用吗?

没有。

当连接中断时,重新登录是否会触发这个代码?

自动重新登录不会。手册将。

 

解决办法就在表面上。当你切换时,图上什么没有变化?这就对了--图形对象。当机器人启动时,你创建了一个图形对象,在DeInit中删除,在正常情况下,分别在OnInit中检查该对象,如果它存在,那么就出了问题,返回INIT_FAILED。

大约是这样的。

#define  NAME "test"

int OnInit()
  {
   static const string symbol=_Symbol;
   if (ObjectFind(0,NAME)>=0||symbol!=_Symbol) return INIT_FAILED;
   else ObjectCreate(0,NAME,OBJ_HLINE,0,0,0);
   return INIT_SUCCEEDED;
  }

void OnDeinit(const int reason){
   switch(reason){
      case REASON_PARAMETERS:
      case REASON_PROGRAM:
      case REASON_REMOVE:
      case REASON_INITFAILED:
      case REASON_CLOSE:
      case REASON_CHARTCLOSE:
      case REASON_TEMPLATE:
      case REASON_CHARTCHANGE: ObjectDelete(0,NAME);
      case REASON_RECOMPILE:
      case REASON_ACCOUNT: break;
   }
}

void OnTick(){
}
 
Vladimir Simakov:

解决办法就在表面上。当你切换时,图上什么没有变化?这就对了--图形对象。当机器人启动时,你创建了一个图形对象,在DeInit中删除,在正常情况下,分别在OnInit中检查该对象,如果它存在,那么就出了问题,返回INIT_FAILED。

大约是这样的。

保存不是问题,这里一般来说,我们需要正确地分配EA的初始化,切换账户的情况是我最不担心的,但图表本身如何启动,以及什么时候图表没有准备好,是一个笼罩在黑暗中的谜))。

检查了阅读评论...它不光滑--在一个不存在的符号上切换账户时,在 "黑屏 "上甚至不可见;)

int OnInit()
{
   string arr_comm[];
   if(StringSplit(ChartGetString(0, CHART_COMMENT), StringGetCharacter(";", 0), arr_comm) == 2) Print("_StopFlag = ", (bool)((int)arr_comm[0]), " ; _UninitReason = ", (int)arr_comm[1]);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Comment((string)_StopFlag + ";" + (string)_UninitReason);
}
 
Vladimir Simakov:

解决办法就在表面上。当你切换时,图上什么没有变化?这就对了--图形对象。当机器人启动时,你创建了一个图形对象,在DeInit中删除,在正常情况下,分别在OnInit中检查该对象,如果它存在,那么就出了问题,返回INIT_FAILED。

这是这样的事情。

你也可以使用终端的全局变量。它们也没有被删除。

 
Konstantin Nikitin:

你还不如使用终端的全局变量。它们也不会被删除。

味道和味道...我不喜欢他们...

 
Vladimir Simakov:

对于味道和颜色...我不喜欢他们...

例如,我删除了VDS上的所有对象。只是那不必要的不加载时间表。而且那里也不需要他们。我使用globals。所以这一切都取决于情况。