루프 및 주문 마감 또는 삭제 - 페이지 4

 
ggekko :

안녕하세요 전문가 여러분, 이 솔루션에 대해 어떻게 생각하십니까?

 while ( OrdersTotal ()> 0 )
이는 다른 모든 EA(자체 포함) 및 수동 거래 와 호환되지 않음을 의미합니다. (다른 차트에서 거래)
 
WHRoeder :
게코 :

안녕하세요 전문가 여러분, 이 솔루션에 대해 어떻게 생각하십니까?

이는 다른 모든 EA(자체 포함) 및 수동 거래와 호환되지 않음을 의미합니다. (다른 차트에서 거래)

당연하지. 이것은 전체 닫기입니다.

때때로 "원본" 버전이 작동하지 않는 상황(예: 너무 많은 미결 거래를 즉시 마감하려는 경우)이 있습니다. 이 버전이 좋습니다.

 
ggekko :

당연하지. 이것은 전체 닫기입니다.

때때로 "원본" 버전이 작동하지 않는 상황(예: 너무 많은 미결 거래를 즉시 마감하려는 경우)이 있습니다. 이 버전이 좋습니다.

왜 오류에 대응하려고 하지 않습니까? 오류를 분석하고 그에 따라 대응해야 하지 않습니까? 일부 오류의 경우 다시 시도할 수 있고 다른 오류의 경우 시도를 중지해야 합니다.
 

안녕,


while 루프에 대해 질문이 있습니다. 가능한 한 자주 루프에서 현재 EA를 실행하고 싶습니다. 그래서 제 생각은 현재 코드를 while 루프 안에 포함시키는 것입니다. 이 루프 안에는 while이 1밀리초마다 실행되도록 하는 잠자기 기능 이 포함되어 있습니다.


그러나 내가 이 작업을 수행했을 때(각 루프에서 무슨 일이 일어나고 있는지 추적하는 일부 Print("...") 함수 호출이 있음) 이 정지가 표시되고 더 이상 화면에 인쇄되지 않습니다.

어떤 문제가 있는지 궁금합니다. 1ms만큼 자주 루프에서 EA를 실행해도 괜찮습니까? 예를 들어 매 밀리초마다 서버에서 최신 입찰/매도 요청을 얻으려고 하는 데 문제가 있습니까? 이렇게 하면 너무 많은 부하가 걸려서 정지가 발생합니까?

아마도 내 알고리즘이 수행하는 다른 작업으로 인해 이 문제가 발생할 수 있습니다. 확실하지 않습니다.


200ms 주기로 실행했지만 여전히 동일한 문제가 발생합니다(즉각적인 것은 아니지만). 로그 파일에 너무 많은 행을 인쇄하는 데 문제가 있을 수 있습니까?



이것에 대한 조언에 감사드립니다.

문안 인사,


씨.

 
코드 문제일 수 있지만 코드를 모르십니까?
 

14967057 :

while 루프에 대해 질문이 있습니다. 가능한 한 자주 루프에서 현재 EA를 실행하고 싶습니다.

그래서 제 생각은 현재 코드를 while 루프 안에 포함시키는 것입니다. 이 루프 안에는 while이 1밀리초마다 실행되도록 하는 잠자기 기능이 포함되어 있습니다.

최신 입찰/매도 요청을 가져오는 데 문제가 있습니까?

로그 파일에 너무 많은 행을 인쇄하는 데 문제가 있을 수 있습니까?

  1. 이 스레드는 주문 마감 및 삭제에 관한 것이었습니다. 주제를 벗어난 질문에 대해 스레드를 가로채지 마십시오. 새 게시물을 게시합니다.
  2. 왜 계속 반복하고 싶습니까? 아무것도 바뀌지 않습니다. 당신이하는 일은 CPU 시간을 낭비하는 것입니다.
  3. 처음부터 돌아가고 Bid/Ask가 변경되면 가능한 한 빨리 시작 이 호출됩니다.
  4. 예, 사용 가능한 모든 램을 라인으로 채웠습니다. Windows가 디스크에 저장하는 것보다 더 빨리 말이죠. 모든 프로그램은 페이지 아웃됩니다. 모든 것이 중단됩니다.
 

안녕,

내가 가진 문제는 1ms 절전 모드로 while 루프 안에 EA 코드를 캡슐화했기 때문이 아닙니다. 이 부분은 문제 없이 지난 30분 동안 지금 실행하고 있기 때문에 (화면에 인쇄하는 위치에 관계없이) 괜찮아 보입니다.


문제는 결국 EA가 무한 루프에 갇히게 만든 코드에 있는 동안 또 다른 교활한 행위로 인해 발생했습니다.

입력 gooly와 Roesder에 감사드립니다.

문안 인사,

 

모두들 안녕. 이 주제를 읽고 질문이 있습니다. 보류 중인 주문(STOP만, LIMIT 없음)을 삭제 하지만 다른 보류 중인 주문이 활성화된 경우에만(OP_SELL 또는 OP_BUY 시작) 코드를 만들려고 합니다. 그래서 코드는 이것입니다(그러나 실수가 있지만 어디 있는지 모르겠습니다). 제 코드 좀 봐주시겠어요?

 bool    result;
   int    i, j, cmd, cmd2,total;

   total= OrdersTotal ();

   for (i= 0 ; i<total; i++)
     {
       if ( OrderSelect (i,SELECT_BY_POS,MODE_TRADES))
        {
         cmd=OrderType();
         
         if (cmd!=OP_BUYSTOP && cmd!=OP_SELLSTOP)  //take an orders which was activated 
           {
           for (j= 0 ; j<total; j++)   //another variable j 
     { 
     if ( OrderSelect (j,SELECT_BY_POS,MODE_TRADES)){ cmd2=OrderType();
     if (cmd2!=OP_BUY && cmd2!=OP_SELL)
           {
            
            OrderPrint();
            
            result= OrderDelete ( O rderTicket ());  //first pending order become to OP_SELL or OP_BUY, second pending order will be delete
            if (result!=TRUE) Print("LastError = ", GetLastError());
            break;
           }
        }
       }
     }
     }
   }
 

OrdersTotal()이 올바르지 않습니다...

나는 OrdersTotal()을 사용 하여 올바른 결과를 제공하지 않는 루프 코드 시퀀스에 놀랐습니다(두 개의 다른 브로커에서 관찰됨).

WINE 3.0을 실행하는 Linux Ubuntu-MATE 16.04 데스크탑에서 MT4 버전 1090을 사용하고 있습니다.

여기 내가 사용한 것이 있습니다 ...

for(int cc = 0; cc < OrdersTotal(); cc++)
{
if (!OrderSelect(cc, SELECT_BY_POS, MODE_TRADES) ) 계속;
if (OrderSymbol() != Symbol() ) 계속;
(OrderType() > 1) 계속하면; //--대기 중인 거래 무시

OpenTradent++; //--존재하는 해당 심볼의 모든 라이브 위치에 대해 카운트업
Print("이 기호의 공개 거래 수는 다음과 같습니다. ", OpenTradenct);
}

나는 두 개의 다른 브로커에서 OrdersTotal() 값이 MT4 브로커의 'Trade' 탭에 표시된 값과 항상 일치하지 않는다는 것을 알게 되었습니다. 처음에는 OrdersTotal()이 제대로 작동하지 않는 원인이 브로커라고 생각했습니다. 두 번째 브로커에서 눈치채고 MT4에 내부 '문제'가 있는지, 아니면 내 코드가 잘못된 것인지 아니면 MT4가 서버와 제대로 동기화하는 데 문제가 있는 것인지 궁금해지기 시작했습니다....?

이 포럼 스레드를 읽은 후 for..loop을 읽기 위해 결과를 변경해야 하는지 궁금합니다.

for(int cc = OrdersTotal() - 1, cc >= 0, cc--)
{
...........
}

또는 OnTick() 이벤트 중에 OrdersTotal()이 제대로 동기화되도록 하는 플래그 또는 코드 줄이 있습니까?

이에 대한 설명은 매우 도움이 될 것이며 대단히 감사하겠습니다!

 

</> 버튼을 사용하여 코드를 삽입하십시오.


사유: