학생을 위한 OOP. - 페이지 9

 
Dmitry Fedoseev :

표시기를 왼쪽에서 오른쪽으로 계산하면 예를 들어 프랙탈이 형성된 경우와 같이 이벤트가 발생한 경우 이 이벤트가 있는 막대의 인덱스를 기억해야 합니다(나중에 사용할 수 있도록). 인덱싱이 오른쪽에서 왼쪽으로 수행되는 경우 n=Bars-i 계산을 수행하고 n을 기억한 다음 그 반대인 i=Bars-n을 기억해야 합니다. 그리고 인덱싱이 왼쪽에서 오른쪽으로 하면 인덱스만 기억하고 사용하면 바뀌지 않습니다. 이것의 필요성은 다소 복잡한 지표에서 항상 발생하기 때문에 왼쪽에서 오른쪽으로 인덱싱하는 것은 지표 작성자의 작업에서 더 큰 안도입니다.

네, 그렇습니다. 나는 한 번 mql4에서 하나의 지표를 작성하기 시작했고, 1/3을 썼고, 다음 세 번째는 첫 번째 결과를 기반으로 했고, 따라서 세 번째 부분은 두 번째 세 번째 값에 기반했습니다. 그리고 그곳에서 나는 지금 원하는 값이 어느 정도에 있는 막대를 계산해야 하는 큰 문제에 봉착했습니다. 그런데 그렇게 해서 고객이 사라지고 나는 글을 다 쓰지 못했다. 그리고 오른쪽에서 인덱싱할 때 막대 번호는 변경되지 않고 막대 번호를 보조 배열에 쓰고 이 배열을 실행하여 두 번째 및 세 번째 부분만 구성하면 됩니다.

 
Dmitry Fedoseev :

표시기를 왼쪽에서 오른쪽으로 계산하면 예를 들어 프랙탈이 형성된 경우와 같이 이벤트가 발생한 경우 이 이벤트가 있는 막대의 인덱스를 기억해야 합니다(나중에 사용할 수 있도록). 인덱싱이 오른쪽에서 왼쪽으로 수행되는 경우 n=Bars-i 계산을 수행하고 n을 기억한 다음 그 반대인 i=Bars-n을 기억해야 합니다. 그리고 인덱싱이 왼쪽에서 오른쪽으로 하면 인덱스만 기억하고 사용하면 바뀌지 않습니다. 이것의 필요성은 다소 복잡한 지표에서 항상 발생하기 때문에 왼쪽에서 오른쪽으로 인덱싱하는 것은 지표 작성자의 작업에서 더 큰 안도입니다.

오 어떻게. 그런 다음 터미널이 기록을 로드했습니다.
 
Ihor Herasko :

여기 에 예가 있습니다.

이고르 마카누 :

https://www.mql5.com/ru/code/25807

감사하지만

  1. 아쉽게도 4개 모두입니다.
  2. iCustom 없이 이러한 표시기를 연결하는 명확한 예를 원합니다.)))
 
Vladimir Simakov :
오 어떻게. 그런 다음 터미널이 기록을 로드했습니다.

특별한 것은 없습니다. 네 가지 접근 방식을 잊어버리면 됩니다.

   int counted_bars=IndicatorCounted();
   int i,r,limit;

   if (counted_bars< 0 ) return (- 1 );
   if (counted_bars> 0 ) counted_bars--;
         limit = Bars -counted_bars;
         if ( ArrayRange (working, 0 ) != Bars ) ArrayResize (working, Bars );

   //
   //
   //
   //
   //
        
   for (i=limit, r= Bars -i- 1 ; i >= 0 ; i--,r++)

그리고 그렇게

 if (rates_total-prev_calculated > 1 )
 {
   // Если это первый запуск или подгрузилась история пересчитаем весь индикатор.
 }
if (rates_total-prev_calculated >= 0 )
 {
   // Пересчитаем только последнее изменение.
 }
 
#include <Indicators/Indicators.mqh>

CiADX adx;

int OnInit()
  {

   if(!adx.Create(Symbol(),Period(),14)){
      return(INIT_FAILED);
   }

   OnTick(); // это только для этого примера, чтобы на выходных сработало

   return(INIT_SUCCEEDED);
  }

void OnTick()
  {
   double buf[];
   
   if(adx.GetData(0,1,0,buf)==-1){
      return;
   }

   Comment(buf[0]);
   
  }
 
Vladimir Simakov :
오 어떻게. 그런 다음 터미널이 기록을 로드했습니다.

당신은 어디에서 왔으며 왜 여기에 있습니까? MT4 또는 MT5에 대해 하나 이상의 지표를 작성했습니까? 최소한 MetaTrader용 지표 작성 의 기본 사항을 숙지하는 것이 좋습니다.

 
Dmitry Fedoseev :

그들은 복잡하지만 빠른 지표를 작성하지 않았기 때문에 그렇지 않으면 왼쪽에서 오른쪽으로 인덱싱하는 것이 매우 중요한 작업에 대한 솔루션이 될 것입니다.

어드바이저에게 빠른 칠면조가 필요한 경우 계산된 부분을 어드바이저에 직접 삽입하는 것이 더 유리합니다.

 
Alexey Volchanskiy :

어드바이저에게 빠른 칠면조가 필요한 경우 계산된 부분을 어드바이저에 직접 삽입하는 것이 더 유리합니다.

글쎄, nafik ... 잔인 함을 높이기 위해 여자 친구에게 이것에 대해 이야기하십시오.

 
Dmitry Fedoseev :

당신은 어디에서 왔으며 왜 여기에 있습니까? MT4 또는 MT5에 대해 하나 이상의 지표를 작성했습니까? 최소한 MetaTrader용 지표 작성 의 기본 사항을 숙지하는 것이 좋습니다.

드미트리는 사악해, 나는 아직 숙취가 없었어))))

 
조금 수정했습니다 . GetData()는 부등식 -1을 확인해야 합니다.