포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 1177

 

안녕하세요!

표시기가 막대를 열 때만 작동하게 하고 모든 틱 에서는 작동하지 않게 하는 방법과 기록 전체에 걸쳐 매번(모든 새 막대에서) 실행되지 않도록 하는 방법을 알려주시겠습니까?

미리 감사드립니다.

로스티슬라프

 
Rost17 : 표시기가 막대를 열 때만 작동하게 하고 모든 틱 에서는 작동하지 않게 하는 방법과 기록 전체에 걸쳐 매번(모든 새 막대에서) 실행되지 않도록 하는 방법을 알려주시겠습니까?
날짜 시간 t;
먼저, 바에 대해. 새 막대 가 형성되면 새 값이 Time[0] - 막대가 열리는 시간 에 기록됩니다.
OnCalculate (...)
{
if(시간[0] == t) return(0); // 이 BAR이 처리되면 --> 종료
t = 시간[0];

이제 역사 전반에 걸쳐: 속도가 느려질 것입니다.
 
STARIJ :
날짜 시간 t;
먼저, 바에 대해. 새 막대 가 형성되면 새 값이 Time[0] - 막대가 열리는 시간 에 기록됩니다.
OnCalculate(...)
{
if(시간[0] == t) return(0); // 이 BAR이 처리되면 --> 종료
t = 시간[0];

이제 역사 전반에 걸쳐: 속도가 느려질 것입니다.

빠른 응답에 감사합니다. 새 막대 가 나타날 때 속도가 느려지고 전체 기록을 실행하지 않고 단순히 새 막대를 처리하도록 하는 방법을 묻습니다...

이제 그것은 다음과 같이 구성됩니다: for(int i=limit-1; i>=0; i--) 그리고 제가 이해하는 바와 같이 이것은 각 막대가 열릴 때 기록 전체의 모든 값이 다시 계산된다는 것을 의미합니다 , 그리고 마지막 막대에서 작업만 하면 됩니다...

 
Rost17 : 새 막대 가 나타날 때 속도가 느려지고 전체 기록을 실행하지 않고 단순히 새 막대를 처리하도록 하는 방법을 묻고 있습니다...

마지막 막대에서 계산하는 방법은 다음과 같습니다.

 //| Bears Power                                                      |
//+------------------------------------------------------------------+
int OnCalculate (.....)
  {
   int limit=rates_total-prev_calculated; // Количество баров, которые будем считать = ВсегоБаров - РанееПросчитано
   if (rates_total<=InpBearsPeriod) return ( 0 );

   if (prev_calculated> 0 ) limit++; // Если давно считаем, то захватим и предыдущий бар для точности
   for ( int i= 0 ; i<limit; i++)
     {
      ExtTempBuffer[i]= iMA ( NULL , 0 ,InpBearsPeriod, 0 , MODE_EMA , PRICE_CLOSE ,i);
      ExtBearsBuffer[i]=low[i]-ExtTempBuffer[i];
     }
   return (rates_total);
  }
 
STARIJ :

먼저 라인을 보자

명확하게 하기 위해 이렇게 다시 작성했습니다.

아하!!! 이제 이해하기 시작했습니다... 루프에서 변수 a가 1에서 6으로 변경됩니다. 이 변수 1, 5, 6의 값으로 작업이 없습니다. 그럼 그냥

또는 당신의 스타일로

결과는 동일하지만 더 빠릅니다.

이제 통계 기능을 제거해야 합니까? 본문을 연속으로 세 번 작성하고 세 부분 각각에서형식 매개변수 를 실제 매개변수로 바꾸고 변수 선언의 중복을 제거해야 합니다. 전체 코드는 약간 더 길어지지만 실행은 더 빨라집니다. print()를 버리는 것이 합리적입니다. 정확히 이 시간에 누가 메시지 로그를 볼 것입니까? - 또는 Alert()로 대체하여 화면에 팝업되도록 합니다. 변수 namZz2도 있습니다. 값이 변경됩니까?


반대로 통계를 남겨두고 stat()가 아닌 통계()에 배열을 열거해야 합니다. 어리석게도 말씀하신 대로 세 번 다시 쓸 수 있다는 것을 알고 있지만, 문제는 대부분 통계 수집 결과에 따라 배열을 더 추가해야 하고 조만간 원래 배열로 돌아가야 할 가능성이 높다는 것입니다. . 따라서 나는 구체적으로 작업에 대해 목소리를 내고, 당신은 내가 이미 알고 있는 간단한 방법을 제공합니다. 불행히도 그들은 나를 처음으로 이끌 것입니다. 따라서 앞으로는 이것으로 돌아 오지 않기를 기대합니다!

 for ( int a= 1 ;a< 6 ;a++)
{
   if (a== 2 ){Statistic(mZz2,namZz2);}
   if (a== 3 ){Statistic(mZz3,namZz3);}
   if (a== 4 ){Statistic(mZz4,namZz4);}
}

이 코드를 통계에 삽입하는 방법!? 하나의 절차였으니 처음에 제가 질문을 드렸으니 봐주세요!

 
STARIJ :

마지막 막대에서 계산하는 방법은 다음과 같습니다.

매우 감사합니다! 아주 오래된 지표 소스가 있습니다. 매번 전체 기록을 다시 계산하지 않고 막대가 닫힌 후에만 작동하고 신호가 나타난 후에 막대에만 화살표를 놓도록 수정할 수 있습니까? 음, OnCalculate 를 사용하여 새로운 스타일로 ... 귀하의 시간 비용을 보상할 준비가 되었습니다... 동의한다면 어떻게 하는 것이 가장 좋을까요? 개인적으로 또는 어디로 보낼 수 있습니까?
 
Игорь :

다음은 작업 코드에서 발췌한 것입니다! 중간 void Stat 없이 하나의 void Statistic으로 이것을 수집하는 방법!? 당신이 제안한 바에 따르면, 모든 배열이 하나로 조립된 다음 거기에서 긁어낼 수 있도록 모든 코드를 다시 연마해야 합니다!

제공한 작업 코드에서 발췌한 내용이 올바르지 않거나 Statistic() 함수가 Stat()에서 호출될 때 인쇄만 수행합니다.

당신에게 그것은 반환 직후에 작업을 완료합니다. 그래도.

원하는 것을 명확히 하기 위해 완전한 코드를 제공하십시오.

 

메모. MQL4 초보자를 돕기에는 포럼에 너무 많은 스레드가 있습니다.

이 분기는 이제 더 이상 사용되지 않으며 닫힙니다 .


모든 질문은 다음 활성 지점으로 보내주십시오.

https://www.mql5.com/ru/forum/160683

https://www.mql5.com/ru/forum/160587

이 스레드의 모든 후속 게시물은 삭제됩니다.


 
도움, 이미 구매한 주문의 구매 가격이 2시간 후에 변경될 수 있습니까?
 
마인크래프트 캐릭터가 있는 사진과 수익이 돌고 있을 때 손에 곡괭이를 들고 싶다. 수행하는 방법?
사유: