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

 
历史选择。

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

MT5和速度在行动

fxsaber, 2020.09.02 00:32

如果有人试图使用from-input参数不匹配的共享库,你会得到缓慢的结果。


另一个HistorySelect。

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

MT5和速度在行动

fxsaber, 2020.09.02 00:52

HistoryDealSelect和HistoryOrderSelect必然应该这样写。

  static bool HistorySelectOrder( const ulong Ticket )
  {
    return((::HistoryOrderGetInteger(Ticket, ORDER_TICKET) == Ticket) || ::HistoryOrderSelect(Ticket));
  }

  static bool HistorySelectDeal( const ulong &Ticket )
  {
    return((::HistoryDealGetInteger(Ticket, DEAL_TICKET) == Ticket) || ::HistoryDealSelect(Ticket));
  }

否则,你肯定会遇到缓慢的情况。

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

MT5和速度在行动

Renat Fatkhullin, 2020.09.02 00:40

当你与巨大的交易量打交道时(你在历史上展示了数千和数万的交易是有原因的),需要原子/快照访问,你需要了解它们的成本。

 
如果EA在OnInit中有MessageBox,有很多事情可以做,以解决重新记录的潜在问题。
 
明智的做法是尽量减少对内部函数的调用,以减少遇到其不经常的滞后的可能性。
 

赢不了

2020.04.01 11:49:34 在1.09539的价位即时卖出0.32欧元兑美元失败 [无效成交量] 。

我对市场上的总成交量限制进行了检查。

我不知道为什么我得到这样的错误

在市场验证器中
 
Vladimir Pastushak:

赢不了

2020.04.01 11:49:34 在1.09539的价位即时卖出0.32欧元兑美元失败 [无效成交量] 。

我对市场上的总成交量限制进行了检查。

我不明白为什么我得到这样的错误。

在市场验证器中

你不能打出订单限额?我认为是这样的。

 
Edgar Akhmadeev:

你会不会遇到权证的限制?我想我做到了。

它说的是错误的数量,资金的可用性被检查,超过手数限制也被检查。继续挖掘...

 
Vladimir Pastushak:

它没有说正确的数量。

Edgar Akhmadeev:

我似乎已经拥有了它。

......小量没有以大额存款开盘。我不记得细节了,但美分上的一个经纪商对该工具的订单限制非常小。

 

在MT5中存在以下问题。我需要在可视化模式下测试策略测试器中交易面板的操作。交易面板有输入字段(OBJ_EDIT)。当你改变输入字段中的文字并按下ENTER时,新的文字不会出现,而是出现创建输入字段时设置的原始文字。也就是说,在面板的视觉测试 过程中,不可能改变输入栏中的文字。

如何才能解决这个问题?

示例代码。

void OnTick()
  {
   string name="EDIT";
   if(ObjectFind(0,name)==-1)
     {
      ObjectCreate(0,name,OBJ_EDIT,0,0,0);
      ObjectSetString(0,name,OBJPROP_TEXT,"EURUSD");
      ObjectSetInteger(0,name,OBJPROP_XDISTANCE,50);
      ObjectSetInteger(0,name,OBJPROP_YDISTANCE,50);
      ObjectSetInteger(0,name,OBJPROP_XSIZE,50);
      ObjectSetInteger(0,name,OBJPROP_YSIZE,20);
      ObjectSetInteger(0,name,OBJPROP_READONLY,false);
      ObjectSetInteger(0,name,OBJPROP_COLOR,clrBlack);
      ObjectSetInteger(0,name,OBJPROP_BGCOLOR,clrWhite);
     }
  }
 

我创建了这个自动热键脚本来隐藏编码时的标题栏。它适用于Windows上的所有窗口。我不清楚其他平台的情况。



; 
Hide borders, title bar 









#IfWinNotActive ahk_class Progman 









#IfWinNotActive ahk_class Shell_TrayWnd 









^] :: 









WinGet Style, Style, A 









if (Style & 0xC40000) { 









WinSet, Style, -0xC40000, A 









WinMaximize, A 













} 









else { 









WinSet, Style, + 0xC40000, A 









WinRestore, A 









} 









return 

其结果,是一个完美填充的桌面屏幕。

只要将文件保存为file_name.ahk即可。将其保存在你的首选目录中,然后下载并安装 https://www.autohotkey.com。

创建一个脚本的快捷方式,并将其剪切。按win + r

输入shell: startup并在弹出的窗口中粘贴快捷方式。

这样一来,脚本在重启后就会以windows启动。现在要启动脚本,请双击它,然后你可以用ctrl +] 隐藏窗口标题栏。

确保在使用该快捷方式时,窗口没有被最大化。最大化的窗口没有意义,我也没有为这种情况处理。

享受

编辑。

代码格式器的行为很奇怪。它不断将代码扩展到巨大的行距。Lol!

AutoHotkey
  • www.autohotkey.com
AutoHotkey provides a simple, flexible syntax allowing you to focus more on the task at hand rather than every single little technicality. It supports not only the popular imperative-procedural paradigm, but also...
附加的文件:
 

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

图书馆:标杆

fxsaber, 2020.10.01 23:49

// Возвращает true в некоторых ситуациях, когда чарт не виден.
bool IsInvisible( long chartID = 0 )
{
  bool Res = ::ChartGetInteger(chartID, CHART_IS_MINIMIZED);
  
  if (!Res && !::ChartGetInteger(chartID, CHART_IS_MAXIMIZED) && ::ChartGetInteger(chartID, CHART_IS_DOCKED))
  {
    if (!chartID)
      chartID = ::ChartID();

    for (long Chart = ::ChartFirst(); (Chart != -1) && !Res; Chart = ::ChartNext(Chart))
      Res = (Chart != chartID) && ::ChartGetInteger(Chart, CHART_IS_MAXIMIZED);
  }
  
  return(Res);
}

如果返回true,交易面板和图表上的其他信息不会更新。