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

 
yaaarik777:
我只是在学习,我正在尝试使用指南,但我意识到我得到了一些废话,我想看看如何做的例子。
阅读这篇文章,它将是有用的https://www.mql5.com/ru/articles/1399
События в МetaТrader 4
События в МetaТrader 4
  • 2006.05.29
  • Andrey Khatimlianskii
  • www.mql5.com
Статья посвящена программному отслеживанию событий в терминале МetaТrader 4, таких как открытие, закрытие и модификация ордеров, и рассчитана на пользователя, обладающего базовыми навыками работы с терминалом и программирования на MQL 4.
 
yaaarik777:

大家好!请您告知如何在EA中设置订单删除?

情况是这样的。

我们在不同的方向放置2个挂单,只要其中一个触发,另一个就会被删除,不再展示。

如果有任何帮助,我将非常感激。

谢谢你。

类似这样的事情

   for(int pos=OrdersTotal()-1,ticket=0,trade=0;pos!=-1;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderType()>1)//Если найденный ордер отложенный
        {
         ticket=OrderTicket();//Запомним его тикет
        }
      else//Если ордер не отложенный
        {
         trade=1;//Запомним,что есть открытая позиция
        }
      if(ticket!=0 && trade==1)//И если известен отложенный и открыта позиция
        {
         int OD=OrderDelete(ticket);//Удаляем отложенный
        }
     }
 
Nikolay Gaylis:
"让我们继续寻找 "需要被删除!
你可以在论坛上编辑你自己的帖子。你在上面分别写的东西都可以装进一个帖子里。
 
Vitalie Postolache:
你可以在论坛上编辑你自己的帖子。你在上面分别写的东西都可以装进一个帖子里。
谢谢你!
 

你好!引入了一个使用以下算法的takeprofit拖网。

if(total>0)
{for (int i=OrdersTotal()-1; i>=0; i--)
如果(OrderSelect(i,SELECT_BY_POS)==true)
{
如果(OrderMagicNumber()==magic && OrderSymbol()==asset)& OrderType()==OP_BUY)
{
RefreshRates();
如果(TimeCurrent()>OrderOpenTime() && TimeCurrent() <=(OrderOpenTime()+3600))
{
takeprofit condition;
命令修改为新的利润;
}
}
}
}

但是,由于某些原因,时间限制不起作用,如果一个头寸没有在当前时间段内平仓,那么在满足条件的情况下,它也会在下一个时间段内进行拖拽。

我的最后一个if()有什么问题?

 
владимир:

你好!我已经介绍了一个使用以下算法的takeprofit拖网。

if(total>0)
{for (int i=OrdersTotal()-1; i>=0; i--)
如果(OrderSelect(i,SELECT_BY_POS)==true)
{
如果(OrderMagicNumber()==magic && OrderSymbol()==asset && OrderType()==OP_BUY)
{
RefreshRates()。
如果(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=(OrderOpenTime()+3600))
{
后面的tp条件。
{修改订单到新的takeprofit。
}
}
}
}

但由于某些原因,时间限制不起作用,如果在当前时间段内没有平仓,那么在下一个时间段内也会跟踪,如果条件得到满足。

我的最后一个if()有什么问题?

嗯,我不知道,我还没有看到那里有什么问题。我已经删除了对订单数量 的多余检查(它已经存在于循环条件中),并为两种类型的头寸(买入和卖出)添加了检查。

//+------------------------------------------------------------------+
for(int i=OrdersTotal()-1; i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS)) {
      if(OrderType()>OP_SELL) continue;
      if(OrderMagicNumber()==magic && OrderSymbol()==asset) {
         if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=OrderOpenTime()+PeriodSeconds(PERIOD_H1)) {
            // УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
            // МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
            }
         }
      }
   }
//+------------------------------------------------------------------+

在//拖网和修改条件的地方,插入Print()与时间变量的值,看看日志怎么说。

 
Artyom Trishkin:

我不知道,我看了一眼还没看出有什么问题。我删除了对订单数量 的不必要的检查(在周期条件中已经存在),并增加了对两种类型的头寸(买入和卖出)的检查。

//+------------------------------------------------------------------+
for(int i=OrdersTotal()-1; i>=0; i--) {
   if(OrderSelect(i,SELECT_BY_POS)) {
      if(OrderType()>OP_SELL) continue;
      if(OrderMagicNumber()==magic && OrderSymbol()==asset) {
         if(TimeCurrent()>OrderOpenTime() && TimeCurrent()<=OrderOpenTime()+PeriodSeconds(PERIOD_H1)) {
            // УСЛОВИЕ ТРАЛА ТЭЙКПРОФИТА;
            // МОДИФИКАЦИЯ ОРДЕРА НА НОВЫЙ ТЭЙКПРОФИТ;
            }
         }
      }
   }
//+------------------------------------------------------------------+

在//拖网和修改条件下,插入Print()与时间变量的值,看看日志怎么说。

我对卖出有不同的条件,所以我只显示了买入。

"用时间变量" - 你是指TimeCurrent()吗?如果这让你感到惊讶,我很抱歉--我在编程方面是个零分者。

我不明白这一点 -OrderType()>OP_SELL。为什么>? 订单类型OP_SELL 的值=1,OP_BUY= 0。谢谢你。

 
владимир:

我对SELL有不同的拖网条件,所以我只显示BAI。

"用时间变量值" - 你是指TimeCurrent()吗?如果这让你感到惊讶,我很抱歉--我在编程方面是个零分者。

我不明白这一点 -OrderType()>OP_SELL。为什么>? 订单类型OP_SELL 的值=1,OP_BUY= 0。谢谢你。

如果类型大于1,则进入循环的下一个迭代。
 

问候。请你告诉我,为什么在以下条目的情况下

如果(x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}。

如果(z!=minpr1){z=minpr1;OrderDelete(ticketUP);}。

系统不断产生错误

: OrderDelete函数 的无效票据

: OrderDelete错误4051

根据参考书,它是

函数参数的无效值

虽然参数似乎是一样的。

尽管如果你去掉这个条件,只留下

OrderDelete(ticketD)。

OrderDelete(ticketUP)。

它成功地删除了(但我需要按条件删除)。我做错了什么?

 
spoiltboy:

问候。请你告诉我,为什么在以下条目的情况下

如果(x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}。

如果(z!=minpr1){z=minpr1;OrderDelete(ticketUP);}。

系统不断产生错误

: OrderDelete函数 的无效票据

: OrderDelete错误4051

根据参考书,它是

函数参数的无效值

虽然参数似乎是一样的。

尽管如果你去掉这个条件,只留下

OrderDelete(ticketD)。

OrderDelete(ticketUP)。

它成功地删除了(但我需要按条件删除)。我做错了什么?

错误在代码上面的某个地方,在订单选择区。
原因: