Статья посвящена программному отслеживанию событий в терминале МetaТrader 4, таких как открытие, закрытие и модификация ордеров, и рассчитана на пользователя, обладающего базовыми навыками работы с терминалом и программирования на MQL 4.
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);//Удаляем отложенный } }
我只是在学习,我正在尝试使用指南,但我意识到我得到了一些废话,我想看看如何做的例子。
大家好!请您告知如何在EA中设置订单删除?
情况是这样的。
我们在不同的方向放置2个挂单,只要其中一个触发,另一个就会被删除,不再展示。
如果有任何帮助,我将非常感激。
谢谢你。
类似这样的事情
{
if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES) && OrderType()>1)//Если найденный ордер отложенный
{
ticket=OrderTicket();//Запомним его тикет
}
else//Если ордер не отложенный
{
trade=1;//Запомним,что есть открытая позиция
}
if(ticket!=0 && trade==1)//И если известен отложенный и открыта позиция
{
int OD=OrderDelete(ticket);//Удаляем отложенный
}
}
"让我们继续寻找 "需要被删除!
你可以在论坛上编辑你自己的帖子。你在上面分别写的东西都可以装进一个帖子里。
你好!引入了一个使用以下算法的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()与时间变量的值,看看日志怎么说。
我不知道,我看了一眼还没看出有什么问题。我删除了对订单数量 的不必要的检查(在周期条件中已经存在),并增加了对两种类型的头寸(买入和卖出)的检查。
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。谢谢你。
问候。请你告诉我,为什么在以下条目的情况下
如果(x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}。
如果(z!=minpr1){z=minpr1;OrderDelete(ticketUP);}。
系统不断产生错误
: OrderDelete函数 的无效票据
: OrderDelete错误4051
根据参考书,它是
函数参数的无效值
虽然参数似乎是一样的。
尽管如果你去掉这个条件,只留下
OrderDelete(ticketD)。
OrderDelete(ticketUP)。
它成功地删除了(但我需要按条件删除)。我做错了什么?
问候。请你告诉我,为什么在以下条目的情况下
如果(x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}。
如果(z!=minpr1){z=minpr1;OrderDelete(ticketUP);}。
系统不断产生错误
: OrderDelete函数 的无效票据
: OrderDelete错误4051
根据参考书,它是
函数参数的无效值
虽然参数似乎是一样的。
尽管如果你去掉这个条件,只留下
OrderDelete(ticketD)。
OrderDelete(ticketUP)。
它成功地删除了(但我需要按条件删除)。我做错了什么?