Вопрос по доступу к таймсериям.

[Eliminato]  
Есть индикатор. Для рассчета беруться данные от двух символов за N-ый бар, используются функции iHigh,iLow,iOpen.

Вызываю индикатор из советника и просто прикрепляю индикатор к графику. Входные параметры одинаковые. Но почему значения разные получаются? Я где-то промахнулся с документацией к MT4 и не все изучил, и неправильно работаю с функциями или же тут есть своя особенность.
 
KING писал(а) >>
Есть индикатор. Для рассчета беруться данные от двух символов за N-ый бар, используются функции iHigh,iLow,iOpen.

Вызываю индикатор из советника и просто прикрепляю индикатор к графику. Входные параметры одинаковые. Но почему значения разные получаются? Я где-то промахнулся с документацией к MT4 и не все изучил, и неправильно работаю с функциями или же тут есть своя особенность.

Если графики открыты то нужна только синхронизация по времени. И желательно делать контроль истории в любом случае. Точнее автоматический перерасчет индикатора после загрузки истории. Если есть желание, то можно довести индикатор. МОжно и в этой ветке

[Eliminato]  
Vinin >>:

Если графики открыты то нужна только синхронизация по времени. И желательно делать контроль истории в любом случае. Точнее автоматический перерасчет индикатора после загрузки истории. Если есть желание, то можно довести индикатор. МОжно и в этой ветке

Спасибо что откликнулись. Нет графики закрыты. Проблема с тестером. История закачана минутная по всем используемым символам. Пересчет на нужный таймфрейм для каждого символа сделан.

 
KING писал(а) >>

Спасибо что откликнулись. Нет графики закрыты. Проблема с тестером. История закачана минутная по всем используемым символам. Пересчет на нужный таймфрейм для каждого символа сделан.

Тогда могу только пример своего индикатора дать. Синхронизация и контроль истории есть.

//+------------------------------------------------------------------+
//|                                                 VininI_MACD%.mq4 |
//|                                Copyright © 2009, Victor Nicolaev |
//|                                                    vinin.ucoz.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, Victor Nicolaev"
#property link      "vinin.ucoz.ru"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_level1 0
#property indicator_color1 Green
#property indicator_color2 Red

extern string gSymbol="";  // используемый инструмент, по умолчанию текущий
extern int Fast      =12;
extern int Slow      =26;
extern int Signal    = 9;
extern int Mode_Main = 3;
extern int Mode_Signal=0;

double MACD_MAIN[], MACD_SIGNAL[];


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   if (gSymbol=="") gSymbol=Symbol();  
   SetIndexBuffer(0,MACD_MAIN);
   SetIndexBuffer(1,MACD_SIGNAL);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexDrawBegin(0,Slow+Signal);
   SetIndexDrawBegin(1,Slow+Signal);
   IndicatorShortName("MACD%("+gSymbol+","+Fast+","+Slow+","+Signal+")"); 
   SetIndexLabel(0,"MACD");
   SetIndexLabel(1,"SIGNAL");


   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    i, counted_bars=IndicatorCounted(), tmpBar, tmpTime, tBars;
   static int gBars=0;
   double MA_FAST,MA_SLOW;
   bool bSymbol=(gSymbol!=Symbol());
   if (counted_bars>0) counted_bars--;
   if (bSymbol) {
      // Контроль истории
      tBars=iBars(gSymbol,0);
      if (tBars-gBars>2) {
         counted_bars=0;
         gBars=tBars;
      }
   }
   int limit=Bars-counted_bars;

   if (limit>Slow) limit-=Slow;
   for (i=limit;i>0;i--) {
      tmpBar=i;
      if (bSymbol) {
          // синхронизация
         tmpTime=Time[i];
         tmpBar=iBarShift(gSymbol,0,tmpTime);
         if (iTime(gSymbol,0,tmpBar)>tmpTime) tmpBar--;
         MA_FAST=iMA(gSymbol,0,Fast,0,Mode_Main,PRICE_CLOSE,tmpBar);
         MA_SLOW=iMA(gSymbol,0,Slow,0,Mode_Main,PRICE_CLOSE,tmpBar);

      } else {
         MA_FAST=iMA(gSymbol,0,Fast,0,Mode_Main,PRICE_CLOSE,i);
         MA_SLOW=iMA(gSymbol,0,Slow,0,Mode_Main,PRICE_CLOSE,i);
      }   
      if (MA_SLOW>0) MACD_MAIN[i]= (MA_FAST/MA_SLOW-1.0)*1000.0;
   }
   for (i=limit;i>0;i--) {
      MACD_SIGNAL[i]=iMAOnArray(MACD_MAIN,0,Signal,0,Mode_Signal,i);
   }
   

   return(0);
  }
//+------------------------------------------------------------------+
Файлы:
[Eliminato]  
Сразу не смог вникнуть. Если не разберусь, обращуськ вам Vinin. Надеюсь вы не против.
 
KING писал(а) >>
Сразу не смог вникнуть. Если не разберусь, обращуськ вам Vinin. Надеюсь вы не против.

Хорошо. Нашел у себя ошибку. Исправленный вариант

Файлы: