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

 
EVGENII SHELIPOV #:

各位程序员,你们好!!!!!

我将再次尝试提出我的问题,但我把它重新表述了一下。

在一个网格EA中,我们需要找到倒数第二个订单的票。我认为,最大订单票中的解决方案-1在策略测试器中不起作用,但在模拟和真实账户中可能是这样,很难看出原因。

我已经写好了确定倒数第二张订单票的函数的代码。这个逻辑如下:如果我们翻阅网格中所有未平仓的订单,我们将找到紧随其后的最大订单,它将是必要的订单票。

然而,我的编程水平还不够高,代码中存在一些错误。这个函数的结果是最小票数。这两个函数是最大票和倒数第二票。定义最大票数的函数工作起来没有问题。

请告知错误是什么。谢谢你。

这第二张图片显示,你不需要最大票数或最大开仓时间,但你需要为买入订单选择一个最低开仓价,为卖出订单选择一个最高开仓价。
 
Alexey Viktorov #:
这是第二张图片告诉你,你不是在寻找最大票数或最大开仓时间,但你需要选择买入订单的最小开仓价和卖出订单的最大开仓价。

阿列克谢 我有决定这些价格的功能,你能解释一下如何达到你要找的票吗?

 
Alexey Viktorov #:
第二个快照显示,你不需要最大票数或最大开仓时间,但买入订单的最低开仓价和卖出订单的最高开仓价。
//+----------------------------------------------------------------------------+
//| Определение цены открытия макс лота                                        |
//+----------------------------------------------------------------------------+
double PriceMaxOrder()
  {
   double max_price = 0 ;
   max_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > max_ticket)
                    {
                     max_ticket = OrderTicket();
                     max_price = OrderOpenPrice();
                    }
                 }
              }
           }
        }
     }
   return(max_price);
  }
 
EVGENII SHELIPOV #:

阿列克谢 我有决定这些价格的功能,你能解释一下如何达到你要找的票吗?

像这样。

//+------------------------------------------------------------------+
//| Расчет тикета нижнего ордера BUY в сетке                         |
//+------------------------------------------------------------------+
int GetTicketMaxOrder(int Magic)// int Magic вставлен только для компиляции без ошибок.
 {
  int total = OrdersTotal(),
      my_ticket = 0;
  double minPrice = DBL_MAX;
  for(int cnt = total; cnt-- > 0;)
   {
    if(OrderSelect(cnt, SELECT_BY_POS) && OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
     {
      if(OrderType() == OP_BUY)
       {
        if(OrderOpenPrice() < minPrice)
          my_ticket = OrderTicket();
       }
     }
   }
  return(my_ticket);
 }
/*****************************End program****************************/
 
Alexey Viktorov #:

像这样

阿列克谢!!但在进入函数的要点之前,我想澄清一下:这个函数是用来选择倒数第二个 订单的票吗?

 
EVGENII SHELIPOV #:

Alexey谢谢你!!但在进入函数的要点之前,我想澄清一下:这个函数是用来选择倒数第二个 订单的票吗?

不,它找到价格最低的BUY订单票。从现在开始,由我或马卡尔让我练习。

 
Alexey Viktorov #:

不,它找到价格最低的BUY订单票。从这里开始,就看你或马卡尔如何练习了。

第二天,我在你的公司里感到不足。我有计算最小/最大票数的功能,它们像卡拉什尼科夫的机器一样毫无问题地工作,我还没有问它们,但第二天它们就把我变成了一个发情的人!"。

//+----------------------------------------------------------------------------+
//| Расчет тикета максимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketMaxOrder()
  {
   max_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > max_ticket)
                     max_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(max_ticket);
  }
//+----------------------------------------------------------------------------+
//| Расчет тикета минимального ордера в сетке                                  |
//+----------------------------------------------------------------------------+
int GetTicketMinOrder()
  {
   min_ticket=INT_MAX;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() < min_ticket)
                     min_ticket = OrderTicket();

                 }
              }
           }
        }
     }
   return(min_ticket);
  }

好吧,无论如何,谢谢你的提醒

 
EVGENII SHELIPOV #:

是的,阿列克谢,我觉得第二天在你中间的人不太合适。计算最低/最高票价的功能工作顺利,因为卡拉什尼科夫的机器我没有向任何人询问他们,但第二天我被打开了一个障碍!!。

好吧,无论如何,谢谢你的提示。

这张照片不就是

关于交易、自动交易系统和测试交易策略的论坛

新手对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论

evgenii shelipov, 2021.11.07 06:43

各位程序员,你们好!!!!!

我将再次尝试提出我的问题,但要稍微改一下说法。

在一个网格EA中,我需要找到倒数第二个订单的票。最大订单的解决方案-1在策略测试器中不起作用,也许,但在模拟或真实账户中不起作用,我附上一张图片,就会明白原因。

我已经写好了确定倒数第二张订单票的函数的代码。这个逻辑如下:如果我们翻阅网格中所有未平仓的订单,我们将找到紧随其后的最大订单,它将是必要的订单票。

然而,我的编程水平还不够高,代码中存在一些错误。这个函数的结果是最小票数。这两个函数是最大票和倒数第二票。定义最大票数的函数工作起来没有问题。

//+----------------------------------------------------------------------------+
//| Расчет тикета предпоследнего ордера в сетке                                |
//+----------------------------------------------------------------------------+
int GetTicketPenultimateOrder()
  {
   penultimate_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > penultimate_ticket && penultimate_ticket != GetTicketMaxOrder())
                     penultimate_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(penultimate_ticket);
  }
//+----------------------------------------------------------------------------+
//| Расчет тикета максимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
int GetTicketMaxOrder()
  {
   max_ticket = 0;
     {
      for(int cnt = OrdersTotal() - 1; cnt >= 0; cnt--)
        {
         if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
           {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
              {
               if(OrderType() == OP_BUY || OrderType() == OP_SELL)
                 {
                  if(OrderTicket() > max_ticket)
                     max_ticket = OrderTicket();
                 }
              }
           }
        }
     }
   return(max_ticket);
  }

请告知错误是什么。谢谢你。


箭头显示的是最高票价吗?我看到这里的箭头指向了第二低的订单价格。有什么问题吗?
 
Alexey Viktorov #:

这张照片是


箭头显示的是最高票价?我看到这里的箭头指向了第二低的订单价格。有什么问题吗?

阿列克谢,你能放大图片吗?

 
EVGENII SHELIPOV #:

阿列克谢,你能放大图片吗?

这就是预测 的顺序