任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 185

 

下午好。

我需要EA在某一事件后退出。

我知道这是deinit() 函数,我需要以某种方式调用它这是教程中的一段话。

"当客户终端关闭时,当金融工具窗口关闭时,当改变金融工具和/或图表周期 前,当程序在MetaEditor中重新编译成功时,当改变输入参数时,当改变账户时,也会调用特殊函数deinit()来执行。"

所以我必须手动关闭终端,比如说,为了这个函数被调用?

我试着在一个条件触发时调用这个函数,它被执行了,但是一个新的刻度线来了,启动函数又开始了。

int deinit()
  {
  Alert("Закрываем программу"); 
   return(0);
  }

int start()
{
//код
..............
if (OrdersTotal()==0) deinit();
return(0);
}



我还如何终止该程序?

谢谢你。

 
GygaByte:

下午好。

我需要EA在某一事件后关闭。

我知道这是deinit() 函数,我需要以某种方式调用它这是教程中的一段话。

"当客户终端关闭时,当金融工具窗口关闭时,当改变金融工具和/或图表周期前,当程序在MetaEditor中重新编译成功时,当改变输入参数时,当改变账户时,特殊函数deinit()也被客户终端调用执行。"

所以我必须手动关闭终端,比如说,为了这个函数被调用?

我试着在一个条件触发时调用这个函数,它被执行了,但是一个新的刻度线来了,启动函数又开始了。

我还如何终止该程序?

谢谢你。

要以编程方式关闭终端,在代码的最开始插入start()函数之前。

//----
#import "user32.dll"
int GetParent(int hWnd);  // вызов API
#import
//----

在start()函数中,当你需要关闭终端时,调用ExitMT4(),你在start()函数外声明该函数

//+----------------------------------------------------------------------------+
void ExitMT4() {  // выгрузить MT4 из памяти

   int hwnd=WindowHandle(Symbol(),Period());
   int hwnd_parent=0;
//----
   while(!IsStopped()) {
      hwnd=GetParent(hwnd);
      if(hwnd==0) break;
      hwnd_parent=hwnd;
      }
   if(hwnd_parent!=0) PostMessageA(hwnd_parent,WM_CLOSE,0,0);
}
//+----------------------------------------------------------------------------+
 
artmedia70:

要以编程方式关闭终端,在代码的最开始插入start()函数之前。

在start()函数中,当你需要关闭终端时,调用ExitMT4(),你在start()函数之外声明该函数



非常感谢您的全面回答。

基本上,我只要终止EA就足够了,我不需要关闭终端。难道没有一个简单的方法吗?

我认为deinit()应该在某种程度上解决这个问题,但我一定是做错了什么......

 

我无法从Alpari Limited, build 509删除Terminal.exe。

当使用控制面板卸载时,出现 "你没有足够的权限卸载。联系你的系统管理员!"。

当使用Uninstall.exe时,显示 "服务器已返回链接"。

Alpari的技术支持无法说出任何可以理解的东西。 他们只是建议我删除整个文件夹,并在另一个目录下安装终端。

我的系统是Win 7,终极版。激活了管理员权限,我以管理员身份运行Uninstall.exe。

我将非常感谢对解决这一问题的任何帮助。

 
GygaByte:


非常感谢您的详细答复。

原则上,我只需终止该EA即可,不需要关闭终端。难道没有一个简单的方法吗?

我认为deinit()应该在某种程度上解决这个问题,但我一定是做错了什么......

不是deinit(),而是return(0)。
 
artmedia70:
不是deinit()而是return(0);


如果我没有弄错的话,return(0)将简单地终止当前函数start()并等待下一个tick,而我需要EA终止,就像我从图表中手动解锁一样

我在实践中检查了它,它一直在显示"0未结订单"警报,每一个刻度

我没有等到珍惜的 "再见"。

int start()
  {
  if (OrdersTotal()==0) 
   {
   Alert("Открытых ордеров - ", OrdersTotal());
   return(0);
   }  
  }
//+------------------------------------------------------------------+
int deinit()
  {
 Alert("Пока");  
   return(0);
  }
 
polycomp:

无法从Alpari Limited, build 509删除Terminal.exe。

当使用控制面板卸载时,出现 "你没有足够的权限卸载。联系你的系统管理员!"。

当使用Uninstall.exe时,显示 "服务器已返回链接"。

Alpari的技术支持无法说出任何可以理解的东西。 他们只是建议我删除整个文件夹,并在另一个目录下安装终端。

我的系统是Win 7,终极版。激活管理员权限,以管理员身份运行uninstall.exe。

如果有任何建议可以解决这个问题,我将非常感激。

一些恶意程序(mail.ru,我有过)重新分配了访问权限,因此具有管理员权限的你没有机会删除它们。

这个问题通过科学地捅破权限重新分配的方法得到了解决(点击文件夹、属性、安全、更改、添加、可选、对象类型、搜索.......)。

但后来我熟悉了 "Revo卸载程序",所有删除东西的麻烦都消失了,而且可以肯定的是,注册表中的活动被清理掉了。

 
GygaByte:


如果我没有弄错的话,return(0)将简单地完成当前函数start()并等待下一个tick。 我需要EA完成它的工作,就像我手动把它从图表中 分离出来一样。

我在实践中检查了一下--无休止的每一次打勾,都会发出"未结订单--0"的警告。

我没有等来珍惜的 "再见"。

你的愿望让人想起了 "跳棋 "的笑话。如果你想让EA停止交易,那么通过激活(全局)标志(在某些条件下),中断start()函数(通过返回退出)将得到预期结果。
 
ALXIMIKS:

一些恶意程序(我的mail.ru)重新分配了访问权限,并使具有管理员权限的你没有权限删除它们。

这个问题通过重新分配权限的科学方法得到了解决(PCM对文件夹、属性、安全、更改、添加、可选、对象类型、搜索.......)。

但后来我熟悉了 "Revo卸载程序",所有删除东西的麻烦都消失了,而且可以肯定的是,注册表已经从他们的活动中清除了。

非常感谢您!我将熟悉Revo卸载程序。
 
TarasBY:
你的愿望让人想起了 "绘图员 "的笑话。如果您希望顾问停止交易,那么通过激活(全局)标志(在某些条件下),中断函数start()(通过返回退出)将得到预期的结果。

这大致是它的样子。

bool GlobalFlag;
int init()
{
   GlobalFlag = true;
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
   if ( GlobalFlag )
      if (OrdersTotal() == 0) 
      {
         GlobalFlag = false;
         Alert("Открытых ордеров - ", OrdersTotal());
         Alert("Пока");  
      }  
   return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
   return(0);
}
//+------------------------------------------------------------------+