I forgot:
이중 거리 = 1000000.0;
아무도 나를 도울 수 있습니까?
1. 이것은 코드의 일부일 뿐입니다. 예를 들어 CheckFirstOP() 함수를 보여주세요.
2. for 루프가 증가합니다. 루프에서 주문을 닫으면 제대로 작동하지 않습니다. 참조 -> https://www.mql5.com/en/forum/119840 .
3. 변수 명명 규칙이... 그렇게 좋지 않습니다.
4. 형식을 유지하려면 SRC 버튼을 사용하여 코드를 게시하십시오. 이렇게 코드를 읽는 것은 매우 어렵습니다.
1. 이것은 코드의 일부일 뿐입니다. 예를 들어 CheckFirstOP() 함수를 보여주세요.
2. for 루프가 증가합니다. 루프에서 주문을 닫으면 제대로 작동하지 않습니다. 참조 -> https://www.mql5.com/en/forum/119840 .
3. 변수 명명 규칙이... 그렇게 좋지 않습니다.
4. 형식을 유지하려면 SRC 버튼을 사용하여 코드를 게시하십시오. 이렇게 코드를 읽는 것은 매우 어렵습니다.
double Dist = 1000000.0 ; if ( CheckFirstOP ( OP_BUY ) > 1 ) { for ( l_pos_44 = 0 ; l_pos_44 < OrdersTotal ( ) ; l_pos_44 + + ) { OrderSelect ( l_pos_44 , SELECT_BY_POS , MODE_TRADES ) ; if ( OrderSymbol ( ) ! = Symbol ( ) | | OrderMagicNumber ( ) ! = MagicNumber | | OrderType ( ) ! = OP_BUY ) continue ; double Price = OrderOpenPrice ( ) ; if ( NormalizeDouble ( MathAbs ( Bid - Price ) , Digits ) > NormalizeDouble ( Dist , Digits ) ) { Dist = MathAbs ( Bid - Price ) ; int Ticket = OrderTicket ( ) ; double Lot = OrderLots ( ) ; OrderClose ( Ticket , Lot , OrderClosePrice ( ) , 3 ) ; } } } int CheckFirstOP ( int a_cmd_0 ) { int l_count_4 = 0 ; for ( int l_pos_8 = 0 ; l_pos_8 < OrdersTotal ( ) ; l_pos_8 + + ) { if ( OrderSelect ( l_pos_8 , SELECT_BY_POS ) ) { if ( OrderMagicNumber ( ) = = MagicNumber & & OrderSymbol ( ) = = Symbol ( ) ) { if ( OrderType ( ) = = a_cmd_0 ) { l_count_4 + + ; break ; } } } } return ( l_count_4 ) ; }
my fault...i'm very new to this stuf...
3. 변수 명명 규칙이... 그렇게 좋지 않습니다.
디 컴파일러 이름 규칙처럼 보입니다 ...
"그는 이 일에 익숙하지 않다"
디 컴파일러 이름 규칙처럼 보입니다 ...
"그는 이 일에 익숙하지 않다"
아마 예...제가 구입한 EA를 수정하고 싶습니다...그들은 또한 저에게 코드를 보냈습니다(그들은 실수로 말했습니다)...이제 나는 이 이상한 명명법의 이유를 이해합니다...내가 말했듯이' m new(이 사이트에서 MQL4에 대한 책을 방금 읽었습니다). 최소한 처음에는 많은 것을 수정하고 싶지 않았기 때문에 내가 찾은 이름을 그대로 두었습니다.
안녕
선택한 주문은 " OrderClose ( OrderTicket () , OrderLots () , OrderClosePrice () , 0 ) ;" 표현식으로 완전히 닫을 수 있습니다 .
친애하는
내 문제를 해결하지 않습니다 ...
2. for 루프가 증가합니다. 루프에서 주문을 닫으면 제대로 작동하지 않습니다. 참조 -> https://www.mql5.com/en/forum/119840 .
왜 증가가 작동하지 않습니까? MQL4의 책에는 언급되지 않았습니다(제 생각에는)...어쨌든 시도했습니다.
if ( CheckFirstOP ( OP_BUY ) > 1 ) { for ( int i = OrdersTotal ( ) - 1 ; i > = 0 ; i - - ) { OrderSelect ( i , SELECT_BY_POS , MODE_TRADES ) ; if ( OrderSymbol ( ) ! = Symbol ( ) | | OrderMagicNumber ( ) ! = MagicNumber | | OrderType ( ) ! = OP_BUY ) continue ; double Price = OrderOpenPrice ( ) ; if ( NormalizeDouble ( MathAbs ( Bid - Price ) , Digits ) > NormalizeDouble ( Dist , Digits ) ) { Dist = MathAbs ( Bid - Price ) ; int Ticket = OrderTicket ( ) ; double Lot = OrderLots ( ) ; OrderClose ( Ticket , Lot , OrderClosePrice ( ) , 3 ) ; } } }
it doesn't work, don't know why
지금 이 줄에서 간단히 확인하십시오.
예, 물론 시도했지만 아무 것도 변경되지 않았습니다... 이 프로그래밍으로 이상한 점들이 있습니다. :) 간단한 마감 주문을 작성하는 것은 어렵지 않을 것입니다(내 생각에)...
it doesn't work, don't know why주문 인덱스 5를 닫으면 주문 인덱스 6이 인덱스 5가 되고 7이 6이 되는 식입니다. 계산하면 다른 모든 열린 주문이 누락됩니다.
주문 인덱스 5를 닫으면 주문 인덱스 6이 인덱스 5가 되고 7이 6이 되는 식입니다. 계산하면 다른 모든 열린 주문이 누락됩니다.
아, 알겠습니다...어쨌든 코드는 열린 주문을 하나만 유지하고 2개의 주문이 열렸을 때 즉시 작업을 시작하고 모든 주문(예: 2개의 주문)을 선택하고 분석한 후 그 중 하나를 닫는 코드입니다...그래서 나는 그것을 선택하는 순서대로 증가시키는 것이 큰 실수라고 생각하지 않습니다 ... 어쨌든 나는 결과없이 감소하는 방법을 시도했습니다 ... 아마도 잘못된 방법으로 시도하고있는 것 같습니다 ... 모르겠습니다 ... 할 수 있습니다 하나는 내 코드를 시도하고 그것이 실제로 거래를 닫는지 확인하십시오 ... 아니면 누구나 이전에 열린 주문을 선택하고 닫는 간단한 코드를 작성할 수 있습니까?
감사합니다
여러분께 인사드립니다. 시장 주문을 마감하기 위한 코드(다른 코드 수정)를 만들었습니다.
정수 l_pos_44 = 0;
if (CheckFirstOP(OP_BUY) > 1) {
(l_pos_44 = 0; l_pos_44 < OrdersTotal(); l_pos_44++) {
주문 선택(l_pos_44, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber || OrderType() != OP_BUY) 계속;
이중 가격 = OrderOpenPrice();
if (NormalizeDouble(MathAbs(Bid - Price), Digits) < NormalizeDouble(Dist, Digits)) {
Dist = MathAbs(입찰가 - 가격);
int 티켓 = OrderTicket();
이중 로트 = OrderLots();
OrderClose(티켓, 로트, 입찰, 3);
}
}
(매도 포지션을 닫기 위한 동일한 코드(분명히 OP_BUY 대신 OP_SELL 변수 사용))
int CheckFirstOP(int a_cmd_0) {
정수 l_count_4 = 0;
(int l_pos_8 = 0; l_pos_8 < OrdersTotal(); l_pos_8++) {
if (주문선택(l_pos_8, SELECT_BY_POS)) {
if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol()) {
if (주문 유형() == a_cmd_0) {
l_count_4++;
부서지다;
}
}
}
}
반환(l_count_4);
}
유형에 대해 1개 이상의 포지션이 열렸을 때 롱 또는 숏 포지션을 마감하는 코드가 필요합니다...총 2개의 포지션(1개 매수 및 1개 매도)을 유지하려면...가장 최근에 개설된 포지션도 유지해야 합니다 즉, 이 경우 매수 포지션의 오픈 가격이 더 높고 매도 포지션의 오픈 가격이 더 낮습니다. 문제는 코드가 위치를 닫지 않는다는 것입니다... 어느 위치도 닫지 않습니다.
when: "if (CheckFirstOP(OP_BUY) == 1)" 그러면 코드가 열린 직후 첫 번째 위치를 닫습니다... 즉, 매수 및 매도 주문 이 열린 후 다음 틱으로 닫힙니다. 그리고 "if (CheckFirstOP(OP_BUY) > 1)"인 경우 닫혀 있는 위치가 없습니다. 내가 뭘 잘못하고 있는지 모르겠어요.
아무도 나를 도울 수 있습니까?