도움말: EA가 거래를 마감하지 않는 이유 - 페이지 6

 
RaptorUK :

기능이 전혀 필요하지 않습니다. . . . . . 그것을 제거.



안녕하세요 랩터님

EA는 복잡한 기능을 끝내기 때문에 이 기능 이 필요하고 여러 버전의 폐쇄 조건에서 이 기능을 사용합니다.

날 이해 해주길 바래.

와이.

 
onewithzachy :

2부 다시 해보자 :(


onewithzachy에게 감사합니다. 하지만 전에 응답한 것처럼 여러 버전의 조건에서 닫기를 위해 이 함수 가 필요합니다. 따라서 각 조건 내에 닫기 코드 명령을 넣는 것은 너무 복잡합니다. 특히 단일 코드 명령이 아니라는 점에서 그렇습니다.

감사해요,

와이.

 
RaptorUK :

이 작업을 수행 . . . ( 여기에서 반복: https://www.mql5.com/en/forum/139543 )

. . . 기능이 전혀 필요하지 않습니다.


Raptor님, 보시다시피 REQUATE 상황을 극복하려면 이 기능이 필요합니다.

와이.

 
onewithzachy :

@ RaptorUK, 적어도 지금보다 더 나은 미래를 생각할 수 있도록 헬멧을 쓰는 것을 고려하고 있습니다. 그 운전자들은 미리 잘 생각하지 않습니까? :디


@ skaboy, 여기서 정중하게 여쭤봅니다. 실례가 되지 않으시면 SRC 버튼을 사용하여 코드를 게시해 주시겠습니까? 우리는 이 스레드에서만 너무 많이 묻고 있습니다.

@ crossy, 첫 게시물 이후로 거의 일주일이 지났습니다. 분명히 나는 당신이 지금 4000줄을 다루는 명확한 머리를 가지고 있지 않을 수도 있다는 것을 이해합니다. 바로 지금 나 자신도 여기에 있습니다. 그래도 이해가 되지 않는다면, - 흠 - 저희에게 Close 코드를 작성해 달라고 요청할 수 있습니다. 그러나 여전히 코드를 약간만 작성하여 보여줘야 합니다. :D, 바로 위에 있는 RaptorUK의 코드는 내 것보다 더 직접적입니다. 그것에 대해 생각한 다음 EA로 이동할 수 있습니다.

여기에 코드를 작성하는 방식(불필요하게 반복되는 코드가 너무 많음)으로 인해 4000줄의 코드로 인해 EA가 느려지고 EA가 틱을 놓칠 수 있다는 약간의 걱정이 있어야 합니다. 몇 점을 놓치는 것은 괜찮습니다. 하지만 10핍 정도 떨어진 곳에서 놓치면 어떻게 될까요? 그리고 아마도 4000줄은 여전히 400줄로 줄일 수 있습니다. 당신의 EA가 더 가볍고 빨라질지 누가 압니까? :디


onewithzachy님, 감사합니다.

내 EA에는 다음과 같은 작은 실수가 있습니다.

1) 해당 티켓을 닫고 같이 찾습니다.

2) 이 실수는 모든 마감 순서에 나타나지 않으며 때로는 잘 작동합니다.

다른 3,950개의 코드 라인은 아주 잘 작동합니다.

관련 코드 줄을 다시 첨부합니다.

와이.

...
   for ( int cnt = OrdersTotal ()- 1 ; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol ();
         OrderT   = OrderTicket ();
         OrderM   = OrderMagicNumber ();
         OrderTyp = OrderType ();
         OrderL   = OrderLots ();
      }   
       if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1, "LONG" ,OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P( string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt= 0 ; cntt< 20000 ; cntt++ )
   {
       if ( Check )
      {
         Check_Ini();
         return ;
      }
      Check = false;
       if ( TREN == "LONG" )
         PRC = MarketInfo (SYMB,MODE_BID);
       else
       if ( TREN == "SHORT" )
         PRC = MarketInfo (SYMB,MODE_ASK);
         
      Check = OrderClose (TICKET,LOTT,PRC,Slippage, Yellow );
   }
   return ;
}
//-----------------------------------------------+
 
crossy :



안녕하세요 랩터님

EA는 복잡한 기능을 끝내기 때문에 이 기능이 필요하고 여러 버전의 폐쇄 조건에서 이 기능을 사용합니다.

날 이해 해주길 바래.

와이.

다른 곳에서 복사하여 붙여넣은 코드를 이해하지 못하는 것 같습니다. . . 그리고 requote용이 아닙니다. . . 당신은 당신이 얻는 오류가 인용인지 확인조차하지 않습니다.
 
RaptorUK :
다른 곳에서 복사하여 붙여넣은 사본을 이해하지 못하는 것 같습니다. . . 그리고 requote용이 아닙니다. . . 당신은 당신이 얻는 오류가 인용인지 확인조차하지 않습니다.


랩터가 없습니다. 제가 받은 오류는 다음과 같습니다. 티켓 번호를 찾을 수 없습니다. 그리고 그 이유는 티켓이 이미 1초 전에 마감되었다는 것입니다.

어떻게 티켓을 닫고 계속 검색하는지 이해가 안됩니다...

 
crossy :


어떻게 티켓을 닫고 계속 검색하는지 이해가 안됩니다...

당신이 필요하지 않다고 말한 루프 때문입니다. . . 필요하지 않은 기능 에서.

" Close_Single_P 함수에 루프가 있는 이유는 무엇입니까? " 1페이지 3번째 게시물에서

" 왜 루프가 있습니까? "페이지 4, 두 번째 게시물

 

내가 잘못했거나 이 기능 이 SHORT 주문을 종료하지 않습니까?

...
   for ( int cnt = OrdersTotal ()- 1 ; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol ();
         OrderT   = OrderTicket ();
         OrderM   = OrderMagicNumber ();
         OrderTyp = OrderType ();
         OrderL   = OrderLots ();
      }   
       if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1, "LONG" ,OrderT,OrderL);
                               ^^^^ - You always pass LONG to variable TREN, so variable PRC (below) is always equal taken from LONG, but NEVER from SHORT.

//-----------------------------------------------+
void CLOSE_Single_P( string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt= 0 ; cntt< 20000 ; cntt++ )
   {
       if ( Check )
      {
         Check_Ini();
         return ;
      }
      Check = false;
       if ( TREN == "LONG" )
         PRC = MarketInfo (SYMB,MODE_BID);
       else
       if ( TREN == "SHORT" )
         PRC = MarketInfo (SYMB,MODE_ASK);
         ^^^   Never executed
         
      Check = OrderClose (TICKET,LOTT,PRC,Slippage, Yellow );
   }
   return ;
}
//-----------------------------------------------+
 
Waidas :

내가 잘못했거나 이 기능이 SHORT 주문을 종료하지 않습니까?


와이다스, 맞습니다. 그러나 이것은 LONG 및 SHORT를 닫는 EA의 작은 부분입니다.

감사해요.

 
RaptorUK :

당신이 필요하지 않다고 말한 루프 때문입니다. . . 필요하지 않은 기능에서.

" Close_Single_P 함수에 루프가 있는 이유는 무엇입니까? " 1페이지 3번째 게시물에서

" 왜 루프가 있습니까? "페이지 4, 두 번째 게시물


Raptor, 당신은 옳았고 나는 루프를 연결했으므로 이제 함수 에 루프가 없습니다.

여기에 다시 첨부합니다.

와이.

...
   for ( int cnt = OrdersTotal ()- 1 ; cnt >= 0 ; cnt--) 
   {
      CodeY = false;
       if ( OrderSelect (cnt, SELECT_BY_POS, MODE_TRADES) )
      {
         CodeY    = true;
         OrderS   = OrderSymbol ();
         OrderT   = OrderTicket ();
         OrderM   = OrderMagicNumber ();
         OrderTyp = OrderType ();
         OrderL   = OrderLots ();
      }   
       if ( CodeY && OrderS == Pair1 && OrderTyp == OP_BUY && OrderM == MAG &&.... )
    
         CLOSE_Single_P(Pair1, "LONG" ,OrderT,OrderL);

//-----------------------------------------------+
void CLOSE_Single_P( string SYMB, string TREN, int TICKET, double LOTT)
{
   double PRC;
   bool Check = false;

   for ( int cntt= 0 ; cntt< 20000 ; cntt++ )
   {
       if ( Check )
      {
         Check_Ini();
         return ;
      }
       if ( TREN == "LONG" )
         PRC = MarketInfo (SYMB,MODE_BID);
       else
       if ( TREN == "SHORT" )
         PRC = MarketInfo (SYMB,MODE_ASK);
         
      Check = OrderClose (TICKET,LOTT,PRC,Slippage, Yellow );
   }
   return ;
}
//-----------------------------------------------+