주문 닫기가 작동하지 않음 - 페이지 2

 
chuale :

안녕 모두,


이제 OrderTicket() 및 OrderLots()를 사용하지 않고 OrderClose에 티켓과 랏을 삽입하지만 주문도 닫지 않습니다. 도와주세요.



당신이 잘못한 몇 가지가 있습니다. 이 EA가 M1 시간 프레임에 JPY 쌍에서 작동하기를 원한다고 가정합니다. 새 바에만 주문하고 새 바에만 주문을 마감하시겠습니까, 아니면 새 바에 입장하고 조건이 충족되면 종료하시겠습니까? 제 생각은 다음과 같습니다.

먼저 OrdersTotal()을 사용하여 주문을 계산합니다.

그런 다음 변수를 계산하십시오.

시장에 주문이 있는 경우 마감해야 하는지 확인하십시오 .

시장에 주문이 없으면 진입 조건이 충족되는지 확인하십시오.

질문이 있으면 알려주세요.

 //+------------------------------------------------------------------+
//|                                                 chuale_test1.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.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;
int         total,ticket;
datetime    previousTime;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

//---

//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---

   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
   total= OrdersTotal ();
/*
  counted_bars=IndicatorCounted();
   if(counted_bars>0) counted_bars--;
  IndicatorCounted() is actually for indicators not EA
  
   */

   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 ;
   /*
   Comment("Bar1 = "+DoubleToString(bar1,Digits)+"\n"+
           "Bar2 = "+DoubleToString(bar2,Digits)+"\n"+
           "Bar3 = "+DoubleToString(bar3,Digits)+"\n"
           );
   */
//Close any orders if conditions are met
   if (total> 0 )
     {
       if (bar3<- 1 ) OrderClose (ticket, OrderLots (), Bid , 3 ,Green);
       if (bar3> 1 ) OrderClose (ticket, OrderLots (), Ask , 3 ,Red);
     }
   if ( Time [ 0 ]==previousTime) return ( 0 );         //EA will not go past this point unless it is a new bar
   previousTime= Time [ 0 ];                         // If it was a new bar , it's old now but continue to the end
// if no order open and new bar
   if (total< 1 )
     {
       if (bar2> 1 ) // if condition met
        {
         //place buy order
         ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 3 , Ask -StopLoss* Point , Ask +TakeProfit* Point , "Chua EA" , 12345 , 0 ,Green);
         if (ticket< 0 ) Print ( "Error OP_BUY order failed. error : " +GetLastError()); // if returned ticket is -1 OrderSent failed
         return ( 0 );
        }
       // or if conditions for sell met
       if (bar2<- 1 )
        {
         ticket= OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 3 , Bid +StopLoss* Point , Bid +-TakeProfit* Point , "Chua EA" , 12345 , 0 ,Red);
         if (ticket< 0 ) Print ( "Error OP_SELL order failed. error : " +GetLastError());
         return ( 0 ); //return to start
        }
     }
   return ( 0 );
  }
//+------------------------------------------------------------------+
파일:
 
GumRai :


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

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

 
   total= OrdersTotal ();

???? ..... 쓸모 없는

당신이 가지고있는 거래를 올바르게 확인하십시오

오른쪽 기호와 오른쪽 magicnumber 찾기

주문 루프를 사용하면 마감할 올바른 거래를 선택할 수 있습니다.

 OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), 3 ,Green);

.

당신의 방법으로

PC를 다시 시작하는 순간 티켓 값을 잃게 됩니다.

   if (total> 0 )
     {
       if (bar3<- 1 ) OrderClose (ticket, OrderLots (), Bid , 3 ,Green);
       if (bar3> 1 ) OrderClose (ticket, OrderLots (), Ask , 3 ,Red);
     }

실패.....

 
chuale :

왜 내 게시물을 인용하고 댓글을 추가하지 않았습니까?
 
예, 지금 닫을 수 있습니다. 감사합니다. 이제 티켓 번호가 틱에 따라 계속 변경된다는 것을 알고 있습니다. 그래서 열린 주문의 티켓 번호를 얻는 방법은 무엇입니까? OrderTicket()을 사용해야 합니다. 맞나요?
 
chuale :
예, 지금 닫을 수 있습니다. 감사합니다. 이제 티켓 번호가 틱에 따라 계속 변경된다는 것을 알고 있습니다. 그래서 열린 주문의 티켓 번호를 얻는 방법은 무엇입니까? OrderTicket()을 사용해야 합니다. 맞나요?

OrderTicket()을 사용하는 경우 먼저 OrderSelect()를 사용 하고 닫고 싶은 거래인지 확인하십시오.
 
chuale :
예, 지금 닫을 수 있습니다. 감사합니다. 이제 티켓 번호가 틱에 따라 계속 변경된다는 것을 알고 있습니다. 그래서 열린 주문의 티켓 번호를 얻는 방법은 무엇입니까? OrderTicket()을 사용해야 합니다. 맞나요?


안녕하세요 Chuale님,

다음은 기호 및 매직 번호로 주문을 선택하고 주문을 마감하는 쉬운 방법입니다.

 //+------------------------------------------------------------------+
//|                                                 chuale_test1.mq4 |
//|                        Copyright 2014, MetaQuotes Software Corp. |
//|                                              https://www.mql5.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 ;
extern int       MagicNumber = 12345 ;
extern int       Slip  = 3 ;
double      bar1;
double      bar2;
double      bar3;
int         myTrades,ticket;
datetime    previousTime;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {

//---

//---
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//---

   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
  {
   myTrades = CountTrades(); //Count trades function counts this EA trades only
//
   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 ;

//Close any orders if conditions are met
   if (myTrades> 0 )
     {
       if (bar3<- 1 ) CloseThisSymbolAll();
       if (bar3> 1 ) CloseThisSymbolAll();
     }
   if ( Time [ 0 ]==previousTime) return ( 0 );         //EA will not go past this point unless it is a new bar
   previousTime= Time [ 0 ];                         // If it was a new bar , it's old now but continue to the end
// if no order open and new bar
   if (myTrades< 1 )
     {
       if (bar2> 1 ) // if condition met
        {
         //place buy order
         ticket= OrderSend ( Symbol (), OP_BUY ,Lots, Ask , 3 , Ask -StopLoss* Point , Ask +TakeProfit* Point , "Chua EA" , MagicNumber , 0 ,Green);
         if (ticket< 0 ) Print ( "Error OP_BUY order failed. error : " +GetLastError()); // if returned ticket is -1 OrderSent failed
         return ( 0 );
        }
       // or if conditions for sell met
       if (bar2<- 1 )
        {
         ticket= OrderSend ( Symbol (), OP_SELL ,Lots, Bid , 3 , Bid +StopLoss* Point , Bid +-TakeProfit* Point , "Chua EA" , MagicNumber , 0 ,Red);
         if (ticket< 0 ) Print ( "Error OP_SELL order failed. error : " +GetLastError());
         return ( 0 ); //return to start
        }
     }
   return ( 0 );
  }
//========================================================================
int CountTrades()
{
int count= 0 ;
int trade;
for (trade= OrdersTotal ()- 1 ;trade>= 0 ;trade--)
   {
   OrderSelect (trade, SELECT_BY_POS , MODE_TRADES );
   if ( OrderSymbol ()!= Symbol () || OrderMagicNumber () != MagicNumber)
   continue ;
   if ( OrderSymbol ()== Symbol () && OrderMagicNumber () == MagicNumber)
   if ( OrderType ()== OP_SELL || OrderType ()== OP_BUY )
   count++;
   }
return (count);
}
//========================================================================
void CloseThisSymbolAll()
  {
   int trade;
   for (trade= OrdersTotal ();trade>= 0 ;trade--)
     {
       OrderSelect (trade, SELECT_BY_POS , MODE_TRADES );
       if ( OrderSymbol ()!= Symbol ()) continue ;
       if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==MagicNumber)
        {
         if ( OrderType ()== OP_BUY ) OrderClose ( OrderTicket (), OrderLots (), Bid ,Slip,Blue);
         if ( OrderType ()== OP_SELL ) OrderClose ( OrderTicket (), OrderLots (), Ask ,Slip,Red);
        }
       //Sleep(1000);
     }
  }
//========================================================================
 
chuale :
예, 지금 닫을 수 있습니다. 감사합니다. 이제 티켓 번호가 틱에 따라 계속 변경된다는 것을 알고 있습니다. 그래서 열린 주문의 티켓 번호를 얻는 방법은 무엇입니까? OrderTicket()을 사용해야 합니다. 맞나요?


안녕하세요, Chuale님.

USDJPY에 대한 귀하의 아이디어를 가지고 놀고 있었고 약간의 변경 없이는 긍정적인 결과를 얻을 수 없었습니다. 다음은 M1 차트의 USDJPY에 대한 결과 샘플입니다.

M1의 USDJPY

다른 쌍에 사용하려고 했습니까?

bar3 < -1 또는 bar3 > 1의 종료는 긍정적인 결과를 반환하지 않았습니다.

 
deVries :

???? ..... 쓸모 없는

당신이 가지고있는 거래를 올바르게 확인하십시오

오른쪽 기호와 오른쪽 magicnumber 찾기

주문 루프를 사용하면 마감할 올바른 거래를 선택할 수 있습니다.

.

당신의 방법으로

PC를 다시 시작하는 순간 티켓 값을 잃게 됩니다.

실패 .....


그것이 주문을 마감하는 가장 좋은 방법이 아니라는 의미라면 동의하지만 그 사람이 OrderSelect를 사용하기 를 원하지 않고(또는 방법을 모르는 경우) 시장에 미결 주문을 남기지 않으면 작동합니다.

우리는 여기에서 서로를 도우려고 노력하지만 귀하의 답변은 조금 도움이 되지 않았습니다. 귀하는 그에게 주문 선택 기능을 사용하는 방법을 보여주지 않았고 귀하의 의견으로 인해 그의 EA가 더 잘 작동하지 않습니다.

다음에 도움을 주고 싶다면 올바른 방법으로 하고 올바른 코드를 입력하여 다른 사람들이 실제로 무언가를 배울 수 있도록 하십시오.

 
thrdel :


당신이 잘못한 몇 가지가 있습니다. 이 EA가 M1 시간 프레임에 JPY 쌍에서 작동하기를 원한다고 가정합니다. 새 바에만 주문하고 새 바에만 주문을 마감하시겠습니까, 아니면 새 바에 입장하고 조건이 충족되면 종료하시겠습니까? 제 생각은 다음과 같습니다.

먼저 OrdersTotal()을 사용하여 주문을 계산합니다.

그런 다음 변수를 계산하십시오.

시장에 주문이 있는 경우 마감해야 하는지 확인하십시오.

시장에 주문이 없으면 진입 조건이 충족되는지 확인하십시오.

질문이 있으면 알려주세요.