初学者的问题 MQL4 MT4 MetaTrader 4 - 页 29

 
yaaarik777:

大家好!请您告知如何在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);
  }
}
 
Vladimir Zubov:

给你举个例子。

//-------------------------------------------------------------------+
//   удаляет отложенные стоп ордера 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("Ордер успешно удален.");
   }
 
为什么在我的iPhone上mt4和mt5的条形图是不同的?虽然酒吧的开放 和关闭时间 是一样的。这显然是一个障碍,因为昨天14:00在MT4上,这条线没有被突破。
附加的文件:
image.png  82 kb
image.png  81 kb
 
下午好!请你告诉我,我在安卓上下载了mt4 636版本,但它没有看到经纪商列表。终端版本是否不再支持?((如果是的话,我在哪里可以下载一个有效的版本?
 
MetaGSss:
为什么在我的iPhone上mt4和mt5的条形图是不同的?虽然酒吧的开放 和关闭时间 是一样的。这显然阻止了你在昨天14:00在MT4上突破线。
他们想让你提前知道价格会往哪里走
 
MetaGSss:
为什么在我的iPhone上mt4和mt5的条形图是不同的?虽然酒吧的开放 和关闭时间 是一样的。这显然是一个障碍,因为昨天在mt4上该线在14:00没有突破。
当然,传播是为极端的人准备的))))。
 
MetaGSss:
为什么在我的iPhone上mt4和mt5的条形图是不同的?虽然酒吧的开放 和关闭时间 是一样的。这显然是干扰,因为昨天14:00在MT4上的线没有被打破。
符号也略有不同)
 

- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound,  код которой необходимо вставить после каждой строчки "Print("..." в таком виде: 

bool PlaySound(

string payment // file name

)

; ...或者它也是以某种方式转换的?

程序头 声明

bool PlaySound(-你将有机会在设置文件中打开和关闭声音extern bool Play = TRUE;

进一步,Print会打印什么?那么在什么条件下呢?

这一行动的意义何在?当订单关闭时播放声音,并写下评论(在TP或SL)?






谢谢A1exPit 的详细和明确的答复 ..."行动的要点 "是为 "在Takeprofit和Staploss关闭订单 "的事件发出声音=为每个人发出不同的声音 ...
 

问候。我已经问过了,但还没有找到答案。请你用下面的条目告诉我原因

如果(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条的最小和最大值,并根据这些值下订单。然后,如果最大或最小值下降了,我们应该删除相应的订单,并使用新的数据打开它。

我刚刚开始研究它,删除而不是修改它是为了研究功能,我想知道为什么它不工作了。