MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 519

 
PolarSeaman :

이 특정 위치의 기록에서 부품이 닫혔는지 확인하는 방법은 무엇입니까?

많은 포지션이 1.0으로 열리고 , 0.5는 $10의 손실로 닫히고, 나중에 다른 0.25는 $5의 이익으로 닫힙니다. 나는 이익이 $50일 때 모든 것을 닫을 것입니다. 사실, 지금 이익은 $50입니다.

현재 이익을 계산할 때 마감된 -10$ 및 +5$를 어떻게 고려할 수 있습니까? $55의 이익으로 마감하려면

위치 설명(mql4에서) 참조 - 닫힌 부분에는 나머지 부분의 티켓이 있고(to#1234556789) 나머지 부분에는 닫힌 부분의 티켓이 있습니다(from#123456788) - 어디 있는지 기억나지 않습니다. 공백은 - 당신이 직접 볼 것입니다

 
Artyom Trishkin :

위치 설명(mql4에서) 참조 - 닫힌 부분에는 나머지 부분의 티켓이 있고(to#1234556789) 나머지 부분에는 닫힌 부분의 티켓이 있습니다(from#123456788) - 어디 있는지 기억나지 않습니다. 공백은 - 당신이 직접 볼 것입니다

마감된 포지션의 코멘트를 오픈 포지션의 티켓과 비교하여 "0.0"을 반환합니다.

 double prof_cl_pos( string sy= "0" , int op=- 1 , int mn=- 1 ) {
   datetime ta;
   int       i, k= OrdersHistoryTotal ();
   double profit_= 0 ;
   string comment= "" ;

   if (sy== "" || sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
       if ( OrderSymbol ()==sy) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
             // comment=OrderComment();
               if (ticket_op_pos( Symbol (), - 1 ,mn)== OrderComment ())
              profit_= OrderProfit ();
            }
          }
        }
      }
    }
  }
   return (profit_);
}
   int ticket_op_pos( string sy= "" , int op=- 1 , int mn=- 1 ) {
   datetime o;
   double    l=- 1 ;
   string comment= "" ;
   int      ticket, i, k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()==sy || sy== "" ) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
                ticket= OrderTicket ();
              }
            }
          }
        }
      }
    }

   return (ticket);
}
 
PolarSeaman :

마감된 포지션의 코멘트를 오픈 포지션의 티켓과 비교하여 "0.0"을 반환합니다.

댓글에서 티켓을 선택해야 합니다. 예를 들어 "from #" 및 "to #"와 같은 추가 문자를 제거해야 합니다. 이것은 여기에서 수행되지 않습니다.

 
Ihor Herasko :

댓글에서 티켓을 선택해야 합니다. 예를 들어 "from #" 및 "to #"와 같은 추가 문자를 제거해야 합니다. 이것은 여기에서 수행되지 않습니다.

정확히! "to #"으로 자르는 방법?
 
PolarSeaman :
정확히! 그리고 "to #"으로 자르는 방법?
문자/하위 문자열 #의 발생을 찾고 (선택적으로) 그 앞에 "from" 또는 "to"가 있는지 확인하십시오.

나머지를 가져 와서 long으로 변환하십시오.

in-5는 기초적인 정규 표현식이 있습니다 - 그것들을 사용하면 더 쉬울 것입니다

 
Maxim Kuznetsov :
문자/하위 문자열의 발생 찾기 #
무엇을 찾을까요?
 
PolarSeaman :
무엇을 찾을까요?

사이트 검색이 작동하지 않습니까? 페이지 상단에 문서가 있습니까?

Документация по MQL5: Строковые функции / StringSubstr
Документация по MQL5: Строковые функции / StringSubstr
  • www.mql5.com
[in]  Длина извлекаемой подстроки. Если значение параметра равно -1 либо параметр не задан, то будет извлекаться подстрока, начиная с указанной позиции и до конца строки.
 
Artyom Trishkin :

사이트 검색이 작동하지 않습니까? 페이지 상단에 문서가 있습니까?

감사합니다 그랬어요

              comment= OrderComment ();
               substr = StringSubstr (comment, 4 , 9 );//пропускаю " to #" беру цифры
               if (ticket_op_pos( Symbol (), - 1 ,mn)==substr)

그러나 히스토리 검색 기능은 열린 위치 에 대한 현재 이익을 반환하기 시작했습니다

 double prof_cl_pos( string sy= "0" , int op=- 1 , int mn=- 1 ) {
   datetime ta;
   int       i, k= OrdersHistoryTotal ();
   double profit_= 0 ;
   string comment= "" ;
   string substr= "" ;

   if (sy== "" || sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )) {
       if ( OrderSymbol ()==sy) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
              comment= OrderComment ();
               substr = StringSubstr (comment, 4 , 9 );
               if (ticket_op_pos( Symbol (), - 1 ,mn)==substr)
              profit_= OrderProfit ();
            }
          }
        }
      }
    }
  }
   return (profit_);
}
 

> 해주셔서 감사합니다.

다시 하지 마세요 :-) 정의되지 않은 문자열로 작업할 때 길이나 조각의 시작 부분에 의존할 수 없습니다.

StringFind()라는 멋진 함수 가 있습니다 - "#" 문자열의 발생을 찾거나 즉시 "from #"

ps/ 주석은 여전히 대문자 또는 소문자로 변환되어야 합니다. 불행히도 주석에는 태그 지정 프로토콜이 없으므로 일부 서버에서 "FROM #"(대문자)이라고 표시할 수 있습니다.
특히 일부는 [sl]과 일부(sl)를 주석 끝에 손절매와 함께 넣습니다. 그런데 댓글의 크기는 제한되어 있습니다. 그리고 기타 - 기타.
 

그런 디자인에 무슨 문제가 있습니까?

 datetime tm1 = D'09.04.2018' ;
long      tm2 = TimeCurrent ();

 if (tm1 > tm2) Print ( "Работает" );

아니면 datetime 을 캐스팅하는 것이 더 낫습니까? 길게 입력하려면?