모두들 안녕. 이 주제를 읽고 질문이 있습니다. 보류 중인 주문(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()을 사용 하여 올바른 결과를 제공하지 않는 루프 코드 시퀀스에 놀랐습니다(두 개의 다른 브로커에서 관찰됨).
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()이 제대로 동기화되도록 하는 플래그 또는 코드 줄이 있습니까?
안녕하세요 전문가 여러분, 이 솔루션에 대해 어떻게 생각하십니까?
안녕하세요 전문가 여러분, 이 솔루션에 대해 어떻게 생각하십니까?
당연하지. 이것은 전체 닫기입니다.
때때로 "원본" 버전이 작동하지 않는 상황(예: 너무 많은 미결 거래를 즉시 마감하려는 경우)이 있습니다. 이 버전이 좋습니다.
당연하지. 이것은 전체 닫기입니다.
때때로 "원본" 버전이 작동하지 않는 상황(예: 너무 많은 미결 거래를 즉시 마감하려는 경우)이 있습니다. 이 버전이 좋습니다.
안녕,
while 루프에 대해 질문이 있습니다. 가능한 한 자주 루프에서 현재 EA를 실행하고 싶습니다. 그래서 제 생각은 현재 코드를 while 루프 안에 포함시키는 것입니다. 이 루프 안에는 while이 1밀리초마다 실행되도록 하는 잠자기 기능 이 포함되어 있습니다.
그러나 내가 이 작업을 수행했을 때(각 루프에서 무슨 일이 일어나고 있는지 추적하는 일부 Print("...") 함수 호출이 있음) 이 정지가 표시되고 더 이상 화면에 인쇄되지 않습니다.
어떤 문제가 있는지 궁금합니다. 1ms만큼 자주 루프에서 EA를 실행해도 괜찮습니까? 예를 들어 매 밀리초마다 서버에서 최신 입찰/매도 요청을 얻으려고 하는 데 문제가 있습니까? 이렇게 하면 너무 많은 부하가 걸려서 정지가 발생합니까?
아마도 내 알고리즘이 수행하는 다른 작업으로 인해 이 문제가 발생할 수 있습니다. 확실하지 않습니다.
200ms 주기로 실행했지만 여전히 동일한 문제가 발생합니다(즉각적인 것은 아니지만). 로그 파일에 너무 많은 행을 인쇄하는 데 문제가 있을 수 있습니까?
이것에 대한 조언에 감사드립니다.
문안 인사,
씨.
14967057 :
while 루프에 대해 질문이 있습니다. 가능한 한 자주 루프에서 현재 EA를 실행하고 싶습니다.
그래서 제 생각은 현재 코드를 while 루프 안에 포함시키는 것입니다. 이 루프 안에는 while이 1밀리초마다 실행되도록 하는 잠자기 기능이 포함되어 있습니다.
최신 입찰/매도 요청을 가져오는 데 문제가 있습니까?
로그 파일에 너무 많은 행을 인쇄하는 데 문제가 있을 수 있습니까?
안녕,
내가 가진 문제는 1ms 절전 모드로 while 루프 안에 EA 코드를 캡슐화했기 때문이 아닙니다. 이 부분은 문제 없이 지난 30분 동안 지금 실행하고 있기 때문에 (화면에 인쇄하는 위치에 관계없이) 괜찮아 보입니다.
문제는 결국 EA가 무한 루프에 갇히게 만든 코드에 있는 동안 또 다른 교활한 행위로 인해 발생했습니다.
입력 gooly와 Roesder에 감사드립니다.
문안 인사,
모두들 안녕. 이 주제를 읽고 질문이 있습니다. 보류 중인 주문(STOP만, LIMIT 없음)을 삭제 하지만 다른 보류 중인 주문이 활성화된 경우에만(OP_SELL 또는 OP_BUY 시작) 코드를 만들려고 합니다. 그래서 코드는 이것입니다(그러나 실수가 있지만 어디 있는지 모르겠습니다). 제 코드 좀 봐주시겠어요?
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()이 제대로 동기화되도록 하는 플래그 또는 코드 줄이 있습니까?
이에 대한 설명은 매우 도움이 될 것이며 대단히 감사하겠습니다!
</> 버튼을 사용하여 코드를 삽입하십시오.