Перерисовка стандартных индикаторов?! - страница 3

 
Rosh, я как раз и пытаюсь понять, возникает ли ошибка из-за того, что бар USDCHF начинается позже. Для отслеживания этого, я убрал МА (она только мешается), и ввел дополнительно Close[1] и Open[1]. Имеется в виду, что Open[1] всегда будет правильным, и если проблема в этом, то расхождение будет в Open[0], а в Open[1] не будет. Сейчас проверяю. Что я пропустил?
 
Ну я же прилепил 2 картинки, которые показывают, что в момент появления нового бара на GBPJPY ты обращаешься к старым неизменным данным графика USDCHF, и соотвественно твой алгоритм считает криво. Он будет счиать правильно только в одном случае - если ты его повесишь на родной "график" - но ведь задача заключается в обратном.
 
Согласен. Но только в том случае, если тестирование с Open[1] покажет, что ошибок не возникает. В этом случае я буду уверен, что да, бага в МТ нет. Есть некая... недоговоренность, что ли.

Плюс, задача в том и заключается, чтобы найти способ обойти ограничение. Скажем, запретить индикатору перерисовываться по EURUSD, пока не подошли данные по USDCHF. Сейчас тестирую вариант

while(nPos > 1 || (nPos == 1 && Time[0] <= iTime("USDCHF", 0, 0)))



Но тут все зависит от того, как МТ рассчитывает IndicatorCounted. Если по времени прихода тика - не сработает, если по факту перерисовки бара - сработает. Посмотрим.

 
Вот сейчас время 11-56 МСК или 9-56 по серверному времени.
Open[1] EURUSD H1 равен 1.2755
Open[1] USDCHF H1 равен 1.2443

Появляется новый часовой бар на Евре, по Франку ничего еще не изменилось. Что сделает твой алгоитм?
 
Согласен. Но только в том случае, если тестирование с Open[1] покажет, что ошибок не возникает. В этом случае я буду уверен, что да, бага в МТ нет. Есть некая... недоговоренность, что ли.

Плюс, задача в том и заключается, чтобы найти способ обойти ограничение. Скажем, запретить индикатору перерисовываться по EURUSD, пока не подошли данные по USDCHF. Сейчас тестирую вариант

while(nPos > 1 || (nPos == 1 && Time[0] <= iTime("USDCHF", 0, 0)))



Но тут все зависит от того, как МТ рассчитывает IndicatorCounted. Если по времени прихода тика - не сработает, если по факту перерисовки бара - сработает. Посмотрим.




Стоп, стоп. Вот тут ты пишешь :
Как видно из кода, индикатор от валюты, к чарту которой он присоединен, не зависит. Он всегда работает по USDCHF. Присоединяем индикатор к двум чартам, в моем случае, AUDUSD и EURUSD, но полагаю, можно к любым. Оставляем на несколько дней. И видим, что графики - РАЗНЫЕ. Один и тот же индикатор. Реал тайм. Один и тот же МТ. Перерисовываем принудительно (отцепить - прицепить) - становятся одинаковыми. На какое-то время.

То есть, речь идет об онлайновой работе, а теперь перескочили на тестер. Я так не успеваю.
 
Вот сейчас время 11-56 МСК или 9-56 по серверному времени.
Open[1] EURUSD H1 равен 1.2755
Open[1] USDCHF H1 равен 1.2443

Появляется новый часовой бар на Евре, по Франку ничего еще не изменилось. Что сделает твой алгоитм?



Да, ты прав. Надо смотреть время бара, а не его номер.
 

То есть, речь идет об онлайновой работе, а теперь перескочили на тестер. Я так не успеваю.


Никакого тестера. Только онлайн.
 
удалил
 
Уважаемый Rosh, не могли бы Вы пояснить, как возможна следующая ситуация.
Вот отредактированный Вами индикатор, только я сделал вывод во второй файл списка баров, чтобы видеть, где какой выпадает.

//+------------------------------------------------------------------+
//|                                             RedrawIndicators.mq4 |
//|                                                           Satori |
//|                             http://www.metaquotes.ru/forum/7790/ |
//+------------------------------------------------------------------+
#property copyright "Satori"
#property link      "http://www.metaquotes.ru/forum/7790/&quot;

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Yellow
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
extern int       BarsCount=0;   //кол-во считаемых баров, если 0 - то все
extern string    Currency1="EURUSD";
extern string    Currency2="GBPUSD";

int handle,handle2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexLabel(0,Currency1);

   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexLabel(1,Currency2);

   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);

   handle= FileOpen("TestFile.csv",FILE_CSV|FILE_WRITE,';');
   handle2= FileOpen("TestFile2.csv",FILE_CSV|FILE_WRITE,';');
  if(handle<1 || handle2<1 )
   {
    Print("Файл не обнаружен, последняя ошибка ", GetLastError());
    return(false);
   }
   else
   {
   FileWrite (handle,"index",Symbol(),"index",Currency1,"index",Currency2);
   FileWrite (handle2,"index",Currency1,Currency2,Symbol());
   }

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   FileClose(handle);
   FileClose(handle2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int i;
   int test1,test2;
   datetime tt1,tt2,TimeMain;
   BarsCount=MathMin(Bars,(MathMin(iBars(Currency1,Period()),iBars(Currency2,Period()))));
   Print (Bars," ",iBars(Currency1,Period())," ",iBars(Currency2,Period()));
   Print (BarsCount);
   
   for (i=0;i<BarsCount-counted_bars;i++)
      {
       TimeMain=Time[i];
       test1=iBarShift(Currency1,Period(),TimeMain);
       test2=iBarShift(Currency2,Period(),TimeMain);
       
       ExtMapBuffer1[i]=iTime(Currency1,Period(),test1);
       ExtMapBuffer2[i]=iTime(Currency2,Period(),test2);

       ExtMapBuffer3[i]=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);
       tt1=Time[i]-ExtMapBuffer1[i];
       tt2=Time[i]-ExtMapBuffer2[i];
       if (ExtMapBuffer3[i]!=0 || tt1!=0 || tt2!=0) 
         {
         if (FileWrite (handle,
         i,TimeToStr(Time[i]),iBarShift(Currency1,Period(),TimeMain),TimeToStr(ExtMapBuffer1[i]),iBarShift(Currency2,Period(),TimeMain),TimeToStr(ExtMapBuffer2[i])
          )<=0) Print("нифига не пишет!!");
         }
        FileFlush(handle);
        if (FileWrite (handle2,i,
         TimeToStr(iTime(Currency1,Period(),test1)),
         TimeToStr(iTime(Currency2,Period(),test2)),
         TimeToStr(Time[i])
          )<=0) Print("нифига не пишет!!");
        FileFlush(handle2);

      }//----
   return(0);
  }
//+------------------------------------------------------------------+



Прогоняем его на EURGBP 4Н на котировках двух других ДЦ , не Альпари (MIG,FIBO)
Картина на обоих практически идентичная, пример покажу на MIG’е.
index EURGBP index EURUSD index GBPUSD
15 30.10.2006 0:00 16 29.10.2006 23:00 16 29.10.2006 23:00
46 23.10.2006 0:00 47 22.10.2006 23:00 47 22.10.2006 23:00
77 16.10.2006 0:00 78 15.10.2006 23:00 78 15.10.2006 23:00
108 09.10.2006 0:00 109 08.10.2006 23:00 109 08.10.2006 23:00
139 02.10.2006 0:00 139 02.10.2006 0:00 140 01.10.2006 23:00

Возьмем например 46-47 бары
Во втором файле:
45 23.10.2006 4:00 23.10.2006 4:00 23.10.2006 4:00
46 22.10.2006 23:00 22.10.2006 23:00 23.10.2006 0:00
47 22.10.2006 23:00 22.10.2006 23:00 22.10.2006 23:00
48 20.10.2006 20:00 20.10.2006 20:00 20.10.2006 20:00

Вроде все нормально… Но вот не задачка – бар 23.10.2006 00:00 присутствует в истории на всех трех валютах! Т.е. он есть и на графике, есть и в архиве котировок.
Однако из индикатора его как будто нет.
Ну и на последок фокус – если попытаться поставить вертикальную линию на этот бар – то она сдвинется на соседний. :о) Как я не пытался выделить его вертикальной чертой – не вышло.



 
Вас не затруднит в виде картинки сделать? Скриншот. Тяжело в уме расставлять столбцы.