Что не так с индикаторами Pivot? - страница 5

 

Вот еще кое-что недавно обнаружил.

 

Красная это МА 55. Желтая - это как бы однопериодный моментум от этой МА (сначала на график была присоединена МА, потом моментум и у моментума было выбрано "применить к" - Previous Indicator's data). Похожа эта желтая линия на однопериоднй моментум от красной линии?

 
В чем непохожесть?
 
Народ, тут про тестер вобще-то. Давайте не будем от темы отходить. Рош предложил частный случай решения проблемы, а если надо задать период расчёта пивота (например, на графике М1 - период Н1, на Н1 - периол Д1, на Д1 - период MN), тогда как быть? С iBarShift всё дtлается легко и просто, но в визуальном режиме тестера не работает. Будет ли советник получать правильные данные из такого индикатора в тестере (не визуализация, просто тестирование) или также только прямые линии?
 
evillive:
Народ, тут про тестер вобще-то. Давайте не будем от темы отходить. Рош предложил частный случай решения проблемы, а если надо задать период расчёта пивота (например, на графике М1 - период Н1, на Н1 - периол Д1, на Д1 - период MN), тогда как быть? С iBarShift всё дtлается легко и просто, но в визуальном режиме тестера не работает. Будет ли советник получать правильные данные из такого индикатора в тестере (не визуализация, просто тестирование) или также только прямые линии?
Где какой индикатор конкретно? Покажите код, дайте посмотреть.
 
Integer:
Где какой индикатор конкретно? Покажите код, дайте посмотреть.

#property indicator_chart_window
#property indicator_buffers 7
#property indicator_color1 Gold
#property indicator_color2 OrangeRed
#property indicator_color3 SkyBlue
#property indicator_color4 OrangeRed
#property indicator_color5 SkyBlue
#property indicator_color6 Maroon
#property indicator_color7 RoyalBlue

//---- buffers
double PBuffer[];
double S1Buffer[];
double R1Buffer[];
double S2Buffer[];
double R2Buffer[];
double S3Buffer[];
double R3Buffer[];

  int k=1,d=0,per=1440;
  double P=0.0,S1=0.0,R1=0.0,S2=0.0,R2=0.0,S3=0.0,R3=0.0,
         H = 0.0,L = 0.0,C = 0.0,O = 0.0,RG = 0.0;

enum tf{H1,H4,D1,W1,MN};

input tf period=2;

//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{
  IndicatorBuffers(7);
  SetIndexBuffer(0,PBuffer);
  SetIndexBuffer(1,S1Buffer);
  SetIndexBuffer(2,R1Buffer);
  SetIndexBuffer(3,S2Buffer);
  SetIndexBuffer(4,R2Buffer);
  SetIndexBuffer(5,S3Buffer);
  SetIndexBuffer(6,R3Buffer);
  
  SetIndexLabel(0,"Pivot");
  SetIndexLabel(1,"Su1");
  SetIndexLabel(2,"Re1");
  SetIndexLabel(3,"Su2");
  SetIndexLabel(4,"Re2");
  SetIndexLabel(5,"Su3");
  SetIndexLabel(6,"Re3");
  SetIndexStyle(0,DRAW_LINE,EMPTY,2,indicator_color1);
  SetIndexStyle(1,DRAW_LINE,EMPTY,2,indicator_color2);
  SetIndexStyle(2,DRAW_LINE,EMPTY,2,indicator_color3);
  SetIndexStyle(3,DRAW_LINE,EMPTY,2,indicator_color4);
  SetIndexStyle(4,DRAW_LINE,EMPTY,2,indicator_color5);
  SetIndexStyle(5,DRAW_LINE,EMPTY,2,indicator_color6);
  SetIndexStyle(6,DRAW_LINE,EMPTY,2,indicator_color7);
  SetIndexEmptyValue(0,0);
  SetIndexEmptyValue(1,0);
  SetIndexEmptyValue(2,0);
  SetIndexEmptyValue(3,0);
  SetIndexEmptyValue(4,0);
  SetIndexEmptyValue(5,0);
  SetIndexEmptyValue(6,0);
 
  d=_Digits;
  IndicatorDigits(_Digits);
  
  switch(period)
  {
    default: per=1440;break;
    case 0: per=60;break;
    case 1: per=240;break;
    case 2: per=1440;break;
    case 3: per=10080;break;
    case 4: per=43200;break;
  }
  return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
  int limit=0;
  if(prev_calculated<=0) limit=rates_total-1;
  else limit=1;

  for (int i=limit; i>=0;i--)
  { 
    int sh = iBarShift(NULL, per, Time[i], false);
    
     H = iHigh(NULL, per, sh + 1);
     L = iLow(NULL, per, sh + 1); 
     C = iClose(NULL, per, sh + 1);
     O = iOpen(NULL, per, sh + 1);
     RG = H-L;

    P =  (H+L)/2; 
    R1 = 2*P-L;
    S1 = 2*P-H;
    R2 = P+RG;
    S2 = P-RG;
    R3 = R2+RG;
    S3 = S2-RG;
    
    PBuffer[i]  = NormalizeDouble(P,d); 
    R1Buffer[i] = NormalizeDouble(R1,d);
    S1Buffer[i] = NormalizeDouble(S1,d);
    R2Buffer[i] = NormalizeDouble(R2,d);
    S2Buffer[i] = NormalizeDouble(S2,d);
    R3Buffer[i] = NormalizeDouble(R3,d);
    S3Buffer[i] = NormalizeDouble(S3,d);
  }
return(rates_total);
}
 
evillive:

То есть теперь любой советник, основанный на мульти-ТФ индикаторе, или хотябы пытающийся заглянуть на старший ТФ, обречён на неудачное тестирование в тестере? Только в режиме реального времени их тестить, чтоли? А оптимизировать как?



Вы ничего не поняли - запретили подглядывать в будущее индикаторам, наброшенным на график визуального тестирования. Если индикатор вызывается извнутри эксперта, который тестируется, то он получает корректные смоделированные данные как и раньше.
 
Integer:
Вспомнил, что за глюк был. На графике визуального тестирования для нулевого бара возвращался 0 всегда. Для своих данных это нормально, а для другого графика  - нет. 

Это из той же оперы, в общем-то
 
Rosh:

Вы ничего не поняли - запретили подглядывать в будущее индикаторам, наброшенным на график визуального тестирования. Если индикатор вызывается извнутри эксперта, который тестируется, то он получает корректные смоделированные данные как и раньше.

То есть советник на таком нидикаторе в визуальном режиме работать будет корректно, но если набросить на тот график отдельно тот же индикатор, с которого берёт данные советник, то он будет всякую чушь показывать, пока его не стукнешь? На этот раз я правильно понял?
 
Rosh:

Это из той же оперы, в общем-то

Да. Оно самое. А что вы хотите сказать, что это не глюк? Глюк, обычный глюк. 
 
Rosh:

Вы ничего не поняли - запретили подглядывать в будущее индикаторам, наброшенным на график визуального тестирования. Если индикатор вызывается извнутри эксперта, который тестируется, то он получает корректные смоделированные данные как и раньше.

Где в этом индикаторе попытка заглянуть в будущее?