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,对吗?我一次只开一个订单,我可以知道如何获得已开订单的票号吗?
再次感谢
尊敬的各位。
我已经插入了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); } //+------------------------------------------------------------------+
大家好。
现在我在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); } //+------------------------------------------------------------------+
你好。
我的EA有以下编码,请帮助我,为什么OrderClose没有被触发?我是否需要使用OrderSelect()?OrderSelect()的作用是什么?谢谢你。