EA는 BUY 및 SELL 주문을 혼합합니다. - 페이지 3

 
WHRoeder :

int OrderType = OrderType()은 정상이 아닙니다. 하나는 다른 하나를 숨기고 있을 수 있습니다(로컬 선언은 오류 없이 전역을 숨깁니다.)

정수 주문 유형 = 주문 유형()

원래 코드는 . . . .

 int orderType;
   for (cnt = total- 1 ; cnt >= 0 ; cnt--)
   {
       while (! OrderSelect (cnt, SELECT_BY_POS)) { Sleep ( 500 );}
      orderType = OrderType();

. . . 당신이 제안하는 것과 효과적으로 동일한 것은 무엇입니까?

나는 dvarrin 이 그의 문제가 그의 티켓 번호에 있다고 말하는 것 같아요.

 

아니요.

루프 외부에서 선언된 주문 유형 은 orderType의 값을 다음 주기로 효과적으로 전달하며 오류가 발생하더라도 해당 값은 다음 조건문에 입력됩니다.

즉시 값을 OrderType()으로 설정하여 내부 루프를 선언하면 이러한 오류가 발생할 여지가 없습니다.

(OP 문제가 아닐 수도 있지만 다른 문제가 발생하지 않도록 방지할 수 있음) 시도하지 않는 것은 무엇입니까?

또한 잠자는 0.5초는 약간 과도합니다. while 루프는 CPU 부하에 영향을 미치지 않고 10밀리초 절전 타이머로 괜찮을 것입니다(거의 :P)

 
forexCoder :

아니요.

루프 외부에서 선언된 주문 유형은 orderType의 값을 다음 주기로 효과적으로 전달하며 오류가 발생하더라도 해당 값은 다음 조건문에 입력됩니다.

즉시 값을 OrderType()으로 설정하여 내부 루프를 선언하면 이러한 오류가 발생할 여지가 없습니다.

(OP 문제가 아닐 수도 있지만 다른 문제가 발생하지 않도록 방지할 수 있음) 시도하지 않는 것은 무엇입니까?

또한 잠자는 0.5초는 약간 과도합니다. while 루프는 CPU 부하에 영향을 미치지 않고 10밀리초 절전 타이머로 괜찮을 것입니다(거의 :P)


나는 문제가 EA를 앞으로 테스트할 때 "수동 확인 요청"을 사용하는 것으로 의심되지만 정확히 무슨 일이 일어나는지 이해하지 못합니다.

내가 아는 것은 OrderType이라는 변수가 같은 이름을 가진 메서드를 방해할 방법이 없고 선언 위치가 내 문제와 아무 관련이 없다는 것뿐입니다.

문제는 OrderTicket(), OrderStoploss(), ...가 OrderSelect()를 사용한 후 동일한 주문에 대한 데이터를 제공하지 않는다는 것입니다.

지역 변수를 사용하고 OrderSelect() 호출 후에 설정하면 작동하지만 OrderTicket() 또는 OrderStoploss()를 직접 사용하면 잘못된 값을 제공합니다.


내 코드에서 OrderStopLoss()가 "for" 루프의 동일한 반복 내에서 다른 주문의 stoploss를 반환하는 이유는 무엇입니까?

 

EA의 전체 코드는 다음과 같습니다.

문제는 updateFbOrders() 메서드의 첫 번째 "for" 루프에 있습니다.

테스트하기 위해 차트에 악어 및 프랙탈 표시기를 추가하고 마지막 위쪽 프랙탈이 악어 선 위에 있고 마지막 아래쪽 프랙탈이 악어 선 아래에 있는 차트를 찾습니다.

그런 다음 보류 중인 구매 및 판매 주문을 생성해야 합니다. 프랙탈 중 하나가 이탈하면 즉시 주문을 엽니다.

그런 다음 프랙탈이 변경될 때마다 각 주문의 손절매를 수정하지만 잘못된 주문에 대한 손절매를 설정합니다.

경고 창을 확인하고 다음과 같은 메시지를 찾습니다. Count: 1 Stoploss 1.41008000 for buy order: 46454014 orderType: 5, 그리고 주문 46454014를 확인하면 실제로 "판매" 주문임을 알 수 있습니다. 손절매가 변경되지 않더라도 주문을 계속 수정합니다. 이는 잘못된 손절매 수준 을 취하기 때문입니다.
 

이것은 어리석은 짓이다. 전체 코드를 붙여넣는 것이 아닙니다.

당신은

areBuyOrdersInProfitAt

내부에 표시되지 않는 기능 을 붙여넣으십시오. 지금쯤이면 다른 곳에서 실수를 했을 가능성이 매우 높습니다. 다른 곳에서 OrderSelect 기능을 사용하고 있습니까?

또한 longSL 및 shortSL 변수는 어디에 설정합니까? 코드의 해당 부분도 붙여넣으십시오.

편집: 지금 새 게시물을 보고 입력하는 동안 붙여넣었습니다.

 
forexCoder :

이것은 어리석은 짓이다. 전체 코드를 붙여넣는 것이 아닙니다.

당신은

areBuyOrdersInProfitAt

내부에 표시되지 않는 기능을 붙여넣으십시오. 지금쯤이면 다른 곳에서 실수를 했을 가능성이 매우 높습니다. 다른 곳에서 OrderSelect 기능을 사용하고 있습니까?

또한 longSL 및 shortSL 변수는 어디에 설정합니까? 코드의 해당 부분도 붙여넣으십시오.

편집: 지금 새 게시물을 보고 입력하는 동안 붙여넣었습니다.

안녕하세요 forexCoder

이전 게시물에 EA를 추가했습니다.


그러나 나는 당신이 문제를 지적했다고 생각합니다. 저는 "areBuyOrdersInProfitAt" 메소드에서 OrderSelect()를 사용 하고 있습니다. :-)))))))))))))

 

네, 제가 생각한 대로입니다.

areBuyOrdersInProfitAt에는 다른 OrderSelect 함수 가 포함되어 있으며 원래 스니펫의 작업을 덮어씁니다. 이 areBuyOrdersInProfitAt 함수가 반환되면 OrderSelect가 변경되고 티켓도 변경됩니다. 이 경우 항상 여기에서 목록의 마지막 주문을 가져와야 합니다.

 

For 루프에서 OrderSelect를 사용 하기 시작하고 모든 주문을 통과하면 그 안에 다른 하나의 OrderSelect for 루프를 생성할 수 없습니다. 두 번째 루프가 반환될 때 거래 풀에서 마지막 주문의 티켓을 사용하게 되기 때문입니다.

거기에 꽤 긴 코드가 있으므로 수정하고 싶지는 않지만(sry:P) 이제 올바른 방향으로 포인터를 갖게 되었습니다.

 
dvarrin :

그러나 나는 당신이 문제를 지적했다고 생각합니다. 저는 "areBuyOrdersInProfitAt" 메소드에서 OrderSelect()를 사용하고 있습니다. :-)))))))))))))

해결 방법을 찾고 있다는 소식을 듣게 되어 반갑습니다. :-)
 
RaptorUK :
해결 방법을 찾고 있다는 소식을 듣게 되어 반갑습니다. :-)
모든 분들께 진심으로 감사드립니다. 내가 한 정말 어리석은 실수였습니다 :-((