订单关闭不工作

 

你好。

我的EA有以下编码,请帮助我,为什么OrderClose没有被触发?我是否需要使用OrderSelect()?OrderSelect()的作用是什么?谢谢你。

//+------------------------------------------------------------------+
//|                                                       chuale.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.abc.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.abc.com"
#property version   "1.00"
#property strict

extern double   TakeProfit=500;
extern double   Lots=0.1;
extern double   StopLoss=280;

double     bar1;
double     bar2;
double     bar3;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
//---
   
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
  int ticket;
  int total=OrdersTotal();
  int    counted_bars=IndicatorCounted();
   if(counted_bars>0) counted_bars--;
   {
      bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100;
      bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100;
      bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100;
      if (bar1+bar2>1)
      {
      if(total<1)
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green);
      if (bar3<-1) OrderClose(OrderTicket(),OrderLots(),Bid,3,Green);
      }
      if (bar1+bar2<-1)
      {
      if(total<1)
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red);
      if (bar3>1)  OrderClose(OrderTicket(), OrderLots(),Ask,3,Red);
      }
   }
   
   return(0);
//---
   return(0);
  }
//+------------------------------------------------------------------+


 
你不必使用OrderSelect 4 OrderClose,但你必须在OrderTicket()和OrderLots() 中使用2个
 
qjol:
你不必使用OrderSelect 4 OrderClose,但你必须为OrderTicket()OrderLots() 使用两个


Dearqjol,

我不太明白你的意思,请你解释一下。谢谢你


 

在你的代码中

if (bar3>1)  OrderClose(OrderTicket(), OrderLots(),Ask,3,Red);

你在使用OrderTicket()OrderLots() 这些函数 必须使用OrderSelect()

你可以在文档中看到:

注意

如果订单是由票号选择的,池参数将被忽略。票号是一个唯一的订单标识符。

要想知道订单从哪个列表中被选中,必须分析其关闭时间。如果订单的收盘时间等于0,那么该订单是开放的或待定的,并从终端开放头寸列表中获取。

我们可以通过订单类型来区分未结头寸和挂单。如果订单关闭时间不等于0,则该订单是已关闭的订单或已删除的挂单,并从终端历史中选择。 它们之间也因订单类型而不同。

OrderSelect()函数将订单数据复制到程序环境中,所有进一步调用OrderClosePrice(),OrderCloseTime(),OrderComment(),OrderCommission(),OrderExpiration(),OrderLots(),OrderMagicNumber(), OrderOpenPrice(),OrderOpenTime(),OrderPrint(),OrderProfit(),OrderStopLoss(),OrderSwap(),OrderSymbol(),OrderTakeProfit(),OrderTicket(),OrderType() 函数返回之前复制的数据。这意味着,在某些情况下,订单的细节(开盘价,SL/TP水平或到期日)可能会发生变化,数据变得不真实。我们强烈建议在请求订单数据之前调用OrderSelect()函数。

 

所以,如果我使用实际的票号和Lots,就不需要使用OrderSelect,对吗?我一次只开一个订单,我可以知道如何获得已开订单的票号吗?

再次感谢

 
chuale:

所以,如果我使用实际的票号和Lots,就不需要使用OrderSelect,对吗?我一次只开一个订单,我可以知道如何获得已开订单的票号吗?

再次感谢

如果成功,OrderSend()函数会返回票号。我建议你从头到尾阅读本网站的书籍部分,以更好地了解如何使用MQL,以及查阅你使用的每个函数 的参考文档,以便更好地了解使用什么参数和返回值。

 

尊敬的各位。

我已经插入了OrderSelect(),但OrderClose仍然无法运行,请帮助。


//+------------------------------------------------------------------+
//|                                                       chuale.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.abc.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.abc.com"
#property version   "1.00"
#property strict

extern double   TakeProfit=500;
extern double   Lots=0.1;
extern double   StopLoss=300;

double     bar1;
double     bar2;
double     bar3;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
//---
   
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
  int ticket;
  int total=OrdersTotal();
  int    counted_bars=IndicatorCounted();
   if(counted_bars>0) counted_bars--;
   {
      bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100;
      bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100;
      bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100;
      if (bar2>1)
      {
      if(total<1)
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green);
      OrderSelect(1,SELECT_BY_POS);
      if (bar3 <-1) OrderClose(OrderTicket(),Lots,Bid,3,Green);
      }
      if (bar2<-1)
      {
      if(total<1)
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red);
      if ( bar3>1)  OrderClose(OrderTicket(), Lots,Ask,3,Red);
      }
   }
   
   return(0);
//---
   return(0);
  }
//+------------------------------------------------------------------+
 
谁告诉你订单的编号是1?
 
我一次只允许一个未结订单。
 

大家好。


现在我在OrderClose中插入了票据和手数,而没有使用OrderTicket()和OrderLots(),但它也没有关闭订单。请帮助我。

//+------------------------------------------------------------------+
//|                                                       chuale.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              http://www.abc.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, MetaQuotes Software Corp."
#property link      "http://www.abc.com"
#property version   "1.00"
#property strict

extern double   TakeProfit=500;
extern double   Lots=0.1;
extern double   StopLoss=300;

double     bar1;
double     bar2;
double     bar3;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
  
//---
   
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
  int ticket;
  int total=OrdersTotal();
  int    counted_bars=IndicatorCounted();
   if(counted_bars>0) counted_bars--;
   {
      bar1=(iClose(Symbol(),PERIOD_M1,2)-iClose(Symbol(),PERIOD_M1,3))*100;
      bar2=(iClose(Symbol(),PERIOD_M1,1)-iClose(Symbol(),PERIOD_M1,2))*100;
      bar3=(iClose(Symbol(),PERIOD_M1,0)-iClose(Symbol(),PERIOD_M1,1))*100;
      if (bar2>1)
      {
      if(total<1)
      ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"Chua EA",12345,0,Green);
      
      if (bar3 <-1) OrderClose(ticket,Lots,Bid,3,Green);
      }
      if (bar2<-1)
      {
      if(total<1)
      ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid+-TakeProfit*Point,"Chua EA",12345,0,Red);
      if ( bar3>1)  OrderClose(ticket, Lots,Ask,3,Red);
      }
   }
   
   return(0);
//---
   return(0);
  }
//+------------------------------------------------------------------+


 
chuale:

大家好。


现在我在OrderClose中插入了票据和手数,而没有使用OrderTicket()和OrderLots(),但它也没有关闭订单。请帮助我。



ticket是一个局部变量,所以下一次打钩时,它的值就不一样了。

放在 函数 之外,使其成为全局变量。

double     bar1;
double     bar2;
double     bar3;
int ticket;
原因: