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

 

안녕 친구,

당신의 도움이 필요합니다.

나는 그 프로세스의 일부가 기능을 사용하여 거래를 마감해야 하는 EA를 만들었습니다. 다음은 관련 kod의 행입니다.

EA가 거래를 마감하지 않는 이유를 좀 도와주실 수 있나요? 감사합니다.

(메인 부분에서 ORDERSELECT 를 사용하는데 함수에서도 ORDERSELECT를 사용할 수 없기 때문에????)

for(int cnt=0; cnt < OrdersTotal(); cnt++)

{

주문 선택(cnt, SELECT_BY_POS, MODE_TRADES);

if ( OrderSymbol() == 쌍 && OrderType() == OP_BUY )

{

if ( MarketInfo(Pair,MODE_BID) >= Open_P_BUY + MarketInfo(Pair,MODE_POINT)*factor*TP )

{

CLOSE_Single_P(Pair,"LONG", OrderTicket(), OrderLots());

}

}

}

//-----------------------------------------------------------+

무효 CLOSE_Single_P(문자열 SYMB, 문자열 TREN, int TICKET, 이중 LOTT)

{

int 코드, sig;

이중 중국;

if ( TREN == "LONG" )

코드 = 0;//OP_BUY

또 다른

if ( TREN == "SHORT" )

코드 = 1;//OP_SELL

for ( int k=0; k < OrdersTotal(); k++ )

{

주문 선택(k, SELECT_BY_POS, MODE_TRADES);

if( OrderSymbol() == SYMB && OrderType() == 코드 && OrderLots() == LOTT && OrderTicket() == TICKET )

{

경우 ( 주문 유형() == OP_BUY )

PRC = MarketInfo(OrderSymbol(),MODE_BID);

또 다른

경우 ( 주문 유형() == OP_SELL )

PRC = MarketInfo(OrderSymbol(),MODE_ASK);

OrderClose(티켓,LOTT,PRC,Slippage,Yellow);

부서지다;

}

}

반품;

}

 

더 나은 읽기를 위해 SRC 버튼을 사용하여 코드를 표시하십시오. :)

OrderSelect()가 잘못된 방식으로 코딩되었습니다. 코드를 이것과 비교하십시오. 그런 다음 여전히 문제가 있는지 없는지 답장을 보내주세요. :)

   for ( int cnt= 0 ; cnt< OrdersTotal (); cnt++)
     {
       if ( OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES) == true &&
           OrderSymbol ()==Pair && 
           OrderType ()==OP_BUY)
          {
          // code to close
          }
      }
 
crossy :

안녕 친구,

당신의 도움이 필요합니다.

나는 그 프로세스의 일부가 기능을 사용하여 거래를 마감해야 하는 EA를 만들었습니다. 다음은 관련 kod의 행입니다.

EA가 거래를 마감하지 않는 이유를 좀 도와주실 수 있나요? 감사합니다.

루프가 있고 (보류 중) 주문을 닫거나 삭제하는 경우 카운트다운이 아니라 카운트다운을 해야 합니다. . .

Close_Single_P 함수에 루프가 있는 이유는 무엇입니까? 단일 주문을 마감하도록 설계되지 않았습니까? 함수를 호출할 때 기호, 티켓 번호, 주문 유형 및 위치 크기를 전달합니다. . . 그것이 주문을 마감하는 데 필요한 전부입니다. . . 글쎄, 당신은 닫을 가격이 필요하고 그것을 위해 OrderClosePrice()를 사용할 수 있고 구매 또는 판매인지 걱정할 필요가 없습니다. . . 사실, 그냥 Function을 없애고 function call 대신에 이 줄을 사용하세요. . .

 OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), Slippage, Yellow );

. . . 그건 그렇고, 당신은 어디에서 Slippage를 설정합니까? 4/5 Digit Brokers에 대해 보상하고 있습니까?

Order 함수를 사용하면 값을 반환합니다. . . 이 반환 값은 함수가 작동했는지 여부를 알려줍니다. . . 이 반환 값을 사용하는 방법을 배우고 문제가 있다고 알려주면 Print 문을 사용하여 관련 정보를 로그에 보고합니다. . . . 그러면 추측하는 대신 무엇이 잘못되었는지 알게 될 것입니다. . . .

주문을 마감해야 합니까? 이것을 확인했습니까? . .

 if ( MarketInfo (Pair,MODE_BID) >= Open_P_BUY + MarketInfo (Pair,MODE_POINT)*factor*TP )

. . . 사실이다 ?

해당 줄이 true 인 경우 실행되는 print 문을 추가하지 않는 이유는 무엇입니까? . . 그러면 있는지 여부를 알 수 있습니다. . .

 if ( MarketInfo (Pair,MODE_BID) >= Open_P_BUY + MarketInfo (Pair,MODE_POINT)*factor*TP )
   {
   Print ( "Trying to close Order: " , OrderTicket ());                             // <---- tells you that the   if  returned true
   if (! OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), Slippage, Yellow )
       Print ( "OrderClose failed, error # " , GetLastError ());                           // <------- reports the error if the OrderClose failed . . 
   }
 
onewithzachy :

더 나은 읽기를 위해 SRC 버튼을 사용하여 코드를 표시하십시오. :)

그러면 GetLastError()의 반환값은 무엇입니까?


코드는 약 4,000줄입니다...

어쨌든 오류 마사지는 받지 않습니다.

 
crossy :


코드는 약 4,000줄...

어쨌든 오류 마사지는 받지 않습니다.

모든 코드를 게시할 필요는 없습니다. . . 그러나 코드를 게시할 때 SRC 버튼을 사용 하십시오 . . .

로그에 보고하지 않기 때문에 오류 메시지가 표시되지 않습니다. . . 반환 값을 확인 하고 오류를 보고해야 합니다.

 
RaptorUK :

루프가 있고 (보류 중) 주문을 닫거나 삭제하는 경우 카운트다운이 아니라 카운트다운을 해야 합니다. . .

Close_Single_P 함수에 루프가 있는 이유는 무엇입니까? 단일 주문을 마감하도록 설계되지 않았습니까? 함수를 호출할 때 기호, 티켓 번호, 주문 유형 및 위치 크기를 전달합니다. . . 그것이 주문을 마감하는 데 필요한 전부입니다. . . 글쎄, 당신은 닫을 가격이 필요하고 그것을 위해 OrderClosePrice()를 사용할 수 있고 구매 또는 판매인지 걱정할 필요가 없습니다. . . 사실, 그냥 Function을 없애고 function call 대신에 이 줄을 사용하세요. . .

. . . 그건 그렇고, 당신은 어디에서 Slippage를 설정합니까? 4/5 Digit Brokers에 대해 보상하고 있습니까?

Order 함수를 사용하면 값을 반환합니다. . . 이 반환 값은 함수가 작동했는지 여부를 알려줍니다. . . 이 반환 값을 사용하는 방법을 배우고 문제가 있다고 알려주면 Print 문을 사용하여 관련 정보를 로그에 보고합니다. . . . 그러면 추측하는 대신 무엇이 잘못되었는지 알게 될 것입니다. . . .

주문을 마감해야 합니까? 이것을 확인했습니까? . .

. . . 사실이다 ?

해당 줄이 true 인 경우 실행되는 print 문을 추가하지 않는 이유는 무엇입니까? . . 그러면 있는지 여부를 알 수 있습니다. . .


Wize 제안에 대해 Raptor에게 감사드립니다. 항상, 당신은 나를 현명하고 명확하게 도와줍니다.

방금 제안한 것을 시도해 보겠습니다.

최고의 소원.

 

이미 티켓을 선택했는데 같은 티켓을 찾기 위해 두 번째 orderSelect 루프를 거치는 이유는 무엇입니까?

왜 OrderClose 반환 값을 확인 하지 않고 오류를 인쇄하여 WHY를 찾지 않습니까?

 
WHRoeder :

이미 티켓을 선택했는데 같은 티켓을 찾기 위해 두 번째 orderSelect 루프를 거치는 이유는 무엇입니까?

왜 OrderClose 반환 값을 확인하지 않고 오류를 인쇄하여 WHY를 찾지 않습니까?


친구 여러분, 노력해 주셔서 감사합니다.

나는 WHRoeder의 코멘트를 볼 때까지 약간의 변경을 가했지만 아무 것도 도움이 되지 않았습니다.

당신은 천재입니다, 나는 당신이 옳다고 생각합니다.

월요일에 수정된 EA를 사용해 보겠습니다.

좋은 주말 되세요.

 
crossy :


친구 여러분, 노력해 주셔서 감사합니다.

나는 WHRoeder의 코멘트를 볼 때까지 약간의 변경을 가했지만 아무 것도 도움이 되지 않았습니다.

당신은 천재입니다, 나는 당신이 옳다고 생각합니다.

월요일에 수정된 EA를 사용해 보겠습니다.

좋은 주말 되세요.


글쎄, 내 친구,

나는 당신의 제안을 모두 수행했지만 EA는 실패했습니다.

더 많은 아이디어가 있습니까?

 

다시 해보자

   #include "..\libraries\stdlib.mq4" // drag and drop from libraries to very top of your code
  
   for ( int cnt = OrdersTotal (); cnt >= 0 ; cnt--)   // from RaptorUK, count it down to zero 
     {
     if ( OrderSelect (cnt,SELECT_BY_POS,MODE_TRADES) == true && OrderSymbol () == Pair) // this is how to write OrderSelect()
        {
         if ( OrderType ()== OP_BUY) // the code below is to close buy position only
          {
          
           //---
           if ( MarketInfo (Pair,MODE_BID) >= Open_P_BUY + MarketInfo (Pair,MODE_POINT) * factor * TP) // from RaptorUK, is this statemement true ?
             {
               //CLOSE_Single_P(Pair,"LONG",OrderTicket(),OrderLots()) // From RaptorUK & WHRoeder, you don't have to do OrderSelect() twice
             Print ( "Trying to close buy position : " , OrderTicket ());                            
             if (! OrderClose ( OrderTicket (), OrderLots (), OrderClosePrice (), Slippage, Yellow )) // From Raptor UK, are you doing the slippage correctly ?
                 Print ( "failed to close buy position " , ErrorDescription( GetLastError ())  ); 
             }
             else
             {
             Print ( "Not qualify to close buy position " , OrderTicket ()); // from RaptorUK, is this statemement true ?, if not this print will tell you
             }
           //---
             
           }
           /*
           else
           {
           if (OrderType() == OP_SELL)
              {
              
              }
           }
           */
        }
     }
      

아직 Valentino Rossi의 MotoGP Le Mans 두 번째 연단을 읽는 동안 이 글을 올바르게 작성하기를 바랍니다. :)

 
onewithzachy :

다시 해보자

아직 Valentino Rossi의 MotoGP Le Mans 두 번째 연단을 읽는 동안 이 글을 올바르게 작성하기를 바랍니다. :)


onewithzachy님, 감사합니다.

먼저 다음과 같은 작은 실수가 있다고 생각합니다.

for(int cnt = OrdersTotal() -1 ; cnt >= 0; cnt--)

녹색과 굵은 수정을 추가해야 합니다.

하지만 다음 줄이 어떻게 도움이 되는지 이해가 되지 않습니까?

#include "..\libraries\stdlib.mq4"

고마워, Y.