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

 
crossy :


여기서 Orderselect가 FALSE인 경우 EA가 코드 라인으로 돌아갈 수 있는 방법: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )

???

계속 을 사용하여 루프의 다음 값으로 이동할 수 있습니다. . . 또는 break 를 사용하여 루프에서 탈출하십시오. . . 각각에 대한 문서 링크를 클릭하십시오.
 
crossy :

여기서 Orderselect가 FALSE인 경우 EA가 코드 라인으로 돌아갈 수 있는 방법: for(int cnt=OrdersTotal(); cnt > 0; cnt-- )


???

코드가 잘못되었습니다. . . .

cnt 는 OrdersTotal() - 1 에서 시작하여 cnt >= 0 까지 감소해야 합니다. . . . 첫 번째 항목은 1이 아닌 0입니다.

이것이 내가 코드를 보도록 요청한 이유입니다. . . 문제를 식별할 수 있을 만큼 충분히 보여주었습니다. . . 아마. ;-)

 
RaptorUK :

코드가 잘못되었습니다. . . .

cnt 는 OrdersTotal() - 1 에서 시작하여 cnt >= 0 까지 감소해야 합니다. . . . 첫 번째 항목은 1이 아닌 0입니다.

이것이 내가 코드를 보도록 요청한 이유입니다. . . 문제를 식별할 수 있을 만큼 충분히 보여주었습니다. . . 아마. ;-)


매우 정확합니다. 고마워, 위즈맨!
 
crossy :

매우 정확합니다. 고마워, 위즈맨!


그리고 또 다른 아이디어:

조건이 많으면 다음과 같이 작성할 수 있습니다.

If( X>b && B>S && NB<F......)

{

BBB= 5;

}페

여기서 EA는 브래킷 내의 모든 조건을 계산해야 합니다.

그러나 효율성을 찾고 있다면 (4,000 코드 라인 ...) 다음을 선호합니다.

만약 ( X>b )

{

동안 (B>S)

{

동안 (NB<F..)

{

BBB=5;

}

부서지다;

}

부서지다;

}

2개의 변형이 동일한가요?

와이.

 

crossy, 코드를 작성할 때 SRC 버튼을 사용하십시오. 훨씬 더 읽기 쉽습니다.

그래서 다음과 같이 표시됩니다.

   //--- first code
   If (X>b && B>S && NB<F......)
     {
      BBB= 5 ;
     }
   
   // --- second code
   If (X>b)
     {
       while (B>S)
        {
         while (NB<F..)
           {
            BBB= 5 ;
           }
         break ;
         }
       break ;
     }

mql4 https://book.mql4.com/operators/assign 의 "if, while 및 for" 루프에 대한 설명이 있습니다.

두 번째 코드에서는 break를 사용하기 때문에 괜찮습니다. 그러나 BBB = 5를 얻는 데는 먼 길입니다. 저는 첫 번째 코드를 선호하며 리소스를 덜 사용합니다.

 
crossy :


그리고 또 다른 아이디어:

조건이 많으면 다음과 같이 작성할 수 있습니다.

If( X>b && B>S && NB<F......)

{

BBB= 5;

}페

여기서 EA는 브래킷 내의 모든 조건을 계산해야 합니다.

그러나 효율성을 찾고 있다면 (4,000 코드 라인 ...) 다음을 선호합니다.

while을 사용하면 무한 루프에 빠질 수 있습니다. . .
 
두분다 감사합니다!.
 
onewithzachy :

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

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


onewithzachy에게 특별한 감사를 전합니다.

ORDERSELECT가 catch되지 않을 수 있다는 것을 몰랐으므로 알 수 없는 오류가 있을 수 있습니다.

4016줄이었던 내 코드는 거의 4500줄이 되었지만 오류는 없었습니다.

친구 여러분, 감사합니다.

와이.

 

안녕 친구,

여기에서 긴 여정 후에 EA를 잘 사용했지만 다음과 같은 문제가 하나 더 있습니다.

다음 코드 줄이 있습니다.

CLOSE_Single_P(Pair1,"LONG",OrderT,OrderL);

처럼:

Pair1 은 기호,

"LONG" 은 장기 거래의 표시이며,

OrderT주문 티켓 번호,

OrderL 은 주문 로트 크기입니다.

기능은 다음과 같습니다.

무효 CLOSE_Single_P(문자열 SYMB, 문자열 TREN, int TICKET, 이중 LOTT)
{
이중 중국;
bool 검사 = 거짓;
( int cntt=0; cntt<20000; cntt++ )
{
만약 ( 체크 )
{
Check_Ini();
반품;
}
for ( int vvv = OrdersTotal()-1; vvv >= 0; vvv--)
{
if ( OrderSelect(vvv, SELECT_BY_POS, MODE_TRADES) )
{
확인 = 거짓;
if ( TREN == "LONG" )
PRC = MarketInfo(SYMB,MODE_BID);
또 다른
if ( TREN == "SHORT" )
PRC = MarketInfo(SYMB,MODE_ASK);

확인 = OrderClose(TICKET,LOTT,PRC,Slippage,Yellow);
만약 ( 체크 )
부서지다;
}
}
}
반품;
}

내 문제는: EA는 때때로 거래를 아주 잘 마감하지만 때로는 EA가 지연을 마감하지만 이미 마감되었음에도 불구하고 이를 마감할 티켓을 계속 찾고 있습니다.

("알 수 없는 티켓 번호.." 오류가 발생합니다.

제가 논리적 오류가 있는 것 같아요.

친절한 도움을 주셔서 감사합니다.

와이

 

제발 . . . . . .