초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 635

 

도와주세요, 제발. 여기서 무슨 문제가 있습니까?

 double buy_OrderProfit = 0 ;
 double sell_OrderProfit = 0 ;
 double buy_Order_price  = 0 ;
 double sell_Order_price = 0 ;
 
   double Drop_proc1 = AccountEquity ();
   double Drop_proc2 = AccountBalance ();
   double Drop_proc3 =(Drop_proc1* 100 )/Drop_proc2;
  
   if (Drop_procK <= Drop_proc3)
  {
   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
       if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))&& ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic))
             if (( OrderType ()== OP_SELL ) sell_OrderProfit + OrderProfit ())
                 if (( OrderType ()== OP_BUY )  buy_OrderProfit + OrderProfit ()) 

   for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
         if (( OrderSelect (i, SELECT_BY_POS , MODE_TRADES ))&& ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic))
             if (( OrderType ()== OP_BUY ) && ( buy_OrderProfit < sell_OrderProfit ) )     
                   OrderClose ( OrderTicket (), OrderLots (), MarketInfo ( OrderSymbol (), MODE_BID ),slippage);
                     if (( OrderType ()== OP_SELL ) && sell_OrderProfit < buy_OrderProfit )
                         OrderClose ( OrderTicket (), OrderLots (), MarketInfo ( OrderSymbol (), MODE_ASK ),slippage);  
        } 
   else 1 = 1 ;

오류 'if' - 전역 범위 v.4.1.5(2).mq4 793 3에서 표현식이 허용되지 않습니다.



 
new-rena :

전문가 여러분!

MQL4 Expert Advisor를 초기화할 때 시장이 닫혔는지 여부를 프로그래밍 방식으로 확인하는 방법은 무엇입니까? (어떤 팀?)

그런 명령은 없습니다. 멀리 보류 주문 을 시도한 다음 배치된 경우 삭제할 수 있습니다.
 
Kisolen :

도와주세요, 제발. 여기서 무슨 문제가 있습니까?

if 조건은 함수 내부에만 있을 수 있습니다.
 
Sergei Vladimirov :
if 조건은 함수 내부에만 있을 수 있습니다.
응답해 주셔서 감사합니다. 이 코드는 중괄호 안에 있는 void OnTick() 함수 안에 있습니다. 위층에 있습니다. 복사하지 못한 점 죄송합니다. 나는 모든 것을 이해합니까? 이게 기능인가요? 그리고 오류는 여전히 있습니다.
 
Kisolen :
응답해 주셔서 감사합니다. 이 코드는 중괄호 안에 있는 void OnTick() 함수 안에 있습니다. 위층에 있습니다. 복사하지 못한 점 죄송합니다. 나는 모든 것을 이해합니까? 이게 기능인가요? 그리고 오류는 여전히 있습니다.
컴파일러는 if가 전역 범위에 있다고 씁니다. 아마도 대괄호의 불균형일 수 있습니다. 확인하십시오(그런데 이 스타일의 코드를 사용하는 것은 당연합니다).
 
Vitaly Muzichenko :

이것을 시도하십시오. 작동하는 데 사용되었지만 사용하지 않았습니다.

현재 시간이 TimeCurrent()에 의해 결정되고 마지막 인용 시간을 반환하고 함수가 항상 true를 반환하기 때문에 코드가 손상되었습니다. 컴퓨터와 서버의 시간대 차이를 고려하여 TimeLocal()을 통해 동일한 작업을 수행할 수 있지만 이것이 올바른 결과를 보장하지는 않습니다. 컴퓨터의 시계가 잘못될 수 있고 DC가 채워지지 않을 수 있습니다. 서버의 세션 시간과 휴일(설날)에는 무엇을 반환할지 알 수 없습니다... 그러나 µl에 MarketIsClosed()와 같은 간단하고 안정적인 함수는 없습니다.
 
Sergei Vladimirov :
그런 명령은 없습니다. 멀리 보류 주문 을 시도한 다음 배치된 경우 삭제할 수 있습니다.

예, 좋은 옵션입니다. 이 명령은 "Market Closed" 오류를 반환합니다.

문제가 해결되었습니다.

고맙습니다!

 

좋은 하루입니다.

어느 방향으로 파야하는지 알려주십시오. 또는 예를 들어 코드 조각을 사용할 수 있는지 알려주십시오. :)

다음이 필요합니다.

Expert Advisor와 지표가 차트에 배치됩니다. Expert Advisor를 사용하여 지표 매개변수를 변경하는 방법은 무엇입니까?

답변에 미리 감사드립니다.

 
GrRusel :

좋은 하루입니다.

어느 방향으로 파야하는지 알려주십시오. 또는 예를 들어 코드 조각을 사용할 수 있는지 알려주십시오. :)

다음이 필요합니다.

Expert Advisor와 지표가 차트에 배치됩니다. Expert Advisor를 사용하여 지표 매개변수를 변경하는 방법은 무엇입니까?

답변에 미리 감사드립니다.

시각적으로 표시기 설정 을 변경하지 마십시오. 표시기에서 iCustom을 통해 Expert Advisor로 데이터를 읽을 때 Expert Advisor가 이 표시기에서 받는 매개변수를 설정할 수 있습니다. 글쎄, 또는 전역 변수를 통해 지표가 사용 방법을 가르치는 경우.
 
Vladimir Zubov :
시각적으로 표시기 설정 을 변경하지 마십시오. 표시기에서 iCustom을 통해 Expert Advisor로 데이터를 읽을 때 Expert Advisor가 이 표시기에서 받는 매개변수를 설정할 수 있습니다. 글쎄, 또는 전역 변수를 통해 지표가 사용 방법을 가르치는 경우.
icustom을 통해 모든 작업을 수행하지만 Expert Advisor에서 표시기 설정을 변경할 때 시각화용 표시기 설정도 변경하고 싶습니다. 예를 들어 OBOS 영역을 변경했다고 가정해 보겠습니다. 차트에서 스레드로 삭제했다가 다시 추가할 수 있지만 새로운 설정으로 추가할 수 있지만 이 모든 작업은 전문가를 통해 수행해야 합니다. 실제로 아무도 그런 문제에 직면하지 않았으며 핸들로 모든 것을 변경할 때마다 - 이것은 불가능합니다 ...