KimIV的有用功能 - 页 10

 

谢谢你,KimIV!

 

DeleteOrders()函数。测试者版本。

函数DeleteOrders()旨在删除挂单BuyLimit, BuyStop, SellLimit 和 SellStop。DeleteOrders()函数是通用的,也就是说,它可以用来删除所有已经下达的挂单,以及符合使用函数参数设置的选择条件的特定订单。

sy- 仪器名称。由于只有当前的符号可以在测试器中进行交易,这个参数与测试器版本无关,只是为了与本功能的在线版本兼容而需要。在测试器中最好使用""或NULL的值。默认值""表示任何符号。
op
- 交易操作的类型,挂单的类型。五个值中有一个是可能的。-1,OP_BUYLIMIT,OP_BUYSTOP,OP_SELLLIMIT或OP_SELLSTOP。默认值-1表示任何订单。
mn
- MagicNumber,待定订单的识别号码。默认值-1-意味着任何魔力。

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 13.06.2007                                                      |
//| Описание : Удаление ордеров. Версия функции для тестов на истории.         |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//| sy - наименование инструмента   (NULL - текущий символ)                    |
//| op - операция                   ( -1  - любой ордер)                       |
//| mn - MagicNumber                ( -1  - любой магик)                       |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), ot;
 
  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot==OP_BUYLIMIT || ot==OP_BUYSTOP || ot==OP_SELLLIMIT || ot==OP_SELLSTOP) {
        if (OrderSymbol()==sy && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            OrderDelete(OrderTicket(), clDelete);
          }
        }
      }
    }
  }
}
 

DeleteOrders()函数。在线版本。


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 28.11.2006                                                      |
//| Описание : Удаление ордеров                                                |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента   ( ""  - любой символ,                    |
//|                                    NULL - текущий символ)                  |
//|   op - операция                   (  -1 - любой ордер)                     |
//|   mn - MagicNumber                (  -1 - любой магик)                     |
//+----------------------------------------------------------------------------+
void DeleteOrders(string sy="", int op=-1, int mn=-1) {
  bool fd;
  int err, i, it, k=OrdersTotal(), ot;
  
  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      ot=OrderType();
      if (ot>1 && ot<6) {
        if ((OrderSymbol()==sy || sy=="") && (op<0 || ot==op)) {
          if (mn<0 || OrderMagicNumber()==mn) {
            for (it=1; it<=NumberOfTry; it++) {
              if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
              while (!IsTradeAllowed()) Sleep(5000);
              fd=OrderDelete(OrderTicket(), clDelete);
              if (fd) {
                if (UseSound) PlaySound(NameFileSound); break;
              } else {
                err=GetLastError();
                Print("Error(",err,") delete order ",GetNameOP(ot),
                      ": ",ErrorDescription(err),", try ",it);
                Sleep(1000*5);
              }
            }
          }
        }
      }
    }
  }
}
 

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


1.删除所有订单。

DeleteOrders();
2.删除所有买入止损单。
DeleteOrders(NULL, OP_BUYSTOP);

3.删除所有带有魔法123456的订单。

DeleteOrders(NULL, -1, 123456);

ZY.在预告片中是一个有相同例子的工作脚本。

附加的文件:
 
KimIV:

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

按照这种速度,我们永远也到不了图书馆。我终究还是要去图书馆的。如果你邀请我。没有邀请,我是不会去的。
 
每个人都有向左转的权利...嘻...我将对这个问题进行一番探讨

Ilnar 在 "待定分形订单"的话题中问道,如何在分形上做待定订单?


我猜伊尔纳在分形价格水平方面遇到了一些困难。这就是为什么我建议使用我的函数。


//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                    |
//+----------------------------------------------------------------------------+
//| Версия   : 07.10.2006                                                      |
//| Описание : Поиск ближайшего фрактала.                                      |
//+----------------------------------------------------------------------------+
//| Параметры:                                                                 |
//|   sy - наименование инструмента     (NULL - текущий символ)                |
//|   tf - таймфрейм                    (  0  - текущий ТФ)                    |
//|   mode - тип фрактала               (MODE_LOWER|MODE_UPPER)                |
//+----------------------------------------------------------------------------+
double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
 
  for (s=2; s<100; s++) {
    f=iFractals(sy, tf, mode, s);
    if (f!=0) return(NormalizeDouble(f, d));
  }
  Print("FindNearFractal(): Фрактал не найден");
  return(0);
}
函数FindNearFractal()在给定的时间范围内,在指定的符号上搜索指定类型的最近的分形,并返回其价格水平。知道了分形位置的价格水平,就已经很容易在这个水平上设置一个订单。
 
KimIV:
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
问题...d 与0有什么关系??
 
kharko:
KimIV:
  int d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;
问题...d 与0有什么关系??
我不知道...在我的实践中,有一个案例是d=0。我不得不进行检查,使其等于零。从那时起,我就把这段代码拖到了我能去的任何地方。也许这是不必要的,但我认为太多总比太少好。
 
Vinin:
KimIV:

DeleteOrders()的使用实例。

照这样下去,我们永远也到不了图书馆了。我们终究还是得去图书馆。如果你邀请我。没有邀请,我是不会去的。

维特克,有什么问题吗?当然,很快就会来挖花园了......你可以帮助...

 
KimIV:
维宁
KimIV:

DeleteOrders()的使用实例。

照这样下去,我们永远也到不了图书馆了。我们终究还是得去图书馆。如果你邀请我。没有邀请,我是不会去的。

维特克,有什么问题吗?当然,很快就会来挖花园了......你可以帮助...

花园没有问题,虽然我的年龄不合适。也许我们可以找一个年轻的人来做这个工作。我们去浴场,吃点克瓦斯(你是过敏体质,我以前也是)。我们将看到年轻人如何工作。这不会是严重的。