KimIV的有用功能 - 页 20

 

GetTypeLastClosePos()函数。

该函数返回最后关闭位置的类型或-1。更准确地选择要考虑的位置是由外部参数定义的。

  • sy- 市场工具的名称。如果设置了这个参数,函数将只考虑指定仪器的位置。默认值"" 意味着任何市场工具。NULL 表示当前的仪器。
  • mn- 位置标识符,MagicNumber。默认值-1 表示任何标识符。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней закрытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTypeLastClosePos(string sy="", int mn=-1) {
  datetime t;
  int      i, k=OrdersHistoryTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderCloseTime()) {
            t=OrderCloseTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
}
附上一个测试GetTypeLastClosePos()函数的脚本。
附加的文件:
 

GetTypeLastOpenPos()函数。

该函数返回最后一次开仓的类型或-1。要考虑的位置的更精确选择是由外部参数指定的。

  • sy- 市场工具的名称。如果你设置这个参数,函数将只考虑指定仪器的位置。默认值"" 意味着任何市场工具。NULL 表示当前的仪器。
  • mn- 位置标识符,MagicNumber。默认值-1 表示任何标识符。
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает тип последней открытой позиции или -1               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int GetTypeLastOpenPos(string sy="", int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal(), r=-1;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (t<OrderOpenTime()) {
            t=OrderOpenTime();
            r=OrderType();
          }
        }
      }
    }
  }
  return(r);
}
附上一个测试GetTypeLastOpenPos()函数的脚本。
附加的文件:
 
KimIV:

OpenPosition()函数用于在线。

      if (err==128 || err==142 || err==143) {
        Sleep(1000*66.666);
        if (ExistPositions(sy, op, mn, ot)) {
          if (UseSound) PlaySound(NameFileSound); break;
        }
      

错误代码 142和143是什么意思。

谢谢你。

 
zennon:

错误代码142和143是什么意思?

142 - 该订单已被排队。

143 - 该订单已被交易商接受执行。

欲了解更多信息,请看这里。

 

医生建议将其作为错误处理 128

如果可能的话,从你的观点或立场出发,说一两句话......

 
kombat:

医生建议将其作为错误处理 128

如果可能的话,从你的观点或立场出发,说上一两句...

我的观点在Andrei上面两个帖子给出的代码中表达。

 

对不起...看到了,当然...

我觉得这有点不清楚。

Sleep(1000*66.666);

除此以外,我不知道...睡眠...

但如果和如果进一步,就不是那么回事了。

睡觉,然后如果 有一个位置,如果 我们玩一个行进。

-

好吧,如果这是个更蹩脚的问题,再次抱歉,可以 回答了。

 
kombat писал (а):
好吧,如果这是个更蹩脚的问题, 再次抱歉,我就不说了

不...让我们把它整理出来......... 一场对决加深了理解我只是不明白你不明白什么。用更简单和更常规的术语来表述这个问题。你是否对休眠间隔感到困惑?为什么正好是66秒?

 
KimIV:
为什么正好是66秒?

不,不是这个!这一点毫无疑问...绝对的!

但在这个片段中,进一步的逻辑顺序行动就不那么好了。

比方说,我们得到一个错误代码,我们睡觉,然后我们得到一个boolt,Spoin's Waltz播放,如果这个功能打开......

-

(该死的,信息尾巴都消失了,我不得不重复自己的观点:(()

-

更感兴趣的是如何继续已经开始的工作!

即进一步的交易姿态:要么功能会楚楚动人

要么功能会突突地响,直到它打开,要么它将控制权交给另一个功能......

在第一种情况下,不清楚如何 "循环",调用 "自身 "或如何?

 

嗯...我还是不明白。我将随机拍摄。以下所有内容将适用于错误128、142和143。

如果不以任何方式处理错误128,你有可能得到两个相同的开仓头寸,而不是一个。在两年的两个真实账户的交易中,我只遇到过一次这样的情况。重复头寸的发生是因为交易服务器由于某种原因,向终端返回了订单执行时间到期的信息。该终端没有被拒绝。该交易仍可能被执行。它的执行只是被推迟了 "不可接受的 "很长一段时间。如果你在这个消息之后发送另一个请求,延迟的请求和新的请求都可能被执行。为了避免这种情况,开发人员建议你至少暂停一分钟,检查交易服务器发送的请求是否被延迟。如果 "是",我们就达到了我们的目标--职位被打开,如果 "不是",我们可以重复请求。这就是我的代码如何处理错误128、142和143。