新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 558

 

就是这样,我发现了我的错误。有些人需要说出他们的问题,以便后来明白他们是如何搞错的。

不幸的是,很显然,我就是这些人物之一。(((

 
Konstantin Nikitin:

订单发送
顺序选择

我想你指的是票号?

有什么隐患吗?

 
Decromor:

问候!


一个订单可以通过其编号使用OrderSelect命令进行访问。

问题是,是否有可能提前知道现有订单的数量,从而不至于把它们都过一遍?例如,我们可以在开立新订单时记住这个数字。

我知道这个号码是按顺序从1开始分配的。可能的细微差别是什么?

事先谢谢你。

  1. 我们可以通过它在订单列表中的索引(当在循环中尝试它时),或通过它的票据(如果它是事先知道的)来处理这个订单。
  2. 不可取 - 在任何故障的情况下(重新启动专家顾问,重新启动终端,系统故障,等等),记忆的票据可能会丢失。因此,它们必须存储在终端的全局变量 中,或者存储在一个文件中,这是可行的,但比通常的搜索更困难,因为搜索不是在每次勾选时进行,而是在需要时才进行。
  3. 不,从1号开始,按升序排列--只在测试器中。
  4. 不客气。
 
Artyom Trishkin:
  1. 你可以通过它在订单列表中的索引(在循环中搜索时),或通过它的票据(如果事先知道)来引用它。
  2. 不可取 - 如果发生任何故障(重新启动EA、重新启动终端、系统故障等),记忆中的票据可能会丢失。因此,它们必须存储在终端的全局变量 中,或者存储在一个文件中,这是可行的,但比通常的搜索更困难,因为搜索不是在每次勾选时进行,而是在需要时才进行。
  3. 不,从1号开始,按升序排列--只在测试器中。
  4. 请。

是否可以在代码OnInit()中循环运行OrdersTotal()并收集所有未结订单的信息,特别是OrderTicket()?

string orders[][3];

int OnInit() {
   for (int n = OrdersTotal() + 1; n >= 0; n--) {              
      if (OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) {
         int i = (ArraySize(orders) / 3);
         ArrayResize(orders, i + 1);
         orders[i][0] = IntegerToString(OrderTicket());
         orders[i][1] = IntegerToString(OrderType());
         orders[i][2] = DoubleToString(OrderOpenPrice(), Digits);   
      } 
   }
   return(INIT_SUCCEEDED);
}


当一个订单被TP或SP自动关闭时,是否可以获得这个订单的数据?

 
Decromor:

是否可以在OnInit()体中运行程序,在OrdersTotal()循环中收集所有未结订单的信息,特别是OrderTicket()?


当一个订单被TP或SP自动关闭时,是否可以获得这个订单的数据?

  1. 是的,我们可以。然后呢?订单可能会随着时间的推移而改变,初始化时收集的信息已经过时。
  2. 我们必须找到最后一个关闭的订单,并获得有关它的所有必要信息。
 
Artyom Trishkin:
  1. 你可以。然后呢?订单可能会随着时间的推移而改变,在初始化过程中收集的有关信息将变得过时。
  2. 需要找到最后一个关闭的订单,并获得所有需要的信息。

在买入、卖出过程中,我将所需的数据保存到一个数组中,然后我滚动这个数组,并根据价格做出所需的改变(将SL转移到Breakeven,在反向后关闭订单,等等),通过票据处理到所需的订单。

但我有带TP和SL的订单,可能在我不知情的情况下关闭。我不喜欢在每一个刻度 上查找最后一个关闭的订单,并在我的数组中搜索它来纠正它。

"订单可能会随着时间的推移而改变,在初始化过程中收集的信息将变得过时。" 我想这就是所谓的--关闭订单?

我看到的唯一选择是在一个tick中循环2次,我的是订单和OrdersTotal() 也不喜欢这样

"但比通常的枚举更复杂,它不是在每次勾选时进行,而是只在需要时进行。" 请分享这一算法。

 
Decromor:

是否可以在OnInit()体中运行程序,在OrdersTotal()循环中收集所有未结订单的信息,特别是OrderTicket()?


当一个订单被TP或SP自动关闭时,是否可以获得这个订单的数据?

而我们为什么要把这些都转换为字符串呢?字符串类型

 
Decromor:

是否可以在OnInit()体中运行程序,在OrdersTotal()循环中收集所有未结订单的信息,特别是OrderTicket()?


当一个订单被TP或SP自动关闭时,是否可以获得这个订单的数据?

struct SOrders
{
     int ticket,
         type;
     double price;
} orders[];

int OnInit() {
   for (int n = 0; n < OrdersTotal(); n++)
   {              
      if(!OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) continue;
      int i = ArraySize(orders);
      if(ArrayResize(orders, i+1) < i+1) continue;
      orders[i].ticket = OrderTicket();
      orders[i].type   = OrderType();
      orders[i].price  = OrderOpenPrice();
   }
   return(INIT_SUCCEEDED);
}
 
Konstantin Nikitin:
非常感谢你提供的信息,这对我来说是新的。
 
Alexey Viktorov:

为什么要把这些都翻译成字符串?字符串类型

因为,比如说,一张票的类型是Int,价格是Double,而一个数组只能是一种类型。
原因: