//+------------------------------------------------------------------+ //| TestSymbolStochastic.mq4 | //| satori | //| http://www.metaquotes.ru/forum/7790/ | //+------------------------------------------------------------------+ #property copyright "satori" #property link "http://www.metaquotes.ru/forum/7790/" int handle; string filename="test_expert_log.csv"; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- handle= FileOpen(filename,FILE_CSV|FILE_WRITE,';'); if(handle<1) { Print("Файл не обнаружен, последняя ошибка ", GetLastError()); return(false); } //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- FileClose(handle); //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- double test1,test2,test3; int i; for (i=1;i<10;i++) { test1=iStochastic("GBPUSD",Period(),5,3,3,0,0,0,i); //test2=iStochastic("EURUSD",Period(),5,3,3,0,0,0,i); if (FileWrite (handle,TimeToStr(Time[i]),i,test1,test2)<=0) Print("Ошибка записи!"); } //---- return(0); } //+------------------------------------------------------------------+
У меня все работает (правда весь файл не проверял)
Проблема конечно не в закрытии файла, ибо как я говорил изначально столкнулся с разными значениями индикатора в терминале и при вызове из эксперта. А уже потом сделал вывод в файл для изучения данного "феномена".
На самом деле у меня на другом компе тоже все заработало. Однако до поры, до времени...
Мне оказалось достаточным добавить еще одну валютную пару...
test1=iStochastic("GBPUSD",Period(),5,3,3,0,0,0,i); test2=iStochastic("EURGBP",Period(),5,3,3,0,0,0,i);
как ситуация повторилась
2006.10.22 22:00;1;74.83660131;19.04761905
2006.10.20 20:00;2;76.79738562;13.91304348
2006.10.20 16:00;3;78.13504823;25.26315789
2006.10.20 12:00;4;78.65853659;48.7804878
2006.10.20 08:00;5;80.50139276;81.57894737
2006.10.20 04:00;6;80.25974026;79.74683544
2006.10.20 00:00;7;86.36363636;74.66666667
2006.10.19 20:00;8;86.96969697;76.54320988
2006.10.19 16:00;9;80;79.22077922
2006.10.23 00:00;1;65.15151515;29.78723404
2006.10.22 22:00;2;74.83660131;19.67213115
2006.10.20 20:00;3;76.79738562;19.04761905
2006.10.20 16:00;4;78.13504823;13.91304348
2006.10.20 12:00;5;78.65853659;25.26315789
2006.10.20 08:00;6;80.50139276;48.7804878
2006.10.20 04:00;7;80.25974026;81.57894737
Видно, что первая пара в данных условиях (!) работает нормально, однако вторая...
Для меня странно другое - проблема не систематична. Один и тот же код во вроде бы сходных условиях дает разные результаты. Терминал везде 198. Проверялось на двух разных брокерах. Один из них MIG.
Может уважаемые господа разработчики подскажут, как бороться с данной напастью?
Если сделать вот такую выборку,
string time1,time2,time3; for (i=1;i<10;i++) { time1=TimeToStr(iTime("GBPUSD",Period(),i)); time2=TimeToStr(iTime("EURGBP",Period(),i)); time3=TimeToStr(iTime("EURUSD",Period(),i)); if (FileWrite (handle,TimeToStr(Time[i]),i,time1,time2,time3)<=0) Print("Ошибка записи!"); }
то у меня получается следующее:
2006.10.22 22:00;1;2006.10.22 22:00;2006.10.20 20:00;2006.10.22 22:00
2006.10.20 20:00;2;2006.10.20 20:00;2006.10.20 16:00;2006.10.20 20:00
2006.10.20 16:00;3;2006.10.20 16:00;2006.10.20 12:00;2006.10.20 16:00
2006.10.20 12:00;4;2006.10.20 12:00;2006.10.20 08:00;2006.10.20 12:00
2006.10.20 08:00;5;2006.10.20 08:00;2006.10.20 04:00;2006.10.20 08:00
2006.10.20 04:00;6;2006.10.20 04:00;2006.10.20 00:00;2006.10.20 04:00
2006.10.20 00:00;7;2006.10.20 00:00;2006.10.19 20:00;2006.10.20 00:00
2006.10.19 20:00;8;2006.10.19 20:00;2006.10.19 16:00;2006.10.19 20:00
2006.10.19 16:00;9;2006.10.19 16:00;2006.10.19 12:00;2006.10.19 16:00
2006.10.23 00:00;1;2006.10.23 00:00;2006.10.23 00:00;2006.10.23 00:00
2006.10.22 22:00;2;2006.10.22 22:00;2006.10.22 22:00;2006.10.22 22:00
2006.10.20 20:00;3;2006.10.20 20:00;2006.10.20 20:00;2006.10.20 20:00
дальше уже нормально.
Иногда сбой происходит на одной валюте, иногда на двух. Систему мы выяснить не удалось. Толи это зависит от мощности машины (хотя запускалось на достаточно шустрой), толи еще от чего-то...
Но факт на лицо - тестирование невозможно. При первых же обращениях МТ дает некорректные данные.
Остался вопрос: баг ли это или фича. :о) Если фича, то как с ней бороться. Может кто-то сталкивался с подобным?
из первого принтинга видно что бар с индексом 1 стал с индексом 3, 2 стал 4, кроме того судя по всему запускал эксперта на Н4, а время 22:00 тебе ни о чем не говорит
наверно я бы еще раз прочел статейку о моделировании в тестере, она скорее всего расставит все точки над "и"
успехов, результаты не забудь доложить здесь ;)
P.S. альтернативно можно попробовать другой вариант моделирования и посмотреть результаты, а там уже и выводы кое-какие можно будет сделать
Причем такая картина наблюдается и на других TF (1Н,30М,15М и т.д.) да и разные варианты моделирования цены (все три) все равно приводят к упомянутым ошибкам.
И в четырехчасовом баре на 22:00 нет ничего сверхъестественного - обычный "воскресный" бар. Он действительно открывается в 22:00. Не все же брокеры урезают историю, как например Альпари. ;о)
Однако проблему удалось локализовать еще больше. Оказалось, что данный вид эксперта выдает ошибки не у всех брокеров. А именно у тех, у которых присутствуют "воскресные" данные. Если конкретно, то Альпари - работает нормально, а у FIBO и MIG - ошибки. Причем ошибки выдаются только когда мы смотрим в "воскресные" бары.
Не думаю, что это "фича". Скорее похоже на баг. Хотя бы потому, что ошибки не проявляются на одинаковых парах. Они в один момент могут быть на одной паре, в другой момент - на другой, а в третий - сразу на двух.
Я все еще не теряю надежды привлечь внимание разработчиков к данной проблеме и получить от них ответ: что это за напасть, и как с ней бороться ;о) (только не надо говорить: "работай с Альпари" :о))
P.S. В любом случае, спасибо Profi_R за участие, но как видишь, простые решения не помогают, видимо придется вникать глубоко. :о)
#property copyright "Copyright Quark" #property link "" #property indicator_separate_window #property indicator_buffers 2 #property indicator_color2 Red #property indicator_minimum -1 #property indicator_maximum 1 // indicator parameters extern int nPeriod = 9; extern int nPeriod_1 = 6; // indicator buffers double dUsdChf, dUsdChfPrev; double arrGroupBuffer[]; double arrGroupMaBuffer[]; int nExtCountedBars = 0; //////////////////////// int init() { string strIndicatorShortName = "Group(" + Symbol() + " " + nPeriod + ")"; IndicatorShortName(strIndicatorShortName); // drawing settings SetIndexStyle(0, DRAW_NONE); SetIndexShift(0, 0); SetIndexStyle(1, DRAW_LINE); SetIndexShift(1, 0); IndicatorDigits(4); // indicator buffers mapping SetIndexBuffer(0, arrGroupBuffer); SetIndexBuffer(1, arrGroupMaBuffer); return(0); } /////////////////////////// int start() { if(Bars <= nPeriod) return(0); nExtCountedBars = IndicatorCounted(); if(nExtCountedBars < 0) return(-1); // last counted bar will be recounted // if(nExtCountedBars > 0) // nExtCountedBars--; int nPos = Bars - nExtCountedBars - 1; double dPr = 2.0 / (nPeriod + 1); while(nPos > 0) { if(!IsTesting()) { dUsdChf = iMA("USDCHF", 0, nPeriod, 0, MODE_EMA, PRICE_OPEN, nPos - 1); dUsdChfPrev = iMA("USDCHF", 0, nPeriod, 0, MODE_EMA, PRICE_OPEN, nPos); } arrGroupBuffer[nPos - 1] = 0; if(dUsdChfPrev - dUsdChf > 0) arrGroupBuffer[nPos - 1] += 1; else if(dUsdChfPrev - dUsdChf < 0) arrGroupBuffer[nPos - 1] -= 1; if(nPeriod_1 == 1) arrGroupMaBuffer[nPos - 1] = arrGroupBuffer[nPos - 1]; else { dPr = 2.0 / (nPeriod_1 + 1); arrGroupMaBuffer[nPos - 1] = arrGroupBuffer[nPos - 1] * dPr + arrGroupMaBuffer[nPos] * (1 - dPr); } nPos--; } return(0); }
Практической пользы от него мало, так как он не поддается тестированию на истории (вторая валюта создает фантастические прибыли, если бары двух историй не синхронизированы, я об этом уже писал). Но дело не в этом.
Как видно из кода, индикатор от валюты, к чарту которой он присоединен, не зависит. Он всегда работает по USDCHF. Присоединяем индикатор к двум чартам, в моем случае, AUDUSD и EURUSD, но полагаю, можно к любым. Оставляем на несколько дней. И видим, что графики - РАЗНЫЕ. Один и тот же индикатор. Реал тайм. Один и тот же МТ. Перерисовываем принудительно (отцепить - прицепить) - становятся одинаковыми. На какое-то время.
Сейчас я это дело трассирую, если что нарою, сообщу. Возможно, конечно, что дело во мне :)
Код (см. ниже) берет (независимо от того, к какому окну прикреплен индикатор) данные из USDCHF, H1 и рисует график а) Open, MA(Open, 6) и MA(Open, 6, рассчитанная вручную, без вызова стандартного индикатора).
Индикатор был прикреплен к EURUSD H1 и AUDUSD H1. После 12 часов работы на графиках видны различия (напомню, данные берутся из USDCHF и различий быть не должно). Причем, различия не в МА, а именно в линиях Open (в МА, конечно, тоже, но это вторично, из-за Open).
Таким образом, имеет место баг, связанный с использованием данных другой валюты. Ув. разработчики?
#property copyright "Copyright Quark" #property link "" #property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Lime #property indicator_color2 Aqua #property indicator_color3 Red // indicator parameters extern int nPeriod = 6; double arrOpen[]; double arrMa[]; double arrMyMa[]; int nExtCountedBars = 0; double dUsdChf, dUsdChfPrev; //////////////////////// int init() { string strIndicatorShortName = "Test(" + Symbol() + " " + nPeriod + ")"; IndicatorShortName(strIndicatorShortName); // drawing settings SetIndexStyle(0, DRAW_LINE); SetIndexShift(0, 0); SetIndexStyle(1, DRAW_LINE); SetIndexShift(1, 0); SetIndexStyle(2, DRAW_LINE); SetIndexShift(2, 0); IndicatorDigits(4); // indicator buffers mapping SetIndexBuffer(0, arrOpen); SetIndexBuffer(1, arrMa); SetIndexBuffer(2, arrMyMa); return(0); } /////////////////////////// int start() { if(Bars <= nPeriod) return(0); nExtCountedBars = IndicatorCounted(); if(nExtCountedBars < 0) return(-1); int nPos = Bars - nExtCountedBars - 1; double dPr = 2.0 / (nPeriod + 1); while(nPos > 0) { dUsdChf = iMA("USDCHF", 0, nPeriod, 0, MODE_EMA, PRICE_OPEN, nPos - 1); dUsdChfPrev = iMA("USDCHF", 0, nPeriod, 0, MODE_EMA, PRICE_OPEN, nPos); arrOpen[nPos - 1] = iOpen("USDCHF", 0, nPos - 1); arrMa[nPos - 1] = dUsdChf; arrMyMa[nPos - 1] = arrOpen[nPos - 1] * dPr + arrMyMa[nPos] * (1 - dPr); nPos--; } return(0); }
Во-первых, чем больше история, тем больше ошибок.
Во-вторых, вот такой код (сразу прошу прощения за корявость кода):
#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=20; //кол-во считаемых баров, если 0 - то все extern string Currency1="EURUSD"; extern string Currency2="GBPUSD"; string Para; int TF; int handle,handle2; int init() { 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); string Para=Symbol(); int TF=Period(); 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); } return(0); } int deinit() { FileClose(handle); return(0); } int start() { int counted_bars=IndicatorCounted(); int i; double test1,test2; datetime tt1,tt2; BarsCount=MathMin(Bars,(MathMin(iBars(Currency1,Period()),iBars(Currency2,Period())))); for (i=0;i<BarsCount-counted_bars;i++) { ExtMapBuffer1[i]=iTime(Currency1,Period(),i); Sleep(1000); ExtMapBuffer2[i]=iTime(Currency2,Period(),i); 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]),TimeToStr(ExtMapBuffer1[i]),TimeToStr(ExtMapBuffer2[i]) )<=0) Print("нифига не пишет!!"); } FileFlush(handle); if ((iTime(Symbol(),Period(),i)!=iTime(Currency1,Period(),i) || Time[i]!=iTime(Currency1,Period(),i) || iTime(Currency1,Period(),i)!=iTime(Currency2,Period(),i) ) && i>0) { if (FileWrite (handle2, TimeToStr(Time[i])," ",TimeToStr(iTime(Currency1,Period(),i))," ",TimeToStr(iTime(Currency2,Period(),i)) )<=0) Print("нифига не пишет!!"); } } return(0); }
на валютных парах EURUSD и GBPUSD, будучи запущенным на EURGBP на 4Н дает больше 2000 ошибок
на 15М - более 26500.
Причем на 15М сдвиг составляет не один бар, а много-много больше (более 100 (!) баров)
вот кусок лога:
15.06.2006 1:45 16.06.2006 0:45 16.06.2006 0:00
15.06.2006 1:30 16.06.2006 0:30 15.06.2006 23:45
15.06.2006 1:15 16.06.2006 0:15 15.06.2006 23:30
15.06.2006 1:00 16.06.2006 0:00 15.06.2006 23:15
15.06.2006 0:45 15.06.2006 23:45 15.06.2006 23:00
15.06.2006 0:30 15.06.2006 23:30 15.06.2006 22:45
15.06.2006 0:15 15.06.2006 23:15 15.06.2006 22:30
15.06.2006 0:00 15.06.2006 23:00 15.06.2006 22:15
14.06.2006 23:45 15.06.2006 22:45 15.06.2006 22:00
14.06.2006 23:30 15.06.2006 22:30 15.06.2006 21:45
14.06.2006 23:15 15.06.2006 22:15 15.06.2006 21:30
14.06.2006 23:00 15.06.2006 22:00 15.06.2006 21:15
14.06.2006 22:45 15.06.2006 21:45 15.06.2006 21:00
14.06.2006 22:30 15.06.2006 21:30 15.06.2006 20:45
Данный лог снимался с сервера Альпари на свежевыкаченном терминале и свежей истории (до 3.10.2005 на 15М по всем трем валютным парам).
Смысл всех этих изысканий - получить вразумительное объяснение данному явлению от разработчиков.
Причем меня смущает то, что вот уже неделю от Вас, уважаемые господа, нет ни слова.
Я уже не знаю, каким образом доказать Вам серьезность проблемы, дабы Вы обратили на нее свое внимание.
Прозрачная простота ситуации и кода не позволяет мне думать о банальной ошибке. Поэтому В ОЧЕРЕДНОЙ РАЗ ОБРАЩАЮСЬ К РАЗРАБОТЧИКАМ:
Уважаемые господа! Убедительно прошу Вас обратить внимание на данную ветку и дать ХОТЬ КАКИЕ-ТО комментарии со своей стороны. Если это моя ошибка, то не сочтите за труд - подскажите хотя бы где ее искать. И в этом случае я принесу свои извинения за нее. Если же это ошибка в МТ4 - то я думаю стоит уважать время людей (я не только себя имею ввиду) которые тратят этот драгоценный ресурс дабы обнаружить и привлечь Ваше внимание к сложившейся ситуации, что вообще -то не является их прямой задачей.
С уважением и надеждой на конструктивный диалог... :о)
Почти двадцать лет назад, сидя в общаге и размешивая ложечкой по кругу чай, я обнаружил, что изображение сквозь воронку стало искаженным. Я тут же забыл простое объяснение, а увидел в этом подтверждение того, что движущиеся по кругу водные массы вызвывают локальное изменение силы гравитации( и это объясняет исчезновение судов в районе Бермудского треугольника) и соответствено преломление волн (света). Это затмение длилось несколько минут,прежде чем до меня дошло, что это банальная линза, полученная из закрученной воды :)
Я Ваш код немного изменил:
//+------------------------------------------------------------------+ //| 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=20; //кол-во считаемых баров, если 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(),Currency1,Currency2); FileWrite (handle2,"index",Symbol()," ",Currency1," ",Currency2); } return(0); } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- FileClose(handle); //---- return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int i; double test1,test2; datetime tt1,tt2,TimeMain; BarsCount=MathMin(Bars,(MathMin(iBars(Currency1,Period()),iBars(Currency2,Period())))); for (i=0;i<BarsCount-counted_bars;i++) { TimeMain=Time[i]; ExtMapBuffer1[i]=iTime(Currency1,Period(),iBarShift(Currency1,Period(),TimeMain)); //Sleep(1000); ExtMapBuffer2[i]=iTime(Currency2,Period(),iBarShift(Currency2,Period(),TimeMain)); 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]),TimeToStr(ExtMapBuffer1[i]),TimeToStr(ExtMapBuffer2[i]) )<=0) Print("нифига не пишет!!"); } FileFlush(handle); if ((iTime(Symbol(),Period(),i)!=iTime(Currency1,Period(),i) || Time[i]!=iTime(Currency1,Period(),i) || iTime(Currency1,Period(),i)!=iTime(Currency2,Period(),i) ) && i>0) { if (FileWrite (handle2,i, TimeToStr(Time[i])," ",TimeToStr(iTime(Currency1,Period(),i))," ",TimeToStr(iTime(Currency2,Period(),i)) )<=0) Print("нифига не пишет!!"); } }//---- return(0); } //+------------------------------------------------------------------+
То есть, вопрос на самом деле звучит так - почему они не одинаковы, почему есть дыры в истории? Я прогнал этот индикатор на GBPJPY H4 и открыл два полученных файла.
Сразу видно, что в двух местах время ломается, и второй файл показывают кучу "ошибок"
PS Котировки Альпари.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите пожалуйста по следующей проблеме.
Вот код эксперта.
Эксперт запускается на паре EURUSD с быстрой имитацией на сфоррмировавшихся барах. Он считывает показания стохастика с другой валютной пары, в конечном итоге формируется отчет вида:
2006.10.22 22:00;1;76.79738562
2006.10.20 20:00;2;78.13504823
2006.10.20 16:00;3;78.65853659
2006.10.20 12:00;4;80.50139276
2006.10.20 08:00;5;80.25974026
2006.10.20 04:00;6;86.36363636
2006.10.20 00:00;7;86.96969697
2006.10.19 20:00;8;80
2006.10.19 16:00;9;53.76884422
2006.10.23 00:00;1;65.15151515
2006.10.22 22:00;2;74.83660131
2006.10.20 20:00;3;76.79738562 а было 78.13504823 (см. выше)
2006.10.20 16:00;4;78.13504823 а было 78.65853659 (см. выше) и т.д.
2006.10.20 12:00;5;78.65853659
2006.10.20 08:00;6;80.50139276
2006.10.20 04:00;7;80.25974026
2006.10.20 00:00;8;86.36363636
2006.10.19 20:00;9;86.96969697
2006.10.23 04:00;1;52.85714286
2006.10.23 00:00;2;65.15151515
2006.10.22 22:00;3;74.83660131
2006.10.20 20:00;4;76.79738562
2006.10.20 16:00;5;78.13504823
2006.10.20 12:00;6;78.65853659
2006.10.20 08:00;7;80.50139276
2006.10.20 04:00;8;80.25974026
2006.10.20 00:00;9;86.36363636
2006.10.23 08:00;1;21.83406114
2006.10.23 04:00;2;52.85714286
2006.10.23 00:00;3;65.15151515
2006.10.22 22:00;4;74.83660131
2006.10.20 20:00;5;76.79738562
2006.10.20 16:00;6;78.13504823
2006.10.20 12:00;7;78.65853659
2006.10.20 08:00;8;80.50139276
2006.10.20 04:00;9;80.25974026
легко заметить, что при новом прогоне на одном и том же баре значения индикатора разные.
Понимаю, что практическая польза от данного советника сомнительна :о) но целью было показать возникшую проблему. Т.к. на практике это выглядит так: в терминале индикатор показывает правильно, а при вызове из эксперта - иные данные, неправильные. После отсекания всего не оказывающего влияния получился вот такой результат. Я наверно уже жутко туплю, но никак не пойму, где моя ошибка.
Кстати, если сменить валютную пару на текущую - то все ОК.
Заранее признателен за помощь.