程序库: Expert - 页 8

 
Stanislav Korotky:

我还是不明白,为什么 Expert.mqh.tpl 这个常量名称比以产生它们的程序命名的模板更 "实用"(实际吗?比方说,有一个程序 A.mq5 和 B.mq5 使用 bibla。如果它们生成的模板都有自己的名字,那就更实用了:首先,每个程序都有自己最后的 "动作指纹",而不是一个程序覆盖另一个程序。其次,你可以通过名称立即看出生成者是谁(如果是外国程序,尤其有用)。现在,在进入 Expert.mqh.tpl 文件之前,您无法从文件中看出这一点。我给出的通用解决方案是使用 MQL-programme 的名称+时间戳+随机。我认为没有必要将文件保留为 sync=true。我认为一切都早已经过测试和调试。如果出现错误或需要调试,可以选择 sync=false。这样就可以保留文件。我认为一切都合乎逻辑。编辑也很简单。

我同意,在实践中碰撞可能很少发生,除非有人在多个程序中并行使用 biblio。我没有这本书,但我刚才快速查看了一下代码,我的目光被文件文件夹中的 Expert.mqh.tpl 吸引住了。一切纯属个人意见。

我不想删除文件,所以考虑到实际工作的可靠性,我认为一个通用名称就足够了。

我不想在 Files 文件夹里看到一堆 tpl 文件。要故意删除某些东西--类似。我只删除了这里

Возможность вызова DLL в Маркет-продуктах.
Возможность вызова DLL в Маркет-продуктах.
  • 2019.07.20
  • www.mql5.com
Возможно написание EX5 с вызовом DLL, который пройдет все проверки Маркета и будет там опубликован.В прицепе такой EX5-скрипт. Он запускает указанные приложения/документы.В прицепе еще один вариант
 
Vitaly Muzichenko:

如何将 .ex4 格式的智能交易系统连接到不同名称的智能交易系统中运行,而且必须显示输入参数,即能够完全使用它。

我们有一个已编译的 Expert Advisor,名称为 "Trade.ex4"。

创建一个新的智能交易系统,名称为 "Hand.ex4"。

如何将它们结合起来,以便在启动 "Hand.ex4 "时,"Trade.ex4 "将完全正常工作,而 "Trade.ex4 "将嵌入到 "Hand.ex4 "中。

也就是说,我们的机器上只有 Hand.ex4 文件,但在工作中使用 Trade.ex4

谢谢!

找到解决方案了吗?

 
Vitaly Muzichenko:

如何将其结合起来,以便在启动 "Hand.ex4 "时,"Trade.ex4 "将充分发挥作用,而 "Trade.ex4 "将嵌入到 "Hand.ex4 "中?

也就是说,我们的机器上只有 Hand.ex4 文件,但我们在工作中使用 Trade.ex4

它应该与指标一起工作。专家顾问似乎无法与其他专家顾问缝合。

 
fxsaber:

它应该与指标一起工作。专家顾问似乎无法缝合到其他专家顾问中。

是的,专家顾问无法嵌入,没有找到解决方案

 
谢谢你们!
 
Vitaly Muzichenko:

是的,辅导员无法缝合,找不到解决办法

很可能有解决办法,而且我好像在这里的 一个变体中用过一次。但我已经完全忘记是怎么做的了。

Возможность вызова DLL в Маркет-продуктах.
Возможность вызова DLL в Маркет-продуктах.
  • 2019.07.20
  • www.mql5.com
Возможно написание EX5 с вызовом DLL, который пройдет все проверки Маркета и будет там опубликован.В прицепе такой EX5-скрипт. Он запускает указанные приложения/документы.В прицепе еще один вариант
 
fxsaber:

也许有一个解决办法,我似乎在这里的 一个变体中用过一次。但我已经忘了我是怎么做的了。

我在这里试了一下,没有找到一个办法。那是针对 4 的,我还没在 5 上试过。

 

交易、自动交易系统和交易策略测试论坛

mql5 语言的特殊性、微妙之处和工作技巧

fxsaber, 2020.05.21 09:13

#include <fxsaber\Expert.mqh> //https://www.mql5.com/zh/code/19003

// 如果账户更改后没有符号,则自动卸载。
void OnDeinit( const int Reason )
{
  if (Reason == REASON_ACCOUNT)
  {
    MqlTick Tick;
    
    if (!SymbolInfoInteger(_Symbol, SYMBOL_CUSTOM) && !SymbolInfoTick(_Symbol, Tick))
    {
      Alert("Account is changed!");
      
      if (EXPERT::Remove())
        Alert("Expert is removed!");
      
      // ExpertRemove(); // 没用的。
      // ChartClose(); // 并非最佳解决方案。
    }
// 否则
      // 对于自定义和其他情况,请使用以下解决方案来增强代码。
      //https://www.mql5.com/ru/forum/170952/page175#comment_16365819 
  }  
}
 
fxsaber:
很酷的库!我还没想到用这种方式来实现 EA 打开。您能告诉我如何在不使用 dll 的情况下使用 mql 定义活动图表吗?我在 winapi 上做了一些工作,但结果发现太麻烦了:
long                          Agent::ChartGetActiveID()
  {
   static long                terminal_wnd = ChartGetInteger(0,CHART_IS_DOCKED) ?
                              GetAncestor(ChartGetInteger(0, CHART_WINDOW_HANDLE), 2) :
                              GetParent(GetAncestor(ChartGetInteger(0, CHART_WINDOW_HANDLE), 2));

   static uint                process_id = 0;
   static uint                thread_id = GetWindowThreadProcessId(terminal_wnd, process_id);
   static long                mdi_wnd = GetDlgItem(terminal_wnd, 0xE900);
   static GUITHREADINFO       thread_info;


   thread_info.cbSize = sizeof(GUITHREADINFO);
   if(!GetGUIThreadInfo(thread_id, thread_info))
      return -1;

   long wnd_on_focus = 0, chart_id = -1;
   if(GetDlgItem(thread_info.hwndActive, 0xE900)== mdi_wnd)
      wnd_on_focus = GetWindow(SendMessageW(mdi_wnd, 0x0229, 0, 0), 5);
   else
      wnd_on_focus = GetWindow(thread_info.hwndActive, 5);

   for(long ch_id = ChartFirst(); ch_id != -1; ch_id = ChartNext(ch_id))
      if(ChartGetInteger(ch_id, CHART_WINDOW_HANDLE)==wnd_on_focus)
        {
         chart_id = ch_id;
         break;
        }
   return chart_id;
  }

也许您知道如何在 mql 上实现这种情况,或者至少使用 dll,但更简单?

 
vek_y4icb:
如何在不使用 dll 的情况下使用 mql 工具定义活动图表。

我记不清楚了。我想这个问题已经解决了。也许搜索一下会有帮助。