//-------------------------------------------------------------------+ // удаляет отложенные ордера по type + //+------------------------------------------------------------------+
void DeleteOrders(int type) { int cnt = OrdersTotal(); for (int i=cnt-1; i>=0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; //По желанию if (OrderSymbol() != Symbol()) continue; //По желанию if (OrderMagicNumber() != mn) continue;
if (OrderType() != type) continue;
if (type == OP_BUYSTOP || type == OP_SELLSTOP) { bool Del_1 = OrderDelete(OrderTicket()); if(!Del_1) Print("Ошибка удаления ордера. Код ошибки=",GetLastError()); else Print("Ордер успешно удален."); } if (type == OP_BUYLIMIT || type == OP_SELLLIMIT) { bool Del_2 = OrderDelete(OrderTicket()); if(!Del_2) Print("Ошибка удаления ордера. Код ошибки=",GetLastError()); else Print("Ордер успешно удален."); } } } //+------------------------------------------------------------------+
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 16.06.2008 | //| Описание : Удаление ордеров, противоположных позиции | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1) { bool eb, es;
//-------------------------------------------------------------------+ // удаляет отложенные стоп ордера SELLSTOP или BUYSTOP по type + //+------------------------------------------------------------------+
void DeleteOrders(int type) { int cnt = OrdersTotal(); for (int i=cnt-1; i>=0; i--) { if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue; //По желанию if (OrderSymbol() != Symbol()) continue; //По желанию if (OrderMagicNumber() != mn) continue;
if (OrderType() != type) continue;
if (type == OP_BUYSTOP || type == OP_SELLSTOP) { bool Del_1 = OrderDelete(OrderTicket()); if(!Del_1) Print("Ошибка удаления ордера. Код ошибки=",GetLastError()); else Print("Ордер успешно удален."); } if (type == OP_BUYLIMIT || type == OP_SELLLIMIT) { bool Del_2 = OrderDelete(OrderTicket()); if(!Del_2) Print("Ошибка удаления ордера. Код ошибки=",GetLastError()); else Print("Ордер успешно удален."); } } } //+------------------------------------------------------------------+
按类型划分的情况是什么?它的作用是什么?如果这样写,会有什么不同吗?
if (type > 1 && type < 6) { bool Del_1 = OrderDelete(OrderTicket()); if(!Del_1) Print("Ошибка удаления ордера. Код ошибки=",GetLastError()); else Print("Ордер успешно удален."); }
- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound, код которой необходимо вставить после каждой строчки "Print("..." в таком виде:
bool PlaySound(
string payment // file name
)
; ...或者它也是以某种方式转换的?
在 程序头中 声明
bool PlaySound(-你将有机会在设置文件中打开和关闭声音extern bool Play = TRUE;
大家好!请您告知如何在EA中设置订单删除?
情况是这样的。
我们在不同的方向放置2个挂单,只要其中一个触发,另一个就会被删除,不再展示。
如果有任何帮助,我将非常感激。
谢谢你。
比如说。
// удаляет отложенные ордера по type +
//+------------------------------------------------------------------+
void DeleteOrders(int type)
{
int cnt = OrdersTotal();
for (int i=cnt-1; i>=0; i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
//По желанию
if (OrderSymbol() != Symbol()) continue;
//По желанию
if (OrderMagicNumber() != mn) continue;
if (OrderType() != type) continue;
if (type == OP_BUYSTOP || type == OP_SELLSTOP)
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
{
bool Del_2 = OrderDelete(OrderTicket());
if(!Del_2)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
}
}
//+------------------------------------------------------------------+
而在这之前,确定有一个位置,是时候杀死多余的 订单了
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 16.06.2008 |
//| Описание : Удаление ордеров, противоположных позиции |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
void DeleteOppositeOrders(string sy="", int op=-1, int mn=-1) {
bool eb, es;
switch (op) {
case OP_BUY : eb=ExistPositions(sy, OP_BUY , mn); break;
case OP_SELL: es=ExistPositions(sy, OP_SELL, mn); break;
default: eb=ExistPositions(sy, OP_BUY , mn);
es=ExistPositions(sy, OP_SELL, mn); break;
}
if (eb) {
DeleteOrders(sy, OP_SELLLIMIT, mn);
DeleteOrders(sy, OP_SELLSTOP , mn);
}
if (es) {
DeleteOrders(sy, OP_BUYLIMIT, mn);
DeleteOrders(sy, OP_BUYSTOP , mn);
}
}
给你举个例子。
// удаляет отложенные стоп ордера SELLSTOP или BUYSTOP по type +
//+------------------------------------------------------------------+
void DeleteOrders(int type)
{
int cnt = OrdersTotal();
for (int i=cnt-1; i>=0; i--) {
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
//По желанию
if (OrderSymbol() != Symbol()) continue;
//По желанию
if (OrderMagicNumber() != mn) continue;
if (OrderType() != type) continue;
if (type == OP_BUYSTOP || type == OP_SELLSTOP)
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
if (type == OP_BUYLIMIT || type == OP_SELLLIMIT)
{
bool Del_2 = OrderDelete(OrderTicket());
if(!Del_2)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
}
}
//+------------------------------------------------------------------+
按类型划分的情况是什么?它的作用是什么?如果这样写,会有什么不同吗?
{
bool Del_1 = OrderDelete(OrderTicket());
if(!Del_1)
Print("Ошибка удаления ордера. Код ошибки=",GetLastError());
else
Print("Ордер успешно удален.");
}
为什么在我的iPhone上mt4和mt5的条形图是不同的?虽然酒吧的开放 和关闭时间 是一样的。这显然阻止了你在昨天14:00在MT4上突破线。
为什么在我的iPhone上mt4和mt5的条形图是不同的?虽然酒吧的开放 和关闭时间 是一样的。这显然是一个障碍,因为昨天在mt4上该线在14:00没有突破。
为什么在我的iPhone上mt4和mt5的条形图是不同的?虽然酒吧的开放 和关闭时间 是一样的。这显然是干扰,因为昨天14:00在MT4上的线没有被打破。
- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound, код которой необходимо вставить после каждой строчки "Print("..." в таком виде:
bool PlaySound(
string payment // file name
)
; ...或者它也是以某种方式转换的?
在 程序头中 声明
bool PlaySound(-你将有机会在设置文件中打开和关闭声音extern bool Play = TRUE;进一步,Print会打印什么?那么在什么条件下呢?
这一行动的意义何在?当订单关闭时播放声音,并写下评论(在TP或SL)?
问候。我已经问过了,但还没有找到答案。请你用下面的条目告诉我原因
如果(x!=maxpr1){x=maxpr1; OrderDelete(ticketD);}。
如果(z!=minpr1){z=minpr1;OrderDelete(ticketUP);}。
系统不断产生错误
: OrderDelete函数的无效票据
: OrderDelete错误4051
根据参考书,它是
函数参数的无效值
虽然参数似乎是一样的。
尽管如果你去掉这个条件,只留下
OrderDelete(ticketD)。
OrderDelete(ticketUP)。
它成功地删除了(但我需要按条件删除)。我做错了什么?这里是整个事情。
https://www.mql5.com/ru/forum/160683/page31#comment_3911573
专家顾问读取最后X条的最小和最大值,并根据这些值下订单。然后,如果最大或最小值下降了,我们应该删除相应的订单,并使用新的数据打开它。
我刚刚开始研究它,删除而不是修改它是为了研究功能,我想知道为什么它不工作了。