[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 573

 
//+------------------------------------------------------------------+
//|                                                       iTicks.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"
#include <WinUser32.mqh>
extern int  delay_MSecond = 2000;
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
  {
//----
   while(!IsStopped()){
      PostMessageA (WindowHandle (Symbol(), Period()), WM_COMMAND, 33324, 0);
      PostMessageA (WindowHandle (Symbol(), 0), RegisterWindowMessageA ("MetaTrader4_Internal_Message"), 2, 1);
      Sleep(delay_MSecond);
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+
 

如何向策略测试员 进行查询?例如,如何执行以下命令。"在一个特定的时间范围内对一个EA运行测试,有一个特定的 文件,完成后, 保存报告"。

 
alsu:
要一下子理解别人的代码是很难的...如果让我猜,我会在Neuron.Study()函数中检查Imin,Imax,Jmin,Jmax值。在纪元0时,值32被传递为lR,然后用于索引(通常我们对数组的索引是从0到大小-1)。很可能这就是错误所在。

事实上,这个错误与这些计算有关。谢谢
 
alkador:

如何处理对策略测试员的查询?例如,如何执行以下命令。"以一定的时间间隔在EA上运行测试,有一定的设定 文件,完成后, 保存报告"。

启动时的配置

客户端可以用预定义的设置启动。为此,配置文件的名称作为一个参数传递给客户终端。

比如说。

  terminal.exe config\start.ini terminal.exe test1.txt terminal.exe "C:\Program Files\MetaTrader 4\config\settings25.ini"

如果没有指定完整的文件路径(Drive:\SubDirectory\FileName),文件将在客户终端目录中搜索。配置文件有以下几行。
[参数] = [值]。

注释以分号(;)开始,不进行评估。

配置文件的参数可以分为几组:一般设置、代理服务器设置(终端设置表中的 "服务器 "标签)、FTP设置(终端设置表中的 "发布 "标签)、专家顾问设置(终端设置表中的 "专家顾问 "标签)、专家顾问或脚本的单次启动设置、策略测试器启动设置。

常见设置

  • Profile- profiles目录下的子目录名称。图表将根据指定的配置文件在客户终端打开。如果不指定这个选项,将打开当前的配置文件。

  • MarketWatch- 文件的名称(\symbolsets目录),其中包含要在市场观察窗口显示的符号列表。这种文件可以通过"市场观察-符号集-另存为 "窗口的 上下文菜单命令来接收。

  • Login- 启动时要连接到的账户的号码。如果缺少这个参数,将使用当前的登录方式。

  • 密码- 登录的密码。如果客户终端在磁盘上存储个人数据,并且要连接的账号在列表中,则该参数将被忽略。

  • 服务器- 应该进行连接的贸易服务器的名称。服务器名称与存储在配置目录中的相应srv文件的名称一致。如果要连接的账户信息被保存在磁盘上,这个参数将被忽略。

  • AutoConfiguration- "true "或 "false",取决于是否应启用自动配置。如果缺少这个参数,将使用当前服务器设置中的值。

  • DataServer- 数据中心的地址。如果服务器自动配置被启用,这个条目可以被忽略。如果缺少这个参数,将使用当前服务器设置中的值。

  • EnableDDE- "true "或 "false",取决于是否要启用DDE服务器。如果没有这个参数,那么将使用当前服务器设置的值。

  • EnableNews- "true "或 "false",取决于是否应该允许接收新闻。如果这个参数不存在,将使用当前服务器设置中的值。

例子。

  ;常用设置 Profile=test 3 MarketWatch=set2.set Login=12345 Password=xxxxxx Server=MetaQuotes-demo AutoConfiguration=false DataServer=192.168.0.1:443 EnableDDE=true EnableNews=false

代理设置

  • ProxyEnable- "true "或 "false",取决于是否应使用代理服务器与交易服务器连接。

  • ProxyServer- 代理服务器的地址。

  • ProxyType- 代理服务器的类型。它可以是 "HTTP"、"SOCKS4 "或 "SOCKS5"。

  • ProxyLogin- 代理服务器登录。

  • ProxyPassword- 访问代理服务器的密码。

如果缺少这些参数中的任何一个,将使用客户终端的当前设置(客户终端设置表中的 "服务器 "选项卡中的 代理设置)。

例子。

  ;代理设置 ProxyEnable=true ProxyServer=proxy.company.com:3128 ProxyType=HTTP ProxyLogin=user45 ProxyPassword=xxx

FTP设置

  • FTPEnable- 启用/禁用发布。可接受的值是 "真 "或 "假"。

  • FTPPassiveMode- 启用/禁用无源模式。 可接受的值是 "真 "或 "假"。

  • FTPAccount- 其状态数据将被发送到FTP的账户号码。

  • FTPServer- FTP服务器的地址。

  • FTPLogin- 在FTP服务器上登录以获得授权。

  • FTPPassword- 访问FTP服务器的密码。

  • FTPPath- FTP服务器上放置报告的目录名称。

  • FTPPeriod- 发送报告到FTP服务器的周期,以分钟为单位。

如果缺少所列的任何一个参数,将使用客户终端的当前设置(终端设置表中的 "发布 "选项卡)。

例子。

  ; ftp设置 FTPEnable=true FTPPassiveMode=false FTPAccount=12345 FTPServer=ftp.company.com FTPLogin=admin FTPPassword=pAssWOrd123 FTPPath=/inetpub FTPPeriod=10

专家设置

  • ExpertsEnable- 启用/停用专家。

  • ExpertsDllImport- 启用/禁用DLL导入。

  • ExpertsDllConfirm- 启用/禁用DLL函数调用的手动确认。

  • ExpertsExpImport- 允许/禁止从外部专家顾问或MQL4库导入函数。

  • ExpertsTrades- 启用/停用EA交易。

  • ExpertsTradesConfirm- 启用/禁用专家顾问对交易操作的手动确认。

注意: 专家顾问组的所有参数只能取值 "真 "或 "假"。

如果没有上述任何参数,则使用当前的客户终端设置(终端设置表中的 "Expert Advisors "标签)。

例子。

  ;专家设置 ExpertsEnable=true ExpertsDllImport=true ExpertsExpImport=true ExpertsTrades=true ExpertsTradesConfirm=false

单一专家顾问和/或脚本设置

  • 符号- 符号的名称,其图表必须在终端启动后立即打开。关闭客户终端后,关于这个额外图表的信息不会被保存。如果终端在没有配置文件的情况下重新启动,这个图表将不会被打开。如果没有这个参数,就不会打开额外的图表。

  • 周期- 图表的周期(M1, M5, M15, M30, H1, H4, D1, W1, MN)。如果没有这个参数,则使用H1。

  • Template- 模板文件的名称(\templates目录),要应用到图表中。

  • 专家- 客户端启动后将启动的专家顾问的名称。专家顾问在根据符号和周期参数打开的图表上启动。如果缺少符号参数,则不会打开其他图表,EA将在当前配置文件中的第一个图表上启动。如果当前配置文件中没有图表,专家顾问将不会被启动。如果没有这个参数,将不会启动专家。

  • ExpertParameters- 包含EA参数的文件名(\experts\presets目录)。这样的文件可以通过按 "输入参数-保存 "按钮在专家顾问属性窗口中 创建。它通常用于存储参数,这些参数与默认参数不同。如果没有这个参数,将使用默认参数。

  • 脚本- 客户端启动后要启动的脚本的名称。该脚本的启动规则与专家顾问相同(如上所述)。

  • ScriptParameters- 包含脚本参数的文件名(\experts\presets目录)。这个文件的生成方式与专家顾问的生成方式相同。

例子。

  打开图表并运行专家和/或脚本 符号=EURUSD Period=H4 Template=popular.tpl Expert=MACD Sample ExpertParameters=macd.set Script=period_converter ScriptParameters=

策略测试器的启动设置

  • TestExpert- 要启动测试的专家顾问的名称。如果缺少这个参数,则不进行测试。

  • TestExpertParameters- 包含参数的文件名(\tester目录)。 这种文件可以在专家顾问的属性窗口中 按 "输入参数-保存 "按钮创建。 它通常用于存储不同于默认参数的参数。在 "测试 "和 "优化 "选项卡中 被测试的EA的其他参数(如果没有这个参数,则在 "输入参数 "选项卡中) 会在最后一次测试后自动保存在\tester\[专家名称].ini文件中的值。

  • TestSymbol- 工具的名称,专家顾问的测试将在其上进行。如果这个参数不可用,则使用测试仪中最后使用的值。

  • TestPeriod- 图表周期(M1, M5, M15, M30, H1, H4, D1, W1, MN)。 如果没有这个参数,则使用H1。

  • TestModel- 0,1或2,取决于测试模型(所有刻度,基准,公开价格)。如果该参数不可用,则使用值0(所有刻度线)。

  • TestOptimization- 启用/禁用优化。可接受的值是 "真 "或 "假"。如果该参数不可用,则使用值 "false"。

  • TestDateEnable- 启用/禁用 "使用日期 "选项。 可接受的值是 "真 "或 "假"。如果该选项不可用,则使用 "false"。

  • TestFromDate- 测试范围的起始日期为YYY.MM.DD。如果没有这个参数,则使用 "1970.01.01"。

  • TestToDate- 测试范围结束日期,格式为YYY.MM.DD。如果没有这个参数,它将是1970.01.01。

  • TestReport- 测试报告文件的名称。该文件将在客户终端目录下创建。可以指定相对路径,例如:tester/MovingAverageReport"。如果在报告文件名中没有指定扩展名,将使用".htm "扩展名。如果不指定这个参数,将不会生成测试报告。

  • TestReplaceReport- 允许/不允许重复写入报告文件。 可接受的值是 "真 "或 "假"。如果设置了 "false",并且该名称的报告文件已经存在,报告文件名称将被附加上方括号中的序列号。例如,"MovingAverageReport[1].htm"。如果没有这个参数,将使用 "false"。

  • TestShutdownTerminal- 在测试后启用/禁用终端关闭。可接受的值是 "真 "或 "假"。如果没有这个参数,则使用 "false "值。如果用户在测试过程中按下了 "停止 "按钮,这个参数的值就被重置为 "false",因为用户控制了。

例子。

  ;启动策略测试器 TestExpert=移动平均 TestExpertParameters=ma0.set TestSymbol=EURUSD TestPeriod=H1 TestModel=2 TestOptimization=false TestDateEnable=true TestFromDate=1970.01.01 TestToDate=2006.06.06 TestReport=MovingAverageReport TestReplaceReport=false TestShutdownTerminal=true

 
AndEv:
如果有人知道,我有个问题:我需要一个循环脚本,在当前图表中每0.5秒 "按 "一次 "刷新 "按钮,并重新初始化指标。"我试图用WindowRedraw()制作一个循环脚本。我试图用WindowRedraw()和Sleep(500)做一个循环脚本,但指标没有被重新初始化。
该库 包含MT4控制的各种功能。包括为专家顾问和指标更新图表的功能。甚至还有独立的功能。我运行了一次脚本,就这样了。它被卸载,图表继续更新,直到你卸载MT4。
 

改编自

Armen63 18.02.2012 14:47|

嗨,所有的 帮助,请 不知道如何实现它......谁能告诉我吗? 在这个过程中,你会发现,卖出和买入的订单 都是不一样的,Total1 = OrdersTotal()。

如果(Total1 <= MaxOrders || MaxOrders == 0),就可以控制所有的订单,包括卖出和买入

 

至Armen63

int CountBuys() 
{
   int l_count_4 = 0;
   int l_ord_total_12 = OrdersTotal();
   for (int l_pos_8 = 0; l_pos_8 < l_ord_total_12; l_pos_8++) {
      OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
      if (OrderType() == OP_BUY) l_count_4++;
   }
   return (l_count_4);
}

int CountSells() 
{
   int l_count_4 = 0;
   int l_ord_total_12 = OrdersTotal();
   for (int l_pos_8 = 0; l_pos_8 < l_ord_total_12; l_pos_8++) {
      OrderSelect(l_pos_8, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != Magic) continue;
      if (OrderType() == OP_SELL) l_count_4++;
   }
   return (l_count_4);
}
 

亲爱的论坛用户,你们好!

我刚刚开始学习mql4,并决定编写我自己的EA。

你知道如何在代码中写出以下条件:如果最后三个卖价高于前一个(ask3>ask2>ask1),那么就下一个买单

我希望我把想法说清楚了),如果有什么不对的地方,请问,我会说明的)

我将非常感谢您的帮助 ))

 
像这样。
datetime ask=TimeCurrent();
   double ask1=0,ask2=0,ask3=0;
   ask1=Ask;
   if(ask!=TimeCurrent()){ask2=Ask;ask=TimeCurrent()}
   if(ask!=TimeCurrent()){ask3=Ask;}
   
也许我错了,我只是在学习。
 
openlive:
例如,也许我错了,我只是在学习 。


如果我们假设EA处理每一个tick,那么我们的做法应该有点不同。

int start(){
   static double ask1=1, ask2=-1, ask3=-1;
   ask3=ask2;
   ask2=ask1;
   ask1=Ask;

   if (ask3>0) {
      if (ask1>ask2) {
         if (ask2>ask3) {
             //условие выполнено для бай
         }
      }
      if (ask1<ask2) {
         if (ask2<ask3) {
             //условие выполнено для селл
         }
      }
   }
}