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

 

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

图书馆:专家

fxsaber, 2019.06.04 16:40

// MT4-советник показывает, в каком режиме Long/Short был запущен.

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

int GetLongShortFlag( const int Chart_ID = 0 )
{
  MqlParam Params[];
  string Names[];
  
  const int Res = EXPERT::Parameters(Chart_ID, Params, Names);
  
  return(((Res & 3) << 1) + (Res & 1));
}

string LongShortToString( const int Chart_ID = 0 )
{
  const int Flag = GetLongShortFlag(Chart_ID);
  string Str = NULL;
  
  if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY) && (bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Long & Short";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_LONGONLY))
    Str = "Only Long";
  else if ((bool)(Flag & SYMBOL_TRADE_MODE_SHORTONLY))
    Str = "Only Short";
    
  return(Str);
}

int OnInit()
{
  Alert(LongShortToString());
  
  return(INIT_FAILED);
}


替代方案

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

关于MQL4和MQL5的任何新手问题,关于算法和代码的帮助和讨论

fxsaber, 2019.06.04 19:40

string LongShortToString2()
{
  string Str = "Long & Short";

  if (OrderSend(_Symbol, OP_BUY, 1, 0, 0, 0, 0) && (GetLastError() == ERR_LONGS_NOT_ALLOWED))
    Str = "Only Short";
  else if (OrderSend(_Symbol, OP_SELL, 1, 0, 0, 0, 0) && (GetLastError() == ERR_SHORTS_NOT_ALLOWED))
    Str = "Only Long";
    
  return(Str);
}


这并不总是奏效,但更多时候这就足够了。

 
 

任务是以最小的努力从市场观察中保存所有刻度(没有损失)。

我写了一个加载器脚本,它为每个符号打开一个图表并在上面运行指标收集器。

整个诀窍是通过加载这样一个tpl-文件来运行指标(全文给出)。

<chart>
<window>
<indicator>
name=Custom Indicator
<expert>
name=HistoryTicks_OnlySave
</expert>
</indicator>
</window>
</chart>

这很好,因为没有酒吧。因此,没有在他们身上花费资源。

在一天结束时,有60张图表。同样数量的指标。每分钟写出~500Kb的ticks。

内存~450Mb,CPU~3-8%(8个超线程)。


如果你想做这样的事情,我强烈建议运行专家顾问,它可以跟踪市场观察中数据变化的频率。我的EA刷新时间不超过三秒,然后就被迫重新登录。问题是,MT4(也包括MT5)在网络问题的情况下,它可以在10-15秒后自行重新登录,有时甚至达到一分钟。只有这样,才会自己重新登录。为了不在这10-15秒甚至1分钟内丢失点数,我建议采取重新连接的任务。这同样适用于具有战斗力的TC的终端。

 
fxsaber:

挑战是以尽可能少的努力保存市场观察中的所有点数(没有损失)。

它是无损的吗?这个神话已经被破除。

 
Andrey Khatimlianskii:

没有损失,那么?我想这个神话已经被打破了。

我不记得我到底是如何说服自己的。我知道,我把MT4中收集的历史记录与经纪人的记录进行了比较。我得到了100%的匹配。

我使用QB的HistoryTicks解决方案。当我比较虚拟测试者在收集的点子上的结果和MT5测试者在下载的点子上的结果时--100%匹配。

问题只可能是由于连接问题。当然,专家顾问也会错过。指标则不然。

 
fxsaber:

我不记得我到底是如何说服自己的。我知道,我把MT4中收集的历史记录与经纪人的记录进行了比较。有一个100%的匹配。

我使用QB的HistoryTicks解决方案。当我比较虚拟测试器在收集的ticks上的结果和MT5测试器在下载的ticks上的结果 - 100%匹配。

问题只可能是由于连接问题。当然,专家顾问也会错过。指标则不然。

咳咳......我只是在说你的曝光。

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

错误、漏洞、问题

fxsaber, 2018.02.26 09:05

如果一包三个ticks来了,Calculate事件将被调用三次,但SymbolInfoTick将在这三次调用中的每一次返回最新的tick。也就是说,所谓的不通过指标的收集是值得怀疑的,说得不好听一点就是。


有什么变化吗?

 
Andrey Khatimlianskii:

咳咳......我只是在说你的曝光。

有什么变化吗?

当对CopyTicks进行摆弄时,有一个蜱收集和CopyTicks结果的比较。

我不太记得了,但我认为有一场比赛。

我们必须使用CustomTicksAdd来添加一批蜱虫,并查看它。但这是MT5。


对于MT4,可以这样检查。两个相邻的记录蜱虫应该总是不同的。而服务器上的条形图的数量 应该与收集到的条形图相吻合。

在2018年,我一定知道一些聪明的东西。现在不记得了。

 
fxsaber:

我不记得我到底是如何说服自己的。 我知道,我把MT4中收集的历史记录与经纪人的记录进行了比较。有一个100%的匹配。

我使用QB的HistoryTicks解决方案。当我比较虚拟测试器在收集的ticks上的结果和MT5测试器在下载的ticks上的结果 - 100%匹配。

问题只可能是由于连接问题。当然,专家顾问也会错过。指标则不然。

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

给一个顾问收集蜱虫历史

zenz, 2018.03.07 11:10

我早在9月份就做了比较。阿尔帕里档案馆有1周的出版延迟,所以如果我做目前的比较,在下周之前我不会得到它(我认为没有什么意义--我已经为自己想出了办法)。

所以这里有两张2017年9月22日的截图。终端在一台空的电脑上运行,只有写日志的指标。 操作系统XP SP3,终端版本MT4 build 1090。Alpari Pro-ECN真实账户。



左边是Alpari档案中的图片,右边是指标所记录的刻度线。

在这里,你可能会注意到,17秒之前和之后(16秒和18秒)的时间点完全重合,也就是说,在这种情况下,并没有出现时间不同步的情况。我再说一遍,不仅仅是在一秒钟内跳动的刻度--也就是说,不仅仅是快速的刻度--而且 "慢速 "的刻度也被吞噬。我还没有发现这里面有什么系统性。

解释:在Alpari的档案中,秒之后的右边不是英里或微秒,而是刻度数--这样做是有一定原因的。

以下是该主题的链接:https://www.mql5.com/ru/forum/229889/page4#comment_6741502 我不认为MT4有什么变化,虽然我没有再检查过,但我认为MT4的指标和EA都会错过刻度。

Дайте советник для сбора тиковой истории
Дайте советник для сбора тиковой истории
  • 2018.03.07
  • www.mql5.com
Дайте готовый советник для записи тиков в csv файл...
 
zenz:

以下是该主题的链接:https://www.mql5.com/ru/forum/229889/page4#comment_6741502。 我不认为MT4从那时起有什么变化,虽然我没有再检查,但我认为MT4的指标和EA都会错过点子。

不能肯定的是,在交易服务器方面,这些 "漏掉的 "标记被发送。

 
fxsaber:

不能肯定的是,在交易服务器方面,这些 "遗漏 "的标记被发送。

我也在思考这个问题,我同意。我当时只是在做研究,发现这些差异不是孤立的,而是反复出现的--所以我就把它放下了。