Rosh, я как раз и пытаюсь понять, возникает ли ошибка из-за того, что бар USDCHF начинается позже. Для отслеживания этого, я убрал МА (она только мешается), и ввел дополнительно Close[1] и Open[1]. Имеется в виду, что Open[1] всегда будет правильным, и если проблема в этом, то расхождение будет в Open[0], а в Open[1] не будет. Сейчас проверяю. Что я пропустил?
Ну я же прилепил 2 картинки, которые показывают, что в момент появления нового бара на GBPJPY ты обращаешься к старым неизменным данным графика USDCHF, и соотвественно твой алгоритм считает криво. Он будет счиать правильно только в одном случае - если ты его повесишь на родной "график" - но ведь задача заключается в обратном.
Согласен. Но только в том случае, если тестирование с Open[1] покажет, что ошибок не возникает. В этом случае я буду уверен, что да, бага в МТ нет. Есть некая... недоговоренность, что ли.
Плюс, задача в том и заключается, чтобы найти способ обойти ограничение. Скажем, запретить индикатору перерисовываться по EURUSD, пока не подошли данные по USDCHF. Сейчас тестирую вариант
Но тут все зависит от того, как МТ рассчитывает IndicatorCounted. Если по времени прихода тика - не сработает, если по факту перерисовки бара - сработает. Посмотрим.
Согласен. Но только в том случае, если тестирование с Open[1] покажет, что ошибок не возникает. В этом случае я буду уверен, что да, бага в МТ нет. Есть некая... недоговоренность, что ли.
Плюс, задача в том и заключается, чтобы найти способ обойти ограничение. Скажем, запретить индикатору перерисовываться по EURUSD, пока не подошли данные по USDCHF. Сейчас тестирую вариант
Но тут все зависит от того, как МТ рассчитывает IndicatorCounted. Если по времени прихода тика - не сработает, если по факту перерисовки бара - сработает. Посмотрим.
Стоп, стоп. Вот тут ты пишешь :
Как видно из кода, индикатор от валюты, к чарту которой он присоединен, не зависит. Он всегда работает по USDCHF. Присоединяем индикатор к двум чартам, в моем случае, AUDUSD и EURUSD, но полагаю, можно к любым. Оставляем на несколько дней. И видим, что графики - РАЗНЫЕ. Один и тот же индикатор. Реал тайм. Один и тот же МТ. Перерисовываем принудительно (отцепить - прицепить) - становятся одинаковыми. На какое-то время.
То есть, речь идет об онлайновой работе, а теперь перескочили на тестер. Я так не успеваю.
Уважаемый Rosh, не могли бы Вы пояснить, как возможна следующая ситуация. Вот отредактированный Вами индикатор, только я сделал вывод во второй файл списка баров, чтобы видеть, где какой выпадает.
//+------------------------------------------------------------------+
//| RedrawIndicators.mq4 |
//| Satori |
//| http://www.metaquotes.ru/forum/7790/ |
//+------------------------------------------------------------------+
#property copyright "Satori"
#property link "http://www.metaquotes.ru/forum/7790/"
#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
Вроде все нормально… Но вот не задачка – бар 23.10.2006 00:00 присутствует в истории на всех трех валютах! Т.е. он есть и на графике, есть и в архиве котировок. Однако из индикатора его как будто нет. Ну и на последок фокус – если попытаться поставить вертикальную линию на этот бар – то она сдвинется на соседний. :о) Как я не пытался выделить его вертикальной чертой – не вышло.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Плюс, задача в том и заключается, чтобы найти способ обойти ограничение. Скажем, запретить индикатору перерисовываться по EURUSD, пока не подошли данные по USDCHF. Сейчас тестирую вариант
while(nPos > 1 || (nPos == 1 && Time[0] <= iTime("USDCHF", 0, 0)))Но тут все зависит от того, как МТ рассчитывает IndicatorCounted. Если по времени прихода тика - не сработает, если по факту перерисовки бара - сработает. Посмотрим.
Open[1] EURUSD H1 равен 1.2755
Open[1] USDCHF H1 равен 1.2443
Появляется новый часовой бар на Евре, по Франку ничего еще не изменилось. Что сделает твой алгоитм?
Плюс, задача в том и заключается, чтобы найти способ обойти ограничение. Скажем, запретить индикатору перерисовываться по EURUSD, пока не подошли данные по USDCHF. Сейчас тестирую вариант
while(nPos > 1 || (nPos == 1 && Time[0] <= iTime("USDCHF", 0, 0)))Но тут все зависит от того, как МТ рассчитывает IndicatorCounted. Если по времени прихода тика - не сработает, если по факту перерисовки бара - сработает. Посмотрим.
Стоп, стоп. Вот тут ты пишешь :
То есть, речь идет об онлайновой работе, а теперь перескочили на тестер. Я так не успеваю.
Open[1] EURUSD H1 равен 1.2755
Open[1] USDCHF H1 равен 1.2443
Появляется новый часовой бар на Евре, по Франку ничего еще не изменилось. Что сделает твой алгоитм?
Да, ты прав. Надо смотреть время бара, а не его номер.
То есть, речь идет об онлайновой работе, а теперь перескочили на тестер. Я так не успеваю.
Никакого тестера. Только онлайн.
Вот отредактированный Вами индикатор, только я сделал вывод во второй файл списка баров, чтобы видеть, где какой выпадает.
Прогоняем его на 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 присутствует в истории на всех трех валютах! Т.е. он есть и на графике, есть и в архиве котировок.
Однако из индикатора его как будто нет.
Ну и на последок фокус – если попытаться поставить вертикальную линию на этот бар – то она сдвинется на соседний. :о) Как я не пытался выделить его вертикальной чертой – не вышло.