좀 더 복잡한 예를 들어 보겠습니다. . .
닫고자 하는 다음 주문이 있고 모두 동일한 매직 번호를 갖지만 일부는 EA와 다른 기호를 갖고 있다고 가정해 보겠습니다. 코드가 EA와 동일한 기호에 대한 주문을 종료하기를 원합니다. EURUSD:
위치 | 티켓 번호 | 상징 |
---|---|---|
0 | 111 | EURUSD |
1 | 222 | EURUSD |
2 | 333 | GBPUSD |
삼 | 444 | EURUSD |
4 | 555 | EURUSD |
루프를 통해 첫 번째 실행:
PositionIndex의 초기 값은 TotalNumberOfOrders - 1이며 5 - 1 = 4 이므로 위치 4의 주문이 선택되고 티켓 번호 555가 지정되며 이 주문은 매직 번호 및 기호와 일치하므로 성공적으로 삭제되고 나머지 주문은 다음과 같이 위치가 변경됩니다. 다음과 같다:
위치 | 티켓 번호 | 상징 |
---|---|---|
0 | 111 | EURUSD |
1 | 222 | EURUSD |
2 | 333 | GBPUSD |
삼 | 444 | EURUSD |
루프를 통해 두 번째 실행:
이제 PositionIndex의 값은 3이므로 위치 3의 주문, 티켓 번호 444, 이 주문은 매직 넘버와 심볼과 일치하므로 성공적 으로 삭제되고 나머지 주문은 다음과 같이 위치가 변경됩니다 .
위치 | 티켓 번호 | 상징 |
---|---|---|
0 | 111 | EURUSD |
1 | 222 | EURUSD |
2 | 333 | GBPUSD |
루프를 통해 세 번째 실행:
이제 PositionIndex의 값은 2이므로 위치 2의 주문이 선택되고 티켓 번호 333, 이 주문은 마법 번호와 일치하지만 기호는 일치 하지 않으므로 삭제되지 않고 나머지 주문은 변경되지 않습니다 .
위치 | 티켓 번호 | 상징 |
---|---|---|
0 | 111 | EURUSD |
1 | 222 | EURUSD |
2 | 333 | GBPUSD |
루프를 통한 4번째 실행:
이제 PositionIndex의 값 은 1 이므로 위치 1의 주문이 선택되고 티켓 번호는 222, 이 주문은 매직 넘버와 심볼과 일치하므로 성공적으로 삭제되고 나머지 주문은 다음과 같이 위치가 변경 됩니다 .
위치 | 티켓 번호 | 상징 |
---|---|---|
0 | 111 | EURUSD |
1 | 333 | GBPUSD |
다섯 번째이자 마지막 루프 실행:
이제 PositionIndex의 값은 0입니다 . 따라서 위치 0의 주문이 선택되고 티켓 번호 111, 이 주문이 성공적으로 삭제되었습니다. 값 0은 루프에 대한 마지막 유효한 값입니다 . . . 루프가 완료되었습니다.
일치하는 모든 주문을 성공적으로 삭제했으며 기호와 일치하지 않는 하나의 주문인 티켓 번호 333이 현재 위치 0에 있습니다. . .
위치 | 티켓 번호 | 상징 |
---|---|---|
0 | 333 | GBPUSD |
이 스레드에 대한 링크: 루프 및 주문 마감 또는 삭제
우와. 주문 마감에 대한 모든 정보입니다.
지난 137번의 거래를 통해 하루에 50핍 이상의 핍을 지속적으로, 매일(평균) 실패 없이 순조롭게 하려면 얼마나 많은 정보가 필요한지 궁금합니다.
그런 일을 하는 방법을 저에게 보여 주십시오. 그러면 매우 유용한 정보로 간주하겠습니다. 구루는 영원히 귀하의 직함입니다. 아멘.
우와. 주문 마감에 대한 모든 정보입니다.
지난 137번의 거래를 통해 하루에 50핍 이상의 핍을 지속적으로, 매일(평균) 실패 없이 순조롭게 하려면 얼마나 많은 정보가 필요한지 궁금합니다.
Raptor, 나는 mql4.이 스레드가 다시 한 번 내 의심을 없애는 데 도움이 된다는 것을 게시물을 한 눈에 알 수 있습니다. 좋은 일을 계속하십시오.tnx
또 다른 아이디어:
for (PositionIndex = 0 ; PositionIndex < OrdersTotal () ; PositionIndex ++) // <-- for loop to loop through all Orders . . COUNT DOWN TO ZERO ! { if ( ! OrderSelect (PositionIndex, SELECT_BY_POS, MODE_TRADES) ) continue ; // <-- if the OrderSelect fails advance the loop to the next PositionIndex if ( OrderMagicNumber() == MagicNo // <-- does the Order's Magic Number match our EA's magic number ? && OrderSymbol() == Symbol () // <-- does the Order's Symbol match the Symbol our EA is working on ? && ( OrderType() == OP_BUY // <-- is the Order a Buy Order ? || OrderType() == OP_SELL ) ) // <-- or is it a Sell Order ? add_trade_to_close_queue( OrderTicket()); // <-- You need to model the queue mechanism ... } // end of For loop
문안 인사.
또 다른 아이디어:
문안 인사.
이것은 내가 보는 가장 일반적인 오류 중 하나입니다. 아마도 부분적으로 Expert Advisor Builder와 같은 쓰레기 같은 것들 때문일 것입니다. 그래서 나중에 참조할 수 있도록 해당 주제에 대한 전용 스레드를 만들 때라고 생각했습니다.
문제
간단한 예를 들어 보겠습니다. 우리는 EA에 대한 모든 미결 주문을 마감하는 기능을 원합니다. 많은 예가 있지만 처음부터 하나 만들어 보겠습니다.
특정 EA에 대한 모든 주문을 닫고 싶기 때문에 루프가 필요합니다. 이 루프 내에 는 주문을 선택하는 코드, 올바른 기호 및 매직 번호인지 확인하는 코드, 마지막으로 주문을 종료하는 코드가 있습니다.
이 코드는 좋지 않습니다. . . 그것을 사용하지 마십시오 . . . 그 이유는 다음 섹션에서 설명하겠습니다. . .
설명
위의 코드를 통해 작업해 보겠습니다. . . 라인별, 주문별 주문 . . .
닫고자 하는 다음 주문이 있다고 가정해 보겠습니다. 모두 EA와 동일한 매직 번호와 기호를 갖고 있으므로 코드에서 모두 닫기를 원합니다.
루프를 통해 첫 번째 실행:
PositionIndex의 초기 값은 0이므로 위치 0의 주문이 선택되고 티켓 번호 111, 이 주문은 성공적으로 삭제되고 나머지 주문은 다음과 같이 위치가 변경됩니다.
루프를 통해 두 번째 실행:
이제 PositionIndex의 값이 1이므로 위치 1의 주문이 선택되고 티켓 번호 333, 이 주문은 성공적으로 삭제되고 나머지 주문은 다음과 같이 위치가 변경됩니다 .
루프를 통해 세 번째 실행:
이제 PositionIndex의 값이 2이므로 위치 2의 주문이 선택되고 티켓 번호 555, 이 주문은 성공적으로 삭제되고 나머지 주문은 다음과 같이 위치가 변경됩니다 .
루프를 통해 4번째 실행:
이제 PositionIndex의 값 은 3입니다. OrderSelect()는 위치 3에서 Order를 선택하려고 시도하고 실패 하고, continue는 루프의 다음 값으로 코드를 실행합니다. .
다섯 번째이자 마지막 루프 실행:
이제 PositionIndex의 값은 4입니다. OrderSelect()는 위치 4에서 Order를 선택하려고 시도하고 실패 하면 계속은 루프의 다음 값으로 코드를 실행합니다. . . 루프가 완료되었습니다.
이제 2개의 주문, 티켓 222번과 444번이 남았습니다. 티켓은 닫았어야 했지만 닫히지 않았습니다. . . 다음으로 이 문제를 해결하는 방법입니다.
해결책
다음 코드는 미결 주문을 닫거나 보류 주문을 삭제할 때 올바른 접근 방식입니다. . .
주요 차이점은 루프가 ( TotalNumberOfOrders - 1 ) 에서 0 으로 감소 한다는 것입니다.
다시 한 번 위의 코드를 통해 작업해 보겠습니다. . . 라인별, 주문별 주문 . . .
이전과 동일한 주문이 있습니다.
루프를 통해 첫 번째 실행:
PositionIndex의 초기 값은 TotalNumberOfOrders - 1이고 5 - 1 = 4 이므로 위치 4의 주문이 선택되고 티켓 번호 555, 이 주문은 성공적으로 삭제되고 나머지 주문은 다음과 같이 위치가 변경됩니다.
루프를 통해 두 번째 실행:
이제 PositionIndex의 값은 3이므로 위치 3의 주문이 선택되고 티켓 번호 444, 이 주문은 성공적으로 삭제되고 나머지 주문은 다음과 같이 위치가 변경됩니다 .
루프를 통해 세 번째 실행:
이제 PositionIndex의 값이 2이므로 위치 2의 주문이 선택되고 티켓 번호 333, 이 주문은 성공적으로 삭제되고 나머지 주문은 다음과 같이 위치가 변경됩니다 .
루프를 통해 4번째 실행:
이제 PositionIndex의 값 이 1 이므로 위치 1의 주문이 선택되고 티켓 번호 222, 이 주문은 성공적으로 삭제되고 나머지 주문은 다음과 같이 위치가 변경됩니다 .
다섯 번째이자 마지막 루프 실행:
이제 PositionIndex의 값은 0입니다 . 따라서 위치 0의 주문이 선택되고 티켓 번호 111, 이 주문이 성공적으로 삭제되었습니다. 값 0은 루프에 대한 마지막 유효한 값입니다 . . . 루프가 완료되었습니다.
일치하는 모든 주문을 성공적으로 삭제했습니다. . .
이 스레드에 대한 링크: 루프 및 주문 마감 또는 삭제