KimIV的有用功能 - 页 11 1...456789101112131415161718...128 新评论 Rustamzhan Salidzhanov 2008.04.06 11:41 #101 KimIV: 每个人都有向左转的权利...嘻...我将对这个问题进行一番探讨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()在给定的时间范围内,在指定的符号上搜索指定类型的最近的分形,并返回其价格水平。知道了分形的位置的价格水平,就已经很容易在该水平下单了。 该函数是否有可能返回两个值,例如,分形所处的酒吧的编号,或者我们应该连接另一个? Igor Kim 2008.04.06 15:45 #102 xrust писал (а): 该函数是否有可能返回两个值,例如也是分形所在的酒吧号码,或者我应该连接另一个? 为什么要返回两个值,而只有一个--酒吧号码--就足够了?为此,在声明中。return(NormalizeDouble(f, d)); 写出酒吧柜台的 价值,而不是价格水平。在输出中,你将得到分形条数。而你将根据分形的类型,用iHigh()或iLow() 函数之一获得价格水平。 Rustamzhan Salidzhanov 2008.04.06 16:05 #103 不,这里都很清楚,我基本上是在问。谢谢你,你的帖子很有帮助。 Igor Kim 2008.04.06 16:36 #104 xrust: 不,这很清楚,我基本上是在问。 啊...好吧,如果在原则上,你可以使用一个通过引用传递的数组。那么返回参数的数量将受到数组大小 的限制。 Igor Kim 2008.04.07 14:41 #105 函数ExistOrdersByLot()。 返回一个标志,表明存在一个具有指定手数的订单。True- 秩序存在(已设定),False- 秩序不存在(未设定)。你可以用函数参数限制要检查的订单列表。 sy- 仪器的名称。如果你设置了这个参数,函数将只检查指定工具的订单。NULL 表示当前的仪器,而""(默认)表示任何仪器。 op- 操作,待定订单的类型。有效值:OP_BUYLIMIT、OP_BUYSTOP、OP_SELLLIMIT、OP_SELLSTOP 或-1。默认值为-1 表示任何订单类型。 mn- 订单标识符(MagicNumber)。默认值为-1 意味着任何MagicNumber。 lo- 地段的大小,精确度为小数点后两位。默认值是0- 任何批次的大小。 //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 28.11.2006 | //| Описание : Возвращает флаг существования ордера по размеру лота. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любой ордер) | //| mn - MagicNumber (-1 - любой магик) | //| lo - лот ( 0 - любой лот) | //+----------------------------------------------------------------------------+ bool ExistOrdersByLot(string sy="", int op=-1, int mn=-1, double lo=0) { int i, k=OrdersTotal(), ot; lo=NormalizeDouble(lo, 2); if (sy=="0") sy=Symbol(); for (i=0; i<k; 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) { if (lo<=0 || NormalizeDouble(OrderLots(), 2)==lo) return(True); } } } } } return(False); } Igor Kim 2008.04.07 14:44 #106 如何使用ExistOrdersByLot()函数的例子。 检查任何手数为0.2的订单ExistOrdersByLot("", -1, -1, 0.2); 检查当前图表符号上手数为0.3的任何订单ExistOrdersByLot(NULL, -1, -1, 0.3); 检查任何符号是否有手数为0.5的买入限价单。ExistOrdersByLot("", OP_BUYLIMIT, -1, 0.5); 检查欧元兑美元是否存在手数为0.1和神奇数字123456的SellStop订单。ExistOrdersByLot("EURUSD", OP_SELLSTOP, 123456, 0.1); 检查是否存在任何手数为0.4的神奇数字987的USDJPY订单ExistOrdersByLot("USDJPY", -1, 987, 0.4); 像往常一样,附在后面的是一个带有上述例子的工作脚本。 附加的文件: test_existordersbylot.mq4 5 kb Igor Kim 2008.04.08 06:19 #107 GetLotLastOrder()函数。 返回最后下单的手数或-1。你可以用函数参数限制要检查的订单列表。 sy- 仪器的名称。如果给出这个参数,函数将只检查指定工具的订单。NULL 表示当前的仪器,""(默认)表示任何仪器。 op- 操作,待定订单的类型。有效值:OP_BUYLIMIT、OP_BUYSTOP、OP_SELLLIMIT、OP_SELLSTOP 或-1。默认值为-1 意味着任何顺序。 mn- 订单标识符(MagicNumber)。默认值-1 表示任何MagicNumber。 //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 28.11.2006 | //| Описание : Возвращает размер лота последнего выставленного ордера или -1 | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ double GetLotLastOrder(string sy="", int op=-1, int mn=-1) { datetime o; double l=-1; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()>1 && OrderType()<6) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (o<OrderOpenTime()) { o=OrderOpenTime(); l=OrderLots(); } } } } } } } return(l); } Igor Kim 2008.04.08 06:22 #108 如何使用GetLotLastOrder()的例子。 查找最后一个订单的批量大小GetLotLastOrder(); 查找在当前符号下的最后一笔订单的手数GetLotLastOrder(NULL); 查找任何符号的最后一个买入限价订单的手数大小GetLotLastOrder("", OP_BUYLIMIT); 在欧元兑美元上找到最后一个具有神奇数字123456的SellStop订单的手数。GetLotLastOrder("EURUSD", OP_SELLSTOP, 123456); 指定当前符号的最后一笔订单的手数,魔法号码为2345GetLotLastOrder(NULL, -1, 2345); 这里附上一个传统的工作脚本,其中有上述例子。 附加的文件: test_getlotlastorder.mq4 4 kb Igor Kim 2008.04.08 08:21 #109 GetOrderOpenPrice()函数。 返回最后打开的订单的设置价格或0。你可以用函数参数限制要检查的订单列表。 sy- 仪器的名称。如果给出这个参数,函数将只检查指定工具的订单。NULL 表示当前的仪器,""(默认)表示任何仪器。 op- 操作,待定订单的类型。有效值:OP_BUYLIMIT、OP_BUYSTOP、OP_SELLLIMIT、OP_SELLSTOP 或-1。默认值为-1 表示任何顺序。 mn- 订单标识符(MagicNumber)。默认值-1 表示任何MagicNumber。 //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 28.11.2006 | //| Описание : Возвращает цену установки последнего ордера или 0. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ double GetOrderOpenPrice(string sy="", int op=-1, int mn=-1) { datetime t; double r=0; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()>1 && OrderType()<6) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderOpenTime()) { t=OrderOpenTime(); r=OrderOpenPrice(); } } } } } } } return(r); } Igor Kim 2008.04.08 08:24 #110 如何使用GetOrderOpenPrice()的例子。 获取最后一次下单的开盘价GetOrderOpenPrice(); 查找在当前符号下的最后一笔订单的价格GetOrderOpenPrice(NULL); 查找任何符号的最后一个买入限价订单的设置价格GetOrderOpenPrice("", OP_BUYLIMIT); 找出最后一次在欧元兑美元上用魔法123456下的SellStop订单的价格。GetOrderOpenPrice("EURUSD", OP_SELLSTOP, 123456); 指定当前符号的最后一次用magic 2345下单的价格GetOrderOpenPrice(NULL, -1, 2345); 附上一个完美工作的脚本,其中有上述例子。 附加的文件: test_getorderopenprice.mq4 4 kb 1...456789101112131415161718...128 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
每个人都有向左转的权利...嘻...我将对这个问题进行一番探讨
Ilnar 在 "待定分形订单"的话题中问道,如何在分形上做待定订单?
我猜伊尔纳在分形价格水平方面遇到了一些困难。这就是为什么我建议使用我的函数。
函数FindNearFractal()在给定的时间范围内,在指定的符号上搜索指定类型的最近的分形,并返回其价格水平。知道了分形的位置的价格水平,就已经很容易在该水平下单了。
该函数是否有可能返回两个值,例如也是分形所在的酒吧号码,或者我应该连接另一个?
不,这很清楚,我基本上是在问。
函数ExistOrdersByLot()。
返回一个标志,表明存在一个具有指定手数的订单。True- 秩序存在(已设定),False- 秩序不存在(未设定)。你可以用函数参数限制要检查的订单列表。
如何使用ExistOrdersByLot()函数的例子。
像往常一样,附在后面的是一个带有上述例子的工作脚本。
GetLotLastOrder()函数。
返回最后下单的手数或-1。你可以用函数参数限制要检查的订单列表。
如何使用GetLotLastOrder()的例子。
这里附上一个传统的工作脚本,其中有上述例子。
GetOrderOpenPrice()函数。
返回最后打开的订单的设置价格或0。你可以用函数参数限制要检查的订单列表。
如何使用GetOrderOpenPrice()的例子。
附上一个完美工作的脚本,其中有上述例子。