KimIV的有用功能

 

在这个主题中,我将发布我在MQL4中的函数代码,给出它们的使用实例,并回答与它们的使用有关的问题。每项功能将在两个帖子中公布。第一篇文章将包含功能代码,第二篇--使用实例和简短解释。有时我会在第二篇文章中附上脚本的代码,以实际测试该功能并显示结果。

最后我将按照Lukyanov"如何同时运行两个EA"主题中的要求,从处理订单的功能开始。

首先是订单设置功能(MT4测试版)。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия  : 13.06.2007                                                      |
//|  Описание : Установка ордера. Версия функции для тестов на истории.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, datetime ex=0) {
  color clOpen;
  int   err, ticket;
 
  if (sy=="" || sy=="0") sy=Symbol();
  if (op==OP_BUYLIMIT || op==OP_BUYSTOP) clOpen=clOpenBuy; else clOpen=clOpenSell;
  ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, "", mn, ex, clOpen);
  if (ticket<0) {
    err=GetLastError();
    Print("Error(",err,") set ",GetNameOP(op),": ",ErrorDescription(err));
    Print("Ask=",Ask," Bid=",Bid," sy=",sy," ll=",ll,
          " pp=",pp," sl=",sl," tp=",tp," mn=",mn);
  }
}
//+----------------------------------------------------------------------------+
 
是否会有任何公布的真实交易的功能? P.S.: 谢谢你的话题。我认为这将是非常受欢迎和有需求的。
 
你好,伊戈尔!
我支持这个想法。正确的决定........!!!
你的代码是巨大的,问题经常出现,在其他人的帖子中和其他话题中涉及你是不好的。
 

很好。

对开发者的建议:开始形成一个函数库。在我看来,最好能向社区提出这方面的设计要求(例如,变量的 强制性描述、使用限制、每行的字符数等等)。关于这个问题的MQ文章将是一个好主意。

随着时间的推移,库中不仅会出现简单的功能,也会出现复杂的功能。

 
Lukyanov:
是否会有公布的真实交易功能?

是的,他们会...接下来将是在线交易的SetOrder()函数...


如何使用SetOrder()函数的例子。

1.设置一个0.1手的买入限价单,低于当前价格50点。

SetOrder(NULL, OP_BUYLIMIT, 0.1, Ask-50*Point);

2.设置一个买入止损单,手数为0.3,比当前价格高36点,止损为32点。

SetOrder(NULL, OP_BUYSTOP, 0.3, Ask+36*Point, Ask+(36-32)*Point);

3.以高于现价42点的价格下达0.2手的SellLimit订单,并有50点的回撤。

SetOrder(NULL, OP_SELLLIMIT, 0.2, Bid+42*Point, 0, Bid+(42-50)*Point);

4.按手数0.5在现价下方100点处下一个卖出止损单,止损30点,收回70点。

SetOrder(NULL, OP_SELLSTOP, 0.5, Bid-100*Point, Bid-(100-30)*Point, Bid-(100+70)*Point);

5.买入限价单,手数为0.1,比当前价格低50点,魔法号码为123456,两小时后到期

SetOrder(NULL, OP_BUYLIMIT, 0.1, Ask-50*Point, 0, 0, 123456, TimeCurrent()+2*60*60);
预告片是一个现实生活中的剧本,有上述例子。前四个例子被注释掉了。
附加的文件:
 
VBAG:
你好,伊戈尔!
我支持这个想法。正确的决定........!!!
你的代码是巨大的,问题经常出现,在其他人的帖子中和其他话题中涉及你是不好的。
好吧,在这里我们可以谈谈。提出你的问题,我很乐意回答你 :-)
 
显示你对贸易交易之间的延迟的版本
谢谢你。
 
感谢这个有用的话题,虽然我是关于烧饼的,但还是可能有人面对过以μl为单位的大数据集的储备和采样问题。微升和数据库?有没有人朝这个方向想过?
 
zhuki писал (а):
显示你的交易之间延迟的版本

我在交易之间不做任何拖延。也就是说,如果我需要下两个或更多的订单,我执行这些交易操作时,中间没有停顿。但在两次交易尝试之间,如果与服务器联系时出现错误,就必须重复进行,根据MT4开发人员的建议,我做了一个暂停。作为一个例子,你可以看到在我的在线交易的SetOrder() 函数中是如何实现这种暂停的。对于交易服务器返回的不同错误,会做出不同的暂停。

该函数SetOrder() 用于设置挂单。它被推荐用于在线交易的模拟和真实账户。

附加的文件:
 
很有创意,但请解释一下为什么会出现7.7、17、11秒的延迟。另外,如果有一个以上的专家顾问,那就需要分析。
 
zhuki:
...解释一下为什么会有7.7、17、11秒的延迟。这是一个笑话还是有道理的。

用真金白银能有什么样的笑话?

错误129(买入或卖出价格不正确),130(止损不正确),134(资金不足),136(无价格)将暂停7.7秒。在这种情况下,MT4开发者建议 暂停时间超过5秒。我把它设定为7.7秒。还不如把6.1秒。我不喜欢圆形的数值,因为它们很吸引人,所以我设置了非圆形的。

17秒的停顿应该是为了错误145(禁止修改)。但由于SetOrder 函数不处理修改,我删除了对这个错误的处理。谢谢你让我注意到我这一方面的功能。

11秒的停顿位于检查贸易子系统状态的循环内。你可以把它设置为15秒或30秒。你喜欢什么并不重要。

zhuki:
我还想知道,如果有一个以上的专家顾问,而你又不能不进行分析,该怎么办?

对于一个交易账户上的几个专家顾问,错误146(交易子系统繁忙)被处理。函数SetOrder 会等待,直到交易子系统有空。


警告!我 已经编辑了之前的帖子。对SetOrder 函数做了修改。

原因: