[아카이브!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 2. - 페이지 485

 
FOReignEXchange :


이해하지 못하셨나요? 도움말을 보면 OrderSelect()가 조건을 사용합니다. 그리고 사실이 없으면 어디에서도 본 적이 없습니다.

if는 조건문입니다. 그리고 괄호 안에 조건이 있어야 합니다. 그게 더 논리적으로 보입니다. 차이가 없더라도.


사양:

 bool OrderSelect( int index, int select , int pool=MODE_TRADES) 

참 또는 거짓을 반환

도움말 읽기 https://docs.mql4.com/ru/basis/operators/if

표현식이 참이면 명령문1이 실행되고 명령문2 다음의 명령문으로 제어가 넘어갑니다(즉, 명령문2는 실행되지 않음). 표현식이 거짓이면 statement2가 실행됩니다.

 if (표현식)
     연산자1
또 다른
     연산자2

if 문의 else 부분은 생략할 수 있습니다. 따라서 else 부분이 생략된 중첩된 if 문 은 모호할 수 있습니다. 이 경우 elseelse 부분이 없는 동일한 블록의 가장 가까운 이전 if 문 에 연결됩니다.

즉, OrderSelect()==true 비교가 필요하지 않습니다. OrderSelect ()==false 대신 OrderSelect () 또는 !OrderSelect() 를 사용하면 됩니다.

 

예, 나는 그것에 대해 말하는 것이 아닙니다.

나는 주문을 선택할 때 항상 전체를 씁니다.

 if ( OrderSelect (count,SELECT_BY_POS,MODE_TRADES)==true)

나는 진실이 없는 것을 본 적이 없다.

abolk :
то есть сравнение OrderSelect ()==true делать не обязательно - достаточно просто использовать OrderSelect () или ! OrderSelect () вместо OrderSelect ()==false

이해합니다

 
FOReignEXchange :

나는 진실이 없는 것을 본 적이 없다.


잘못된 사람들의 코드를 보십시오.
 
FOReignEXchange :

예, 나는 그것에 대해 말하는 것이 아닙니다.

나는 주문을 선택할 때 항상 전체를 씁니다.

나는 진실이 없는 것을 본 적이 없다.

이해합니다


완전히 동등한 두 개의 녹음 - 하나의 녹음은 다른 것보다 나쁘지도 않고 더 좋지도 않습니다.
 
sergeev :

잘못된 사람들의 코드를 보십시오.


그건 그렇고, 우리는 FOReignEXchange 에 경의를 표해야 합니다.

일반 " 이동 평균 .mq4"를 열고 다음을 보았습니다.

       if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)== false ) break ;
 
abolk :


제공한 함수에서 직접 global_trailing_SP 변수의 값을 Print() 합니다.

이 변수의 값을 어디에서 읽고 있습니까?


블라미! )) Print()를 통해 제공된 함수의 global_trailing_SP 변수 값을 표시하면 로그에서 완전히 예상치 못한 값(노란색으로 강조 표시됨)을 볼 수 있습니다. 그 전에는 이 기능 외부에서 올바르게 표시됩니다(빨간 점 반대).

global_trailing_SP 전역 변수. Start() 함수 외부에서 선언된,

 double global_trailing_SP = 0.0 ; 

후행 정지 기능이 주 위치 값을 성공적으로 변경한 후 별도의 루프에서 global_trailing_SP 변수가 주 위치의 정지 손실 값으로 설정됩니다.

   for (count = OrdersTotal ()- 1 ; count >= 0 ; count--)
      {   OrderSelect (count,SELECT_BY_POS,MODE_TRADES);
         if (OrderType() == OP_SELL && OrderMagicNumber() == Magic_Source_SP)
            {  global_trailing_SP = NormalizeDouble (OrderStopLoss(),dgt); Print ( "global_trailing_SP: " ,DoubleToStr(global_trailing_SP, 5 ));  }
      }
이 값은 위의 빨간색 점으로 표시됩니다.

그런 다음 이 값은 다양한 주문 수정이 발생하는 함수로 전달됩니다. 하지만 결과적으로 나에게 예측할 수 없는 값이 로그에 표시되고 손절매 값은 물론 수정되지 않습니다. 이 문제를 어떻게 해결할 수 있습니까? 언뜻보기에 모든 것이 항상 논리적 인 것은 아닙니다.)))

 

하지만 여기서 SELLSTOP을 하는 것이 좋지 않을까요?

 if ((global_trailing_SP < Stp_Loss && global_trailing_SP > High_1)) 
{  OrderModify(OrderTicket(),OrderOpenPrice(),global_trailing_SP, 0 , 0 , DeepPink );
Print ( "Условие ModifyOrder исполнилось: global_trailing_SP: " ,global_trailing_SP, ", Stop Loss: " ,OrderStopLoss());  }
else   Print ( "Условие не выполняется!" );

모든 것이 SELL에서와 절대적으로 동일합니다.

 
FOReignEXchange :

근데 여기서 하는게 낫지않나, SELLSTOP이 어딨어?

모든 것이 SELL에서와 절대적으로 동일합니다.


이 경우 문제가 발생하지 않습니다. 자세한 내용은 위.
 
tol64 :


블라미! )) Print()를 통해 제공된 함수의 global_trailing_SP 변수 값을 표시하면 로그에서 완전히 예상치 못한 값(노란색으로 강조 표시됨)을 볼 수 있습니다. 그 전에는 이 기능 외부에서 올바르게 표시됩니다(빨간 점 반대).

global_trailing_SP 전역 변수. Start() 함수 외부에서 선언된,

후행 정지 기능이 주 위치 값을 성공적으로 변경한 후 별도의 루프에서 global_trailing_SP 변수가 주 위치의 정지 손실 값으로 설정됩니다.

이 값은 위의 빨간색 점으로 표시됩니다.

그런 다음 이 값은 다양한 주문 수정이 발생하는 함수로 전달됩니다. 하지만 결과적으로 나에게 예측할 수 없는 값이 로그에 표시되고 손절매 값은 물론 수정되지 않습니다. 이 문제를 어떻게 해결할 수 있습니까? 언뜻보기에 모든 것이 항상 논리적 인 것은 아닙니다.)))


전역 변수 global_trailing_SP 를 읽는 방법을 보여줍니다.
 

그래서 나는 이해하지 못했다. 메인 오더 수정 시 대기 중인 오더가 존재합니까 ?

존재한다면 주 주문의 수정과 보류 중인 주문의 수정이 한 블록에서 발생합니다. 주 주문이 수정된 경우 의도한 경우 보류 중인 주문도 수정되어야 합니다.

또 한 가지는 계획했던 일이 잘 풀리지 않는다는 것입니다. 따라서 조건에 오류가 있습니다. 위에서 보여드린 것처럼 메인 오더를 수정하는 조건과 동일하게 해보세요. 제가 보기에는 논리상의 오류인 것 같습니다. 놀랍지 않습니다. 뭔가 어렵습니다. 하기가 더 쉽습니다.