OrderCloseが機能しない

 

こんにちは。

私の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() には2つ必要です。


qjol さんへ

意味がよくわからないのですが、説明していただけませんか?ありがとうございます。


 

私たちのコードでは

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

OrderTicket()OrderLots() を使っていますが これらの関数は OrderSelect() 使わなければ なりません。

ドキュメントにあるように、

チケット番号で注文が選択された場合、pool パラメータは無視されます。チケット番号は、一意のオーダー識別子です。

注文がどのリストから選択されたかを調べるには、その終了時刻を分析する必要があります。注文の終値が0であれば、その注文は未決済または保留で、端末のオープンポジション・リストから取得されます。

注文の種類によって、未決済ポジションと保留中の注文を区別することができます。注文の終了時刻が0でない場合、その注文は終了した注文または削除された保留中の注文であり、ターミナルの履歴から選択されたものです。 また、注文の種類によっても互いに異なる。

OrderSelect() 関数は注文データをプログラム環境にコピーし、それ以降のOrderClosePrice(),OrderCloseTime(),OrderComment(),OrderCommission(),OrderExpiration(),OrderLots(),OrderMagicNumber() のすべてのコールを実行します。OrderOpenPrice(),OrderOpenTime(),OrderPrint(),OrderProfit(),OrderStopLoss(),OrderSwap(),OrderSymbol(),OrderTakeProfit(),OrderTicket(),OrderType() 関数は以前にコピーしたデータを返送します。これは、場合によっては、注文の詳細(オープンプライス、SL/TPレベル、有効期限)が変更され、データが非現実的になる可能性があることを意味します。注文データを要求する前に、OrderSelect()関数を呼び出すことを強くお勧めします。

 

実際のチケット番号とロットを使用する場合は、OrderSelectを使用 する必要はありませんね?私は一度に1つの注文を開くだけですが、開いている注文のチケット番号を取得する方法を知っていますか?

ありがとうございました。

 
chuale:

実際のチケット番号とロットを使用する場合は、OrderSelectを使用する必要はありませんね?私は一度に1つの注文を開くだけですが、開いている注文のチケット番号を取得する方法を知っていますか?

ありがとうございました。

OrderSend() 関数は、成功した場合にチケット番号を返します。このサイトのBookセクションを最初から最後まで読んで、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だと誰が言ったのですか?
 
私は一度に1つのオープンオーダーしか許可しません。
 

皆さん、こんにちは。


現在、OrderTicket()とOrderLots()を使わずに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);
      
      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:

皆さん、こんにちは。


現在、OrderTicket()とOrderLots()を使わずにOrderCloseでチケットとロットを挿入していますが、注文も閉じられません。助けてください。



ticketはローカル変数なので、次のtickでは同じ値にはなりません。

関数の 外に置いて、Globalscopeに する。

double     bar1;
double     bar2;
double     bar3;
int ticket;
理由: