编码帮助-关闭订单

里科
172
里科  

你好


我是mql的新手,我正在尝试开发一个交易系统,有时我会同时购买& 卖单 以相同的价格。我想关闭两个购买&以相同的价格出售订单。

例如:我的系统将在1.4160处有一个买单,在1.4160处有一个卖单(均关闭)

如果有人指导我如何实现这一目标,我将不胜感激。


谢谢

里香

西蒙·尼亚德科夫斯基
17343
西蒙·尼亚德科夫斯基 2011.10.28 12:23:23  

从循环 //docs.mql4.com/trading/OrdersTotal -1至0增量-1

//docs.mql4.com/trading/OrderSelect 然后检查订单的 //docs.mql4.com/trading/OrderMagicNumber//docs.mql4.com/trading/OrderSymbol 进行匹配以确保它来自正确的EA(如果已存储) //docs.mql4.com/trading/OrderOpenPrice 这是 //docs.mql4.com/trading/OrderType//docs.mql4.com/trading/OrderTicket

然后是一个类似于上述的嵌套循环,并查找具有匹配的OrderOpenPrice但不匹配的Type的订单,如果找到则关闭两个订单并退出,如果找不到,则检查下一个Order

您将必须检查是否没有将外部循环中的Order与内部循环中的自身进行比较。 。 。因此,跟踪该票证的原因是

里科
172
里科 2011.10.28 13:03:39  
英国猛禽:

从循环 //docs.mql4.com/trading/OrdersTotal -1至0增量-1

//docs.mql4.com/trading/OrderSelect 然后检查订单的 //docs.mql4.com/trading/OrderMagicNumber//docs.mql4.com/trading/OrderSymbol 进行匹配以确保它来自正确的EA(如果已存储) //docs.mql4.com/trading/OrderOpenPrice 这是 //docs.mql4.com/trading/OrderType//docs.mql4.com/trading/OrderTicket

然后是一个类似于上述的嵌套循环,并查找具有匹配的OrderOpenPrice但不匹配的Type的订单,如果找到则关闭两个订单并退出,如果找不到,则检查下一个Order

您将必须检查是否没有将外部循环中的Order与内部循环中的自身进行比较。 。 。因此,跟踪该票证的原因是


感谢您的快速答复。


我已经对此进行了编码,但未结清订单。.您能告诉我我哪里出问题了吗?


void CloseSamePrice()
{
结果
nt _total = OrdersTotal(); //手数或交易数????
int _ordertype; //订单类型
if(_total == 0){return;} //如果total == 0
int _ticket; // 票号
double _orderprice;
double _priceClose; //关闭订单的价格;
for(int _i = _total-1; _i>=0;_i--)
{//#for循环
如果(OrderSelect(_i,SELECT_BY_POS))
{//#如果
_ticket = OrderTicket();
_orderprice = OrderOpenPrice();
if(OrderType()== OP_BUY)
{
int _total1 = OrdersTotal(); //手数或交易数????
int _ticket1; // 票号
double _priceClose1; //关闭订单的价格;
为(int _ii = _total1-1; _ii>=0;_ii--)
{//#for循环
如果(OrderSelect(_i,SELECT_BY_POS))
{//#如果
_ticket1 = OrderTicket();
if(OrderType()== OP_SELL&&OrderOpenPrice()== _ orderprice)
{
_priceClose = 市场Info(OrderSymbol(),MODE_BID);
_priceClose1 = 市场Info(OrderSymbol(),MODE_ASK);
OrderClose(_ticket,OrderLots(),_ priceClose,10,Red);
OrderClose(_ticket1,OrderLots(),_ priceClose1,10,Red);
}
}
}
}
} //#如果
}
返回;
}

西蒙·尼亚德科夫斯基
17343
西蒙·尼亚德科夫斯基 2011.10.28 13:06:44  

请使用它来发布代码。 。 。它使阅读更容易。

里科
172
里科 2011.10.28 13:08:02  
英国猛禽:

请使用它来发布代码。 。 。它使阅读更容易。



void CloseSamePrice()
  {
      bool result;
      int _total=OrdersTotal(); // number of lots or trades  ????
      int _ordertype;// order type   
      if (_total==0) {return;}  // if total==0
      int _ticket; // ticket number
      double _orderprice;
      double _priceClose;// price to close orders;
      for(int _i=_total-1;_i>=0;_i--)
      {  //# for loop
         if (OrderSelect(_i,SELECT_BY_POS))
         { //# if 
            _ticket=OrderTicket();
            _orderprice=OrderOpenPrice();
            if(OrderType() == OP_BUY)
            {
              int _total1=OrdersTotal(); // number of lots or trades  ????
              int _ticket1; // ticket number
              double _priceClose1;// price to close orders;
              for(int _ii=_total1-1;_ii>=0;_ii--)
              {  //# for loop
                if (OrderSelect(_i,SELECT_BY_POS))
                { //# if 
                  _ticket1=OrderTicket();
                  if(OrderType()== OP_SELL && OrderOpenPrice()==_orderprice)
                  {
                    _priceClose=市场Info(OrderSymbol(),MODE_BID);
                    _priceClose1=市场Info(OrderSymbol(),MODE_ASK);
                    OrderClose(_ticket,OrderLots(),_priceClose,10,Red);
                    OrderClose(_ticket1,OrderLots(),_priceClose1,10,Red);
                  }
                }
              }
            }
          }  // # if 
      } 
      return;
}
西蒙·尼亚德科夫斯基
17343
西蒙·尼亚德科夫斯基 2011.10.28 13:18:54  

如果您遇到的第一个订单是一个卖出订单,第二个订单是具有相同OOP的买入订单,则您的代码将失败。 。 。摆脱这个。 。 。

if(OrderType() == OP_BUY)

做这个 。 。 。 。

if(_ticket1 == _ticket) continue;
里科
172
里科 2011.10.28 13:32:31  
英国猛禽:

如果您遇到的第一个订单是一个卖出订单,第二个订单是具有相同OOP的买入订单,则您的代码将失败。 。 。摆脱这个。 。 。

做这个 。 。 。 。


谢谢你的帮助。我还没做我会在一段时间后尝试。
威廉·罗德
24104
威廉·罗德 2011.10.28 14:36:56  
  1. for(int _ii=_total1-1;_ii>=0;_ii--)
                  {  //# for loop
                    if (OrderSelect(_i,SELECT_BY_POS))
    A)选择错误的订单B)不检查重复的票证C)不需要两次缩进。
    for(int _ii=_total1-1;_ii>=0;_ii--) if(
       OrderSelect(_ii,SELECT_BY_POS)                  // Only my orders w/
    && OrderMagicNumber()  == magic.number             // my magic number
    && OrderSymbol()       == Symbol()                 // 和 my pair.
    && OrderType()         == OP_SELL 
    && OrderOpenPrice()    == _orderprice
    ){

  2. _priceClose=市场Info(OrderSymbol(),MODE_BID);
    为什么只使用函数调用 出价
  3. 由于服务器调用需要时间,因此您必须在它们之间进行RefreshRates
     _priceClose=市场Info(OrderSymbol(),MODE_BID);
    OrderClose(_ticket,OrderLots(),_priceClose,10,Red);
    _priceClose1=市场Info(OrderSymbol(),MODE_ASK);   // or RefreshRates(); _priceClose1 = Ask;
    OrderClose(_ticket1,OrderLots(),_priceClose1,10,Red);

  4. int _total=OrdersTotal();
    这使得EA彼此不兼容,包括在其他图表和手动交易中的EA。始终使用幻数。
    int _total=0;
        for(iPos = OrdersTotal()-1; iPos >= 0 ; iPos--) if (
            OrderSelect(iPos, SELECT_BY_POS)                // Only my orders w/
        &&  OrderMagicNumber()  == magic.number             // my magic number
        &&  OrderSymbol()       == Symbol()                 // 和 my pair.
        ){ _total++; }
    

里科
172
里科 2011.10.28 16:33:46  
WH罗德:
  1. A)选择错误的订单B)不检查重复的票证C)不需要两次缩进。
  2. 为什么只使用函数调用 出价
  3. 由于服务器调用需要时间,因此您必须在它们之间进行RefreshRates
  4. 这使得EA彼此不兼容,包括在其他图表和手动交易中的EA。始终使用幻数。

哇。。非常感谢。我已经合并了所有内容,并且可以正常工作.. :)如果有人日后需要,这里是代码。

void CloseSamePrice()
  {
      bool result;
      int _total=0; 
      int _ordertype;// order type   
      int _ticket; // ticket number
      double _orderprice;
      for(int iPos = OrdersTotal()-1; iPos >=0; iPos--) if (
        OrderSelect(iPos, SELECT_BY_POS)                // Only my orders w/
        &&  OrderMagicNumber()  == MAGICMA             // my magic number
        &&  OrderSymbol()       == Symbol()                 // 和 my pair.
        )
      { _total++; }
      for(int _i=_total-1;_i>=0;_i--) if(
        OrderSelect(_i,SELECT_BY_POS)                  // Only my orders w/
        && OrderMagicNumber()  == MAGICMA             // my magic number
        && OrderSymbol()       == Symbol()                 // 和 my pair.
        && OrderType()         == OP_BUY 
        )
      {
        _ticket=OrderTicket();
        _orderprice=OrderOpenPrice();
        int _total1 =0;
        for(int iPos1 = OrdersTotal()-1; iPos1 >=0; iPos1--) if (
           OrderSelect(iPos1, SELECT_BY_POS)                // Only my orders w/
           &&  OrderMagicNumber()  == MAGICMA             // my magic number
           &&  OrderSymbol()       == Symbol()                 // 和 my pair.
           )
        { _total1++; }
        int _ticket1; // ticket number
        for(int _ii=_total1-1;_ii>=0;_ii--) if(
            OrderSelect(_ii,SELECT_BY_POS)                  // Only my orders w/
            && OrderMagicNumber()  == MAGICMA             // my magic number
            && OrderSymbol()       == Symbol()                 // 和 my pair.
            && OrderType()         == OP_SELL 
            && OrderOpenPrice()    == _orderprice
           )
        {
           _ticket1=OrderTicket();
 //          Comment("ticket ", _ticket, "\n",
 //          "ticket1 ", _ticket1);
           OrderClose(_ticket,OrderLots(),Bid,10,Red);
           RefreshRates();
           OrderClose(_ticket1,OrderLots(),Ask,10,Red);
        }
      } 
      return;
}
威廉·罗德
24104
威廉·罗德 2011.10.29 14:46:19  
int _ticket1; // ticket number
for(...
{
    _ticket1=OrderTicket();
使用C语言后,必须在使用前声明变量已过时。首次使用时,请声明它们。
for(...
{
   int  _ticket1=OrderTicket();
[已删除] 2011.10.30 05:41:26  

Доброговременисутокуважаемыефорумчане!

МенязовутГерман,мне23года,яявляюсьтрейдеромкомпании"Инстафорекс"

Помогитевпоискенужногоскрипта! Скриптнужендлясеткиотложенныхордеров。