주문 닫기가 작동하지 않음

 

안녕,

내 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,

무슨 말씀이신지 잘 이해가 안가는데 설명 부탁드립니다. 고맙습니다


 

ur 코드에서

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

u OrderTicket() & OrderLots() & 4 이러한 함수 를 사용하려면 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() 함수를 호출하는 것이 좋습니다.

 

따라서 실제 티켓 번호와 Lot를 사용하면 OrderSelect를 사용할 필요가 없습니까? 한 번에 하나의 주문만 열었습니다. 열린 주문의 티켓 번호를 얻는 방법을 알 수 있습니까?

다시 한 번 감사합니다

 
chuale :

따라서 실제 티켓 번호와 랏을 사용하면 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입니까?
 
한 번에 하나의 미결 주문만 허용합니다.
 

안녕 모두,


이제 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에 티켓과 랏을 삽입하지만 주문도 닫지 않습니다. 도와주세요.



티켓은 지역 변수이므로 다음 틱에는 동일한 값이 없습니다.

Globalscope로 만들기 위해 함수 외부에 넣습니다.

 double      bar1;
double      bar2;
double      bar3;
int ticket;