Я почему попросил Вас сделать проверку? Дело в том, что
Как я понял, создание
хендлов Вашего индикатора OHLC_Indicator призвано инициировать синхронизацию инструментов? Я
чутка добавил, чтобы ещё раз "подтолкнуть" этот процесс.
Но что с этим ухищрением, что без оного мой индикатор
запускается не с первого раза. Хотя и происходит
дополнительная проверка синхронизации (из документации к
Bars())...
//+------------------------------------------------------------------+//| ICTMP.mq5 |//| Copyright 2020, Tabolin S.N. |//| https://www.mql5.com/ru/users/vip.avos |//| Indicator for calculating the total price movement |//+------------------------------------------------------------------+#property copyright"Copyright 2020, Tabolin S.N."#property link"https://www.mql5.com/ru/users/vip.avos"#property version"1.03"//+------------------------------------------------------------------+#property indicator_chart_window#property indicator_buffers3#property indicator_plots1//--- plot ICTMP#property indicator_label1"ICTMP"#property indicator_type1DRAW_LINE#property indicator_color1clrDarkOrange#property indicator_style1STYLE_SOLID#property indicator_width11//+------------------------------------------------------------------+#include <Math\Stat\Math.mqh>
//+------------------------------------------------------------------+inputbool in_market_watch = false; // true – только символы в MarketWatchinputbool in_use_current = true; // использовать в рассчётах текущий инструмент//input int in_bars_calc = 500; // количество баров для расчётаinputint in_smoothing = 5; // сглаживание//+------------------------------------------------------------------+double odds = 0.0;
double request_close[];
string symbols_name[7]= {"GBPUSD","GBPNZD","GBPJPY","GBPCHF","GBPCAD","GBPAUD","EURGBP"};
int odds_bars = 100;
int bars_calc = 1000;
bool ready = false;
string vlt = "";
int array_handles[];
//--- indicator buffersdouble Buffer_plots[];
double Buffer_su[];
double Buffer_sy[];
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingSetIndexBuffer(0,Buffer_plots, INDICATOR_DATA);
SetIndexBuffer(1,Buffer_symb, INDICATOR_CALCULATIONS);
SetIndexBuffer(2,Buffer_summ, INDICATOR_CALCULATIONS);
ArraySetAsSeries(Buffer_plots, true);
ArraySetAsSeries(Buffer_summ, true);
ArraySetAsSeries(Buffer_symb, true);
ArraySetAsSeries(request_close, true);
int nV = 0;
bars_calc = Bars(Symbol(),PERIOD_CURRENT);
for(int i=0; i<size_array_symbols; i++)
{
if(!SymbolInfoInteger(symbols_name[i],SYMBOL_SELECT))
{
if(GetLastError()==ERR_MARKET_UNKNOWN_SYMBOL) return(INIT_FAILED);
SymbolSelect(symbols_name[i],true);
Print("= В Обзор Рынка добавлен инструмент ",symbols_name[i]);
}
int handle_iCustom=iCustom(symbols_name[i],Period(),"my_used\\OHLC_Indicator");
//--- if the handle is not createdif(handle_iCustom==INVALID_HANDLE)
{
//--- tell about the failure and output the error codePrintFormat("Failed to create handle of the iCustom indicator for the symbol %s/%s, error code %d",
symbols_name[nV-1],
EnumToString(Period()),
GetLastError());
//--- the indicator is stopped earlyreturn(INIT_FAILED);
}
else
{
double chk[];
ArrayFree(chk);
CopyBuffer(handle_iCustom,3,0,300,chk);
}int size_array_handles = ArraySize(array_handles);
ArrayResize(array_handles,size_array_handles+1);
array_handles[size_array_handles] = handle_iCustom;
}
ArrayPrint(symbols_name);
Print("bars_calc = ",bars_calc);
for(int i = 0; i < ArraySize(symbols_name); i++)
{
int bc = Bars(symbols_name[i],PERIOD_CURRENT);
if(bc > 0)
{
Print("Количество баров в истории терминала по символу ",symbols_name[i]," на данный момент = ",bc);
}
else//нет доступных баров
{
//--- видимо, данные по символу не синхронизированы с данными на сервереbool synchronized = false;
//--- счетчик циклаint attempts = 0;
// сделаем 5 попыток дождаться синхронизацииwhile(attempts < 9)
{
if(SeriesInfoInteger(Symbol(),0,SERIES_SYNCHRONIZED))
{
//--- есть синхронизация, выходим
synchronized = true;
break;
}
//--- увеличим счетчик
attempts++;
//--- подождем 150 миллисекунд до следующей итерацииSleep(150);
}
//--- вышли из цикла по факту синхронизацииif(!synchronized)
{
Print("Не удалось получить количество баров на ",symbols_name[i]);
return(INIT_FAILED);
}
}if(bars_calc > bc) bars_calc = bc;
Print(symbols_name[i]," ",i," ~~~ bars_calc = ",bars_calc);
}
if(bars_calc < odds_bars + in_smoothing + 1)
{
Print("Баров для рассчётов меньше необходимого");
return(INIT_FAILED);
}
//if(bars_calc > 1000) bars_calc = 1000;Print("bars_calc = ",bars_calc);
Print("=======================================");
//---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+
2020.01.1120:14:50.595 ICTMP_1.03 (GBPUSD,H8) = В Обзор Рынка добавлен инструмент GBPJPY
2020.01.1120:14:50.611 ICTMP_1.03 (GBPUSD,H8) = В Обзор Рынка добавлен инструмент GBPCHF
2020.01.1120:14:50.628 ICTMP_1.03 (GBPUSD,H8) = В Обзор Рынка добавлен инструмент GBPCAD
2020.01.1120:14:50.646 ICTMP_1.03 (GBPUSD,H8) = В Обзор Рынка добавлен инструмент GBPAUD
2020.01.1120:14:50.663 ICTMP_1.03 (GBPUSD,H8) = В Обзор Рынка добавлен инструмент EURGBP
2020.01.1120:14:50.679 ICTMP_1.03 (GBPUSD,H8) "GBPUSD""GBPNZD""GBPUSD""GBPJPY""GBPCHF""GBPCAD""GBPAUD""EURGBP"2020.01.1120:14:50.679 ICTMP_1.03 (GBPUSD,H8) bars_calc = 93202020.01.1120:14:50.679 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPUSD на данный момент = 93202020.01.1120:14:50.679 ICTMP_1.03 (GBPUSD,H8) GBPUSD 0 ~~~ bars_calc = 93202020.01.1120:14:50.679 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPNZD на данный момент = 33382020.01.1120:14:50.680 ICTMP_1.03 (GBPUSD,H8) GBPNZD 1 ~~~ bars_calc = 33382020.01.1120:14:50.680 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPUSD на данный момент = 93202020.01.1120:14:50.680 ICTMP_1.03 (GBPUSD,H8) GBPUSD 2 ~~~ bars_calc = 33382020.01.1120:14:50.680 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPJPY на данный момент = 33382020.01.1120:14:50.680 ICTMP_1.03 (GBPUSD,H8) GBPJPY 3 ~~~ bars_calc = 33382020.01.1120:14:50.680 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPCHF на данный момент = 33382020.01.1120:14:50.680 ICTMP_1.03 (GBPUSD,H8) GBPCHF 4 ~~~ bars_calc = 33382020.01.1120:14:50.680 ICTMP_1.03 (GBPUSD,H8) GBPCAD 5 ~~~ bars_calc = 02020.01.1120:14:50.680 ICTMP_1.03 (GBPUSD,H8) GBPAUD 6 ~~~ bars_calc = 02020.01.1120:14:50.681 ICTMP_1.03 (GBPUSD,H8) EURGBP 7 ~~~ bars_calc = 02020.01.1120:14:50.681 ICTMP_1.03 (GBPUSD,H8) Баров для рассчётов меньше необходимого
2020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) "GBPUSD""GBPNZD""GBPUSD""GBPJPY""GBPCHF""GBPCAD""GBPAUD""EURGBP"2020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) bars_calc = 93202020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPUSD на данный момент = 93202020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) GBPUSD 0 ~~~ bars_calc = 93202020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPNZD на данный момент = 33382020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) GBPNZD 1 ~~~ bars_calc = 33382020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPUSD на данный момент = 93202020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) GBPUSD 2 ~~~ bars_calc = 33382020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPJPY на данный момент = 33382020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) GBPJPY 3 ~~~ bars_calc = 33382020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPCHF на данный момент = 33382020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) GBPCHF 4 ~~~ bars_calc = 33382020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPCAD на данный момент = 33382020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) GBPCAD 5 ~~~ bars_calc = 33382020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPAUD на данный момент = 33382020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) GBPAUD 6 ~~~ bars_calc = 33382020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) EURGBP 7 ~~~ bars_calc = 02020.01.1120:14:59.561 ICTMP_1.03 (GBPUSD,H8) Баров для рассчётов меньше необходимого
2020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) "GBPUSD""GBPNZD""GBPUSD""GBPJPY""GBPCHF""GBPCAD""GBPAUD""EURGBP"2020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) bars_calc = 93202020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPUSD на данный момент = 93202020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) GBPUSD 0 ~~~ bars_calc = 93202020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPNZD на данный момент = 33382020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) GBPNZD 1 ~~~ bars_calc = 33382020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPUSD на данный момент = 93202020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) GBPUSD 2 ~~~ bars_calc = 33382020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPJPY на данный момент = 33382020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) GBPJPY 3 ~~~ bars_calc = 33382020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPCHF на данный момент = 33382020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) GBPCHF 4 ~~~ bars_calc = 33382020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPCAD на данный момент = 33382020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) GBPCAD 5 ~~~ bars_calc = 33382020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPAUD на данный момент = 33382020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) GBPAUD 6 ~~~ bars_calc = 33382020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу EURGBP на данный момент = 33382020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) EURGBP 7 ~~~ bars_calc = 33382020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) bars_calc = 33382020.01.1120:15:07.925 ICTMP_1.03 (GBPUSD,H8) =======================================
2020.01.1120:20:54.321 ICTMP_1.03 (GBPUSD,H8) = В Обзор Рынка добавлен инструмент GBPJPY
2020.01.1120:20:54.341 ICTMP_1.03 (GBPUSD,H8) = В Обзор Рынка добавлен инструмент GBPCHF
2020.01.1120:20:54.358 ICTMP_1.03 (GBPUSD,H8) = В Обзор Рынка добавлен инструмент GBPCAD
2020.01.1120:20:54.375 ICTMP_1.03 (GBPUSD,H8) = В Обзор Рынка добавлен инструмент GBPAUD
2020.01.1120:20:54.392 ICTMP_1.03 (GBPUSD,H8) = В Обзор Рынка добавлен инструмент EURGBP
2020.01.1120:20:54.408 ICTMP_1.03 (GBPUSD,H8) "GBPUSD""GBPNZD""GBPJPY""GBPCHF""GBPCAD""GBPAUD""EURGBP"2020.01.1120:20:54.408 ICTMP_1.03 (GBPUSD,H8) bars_calc = 93202020.01.1120:20:54.408 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPUSD на данный момент = 93202020.01.1120:20:54.408 ICTMP_1.03 (GBPUSD,H8) GBPUSD 0 ~~~ bars_calc = 93202020.01.1120:20:54.408 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPNZD на данный момент = 33382020.01.1120:20:54.408 ICTMP_1.03 (GBPUSD,H8) GBPNZD 1 ~~~ bars_calc = 33382020.01.1120:20:54.408 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPJPY на данный момент = 33382020.01.1120:20:54.408 ICTMP_1.03 (GBPUSD,H8) GBPJPY 2 ~~~ bars_calc = 33382020.01.1120:20:54.408 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPCHF на данный момент = 33382020.01.1120:20:54.408 ICTMP_1.03 (GBPUSD,H8) GBPCHF 3 ~~~ bars_calc = 33382020.01.1120:20:54.408 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPCAD на данный момент = 33382020.01.1120:20:54.408 ICTMP_1.03 (GBPUSD,H8) GBPCAD 4 ~~~ bars_calc = 33382020.01.1120:20:54.408 ICTMP_1.03 (GBPUSD,H8) Не удалось получить количество баров на GBPAUD
2020.01.1120:21:07.537 ICTMP_1.03 (GBPUSD,H8) "GBPUSD""GBPNZD""GBPUSD""GBPJPY""GBPCHF""GBPCAD""GBPAUD""EURGBP"2020.01.1120:21:07.537 ICTMP_1.03 (GBPUSD,H8) bars_calc = 93202020.01.1120:21:07.537 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPUSD на данный момент = 93202020.01.1120:21:07.537 ICTMP_1.03 (GBPUSD,H8) GBPUSD 0 ~~~ bars_calc = 93202020.01.1120:21:07.537 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPNZD на данный момент = 33382020.01.1120:21:07.537 ICTMP_1.03 (GBPUSD,H8) GBPNZD 1 ~~~ bars_calc = 33382020.01.1120:21:07.537 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPUSD на данный момент = 93202020.01.1120:21:07.537 ICTMP_1.03 (GBPUSD,H8) GBPUSD 2 ~~~ bars_calc = 33382020.01.1120:21:07.538 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPJPY на данный момент = 33382020.01.1120:21:07.538 ICTMP_1.03 (GBPUSD,H8) GBPJPY 3 ~~~ bars_calc = 33382020.01.1120:21:07.538 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPCHF на данный момент = 33382020.01.1120:21:07.538 ICTMP_1.03 (GBPUSD,H8) GBPCHF 4 ~~~ bars_calc = 33382020.01.1120:21:07.538 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPCAD на данный момент = 33382020.01.1120:21:07.538 ICTMP_1.03 (GBPUSD,H8) GBPCAD 5 ~~~ bars_calc = 33382020.01.1120:21:07.538 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPAUD на данный момент = 33382020.01.1120:21:07.538 ICTMP_1.03 (GBPUSD,H8) GBPAUD 6 ~~~ bars_calc = 33382020.01.1120:21:07.538 ICTMP_1.03 (GBPUSD,H8) Не удалось получить количество баров на EURGBP
2020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) "GBPUSD""GBPNZD""GBPUSD""GBPJPY""GBPCHF""GBPCAD""GBPAUD""EURGBP"2020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) bars_calc = 93202020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPUSD на данный момент = 93202020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) GBPUSD 0 ~~~ bars_calc = 93202020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPNZD на данный момент = 33382020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) GBPNZD 1 ~~~ bars_calc = 33382020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPUSD на данный момент = 93202020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) GBPUSD 2 ~~~ bars_calc = 33382020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPJPY на данный момент = 33382020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) GBPJPY 3 ~~~ bars_calc = 33382020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPCHF на данный момент = 33382020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) GBPCHF 4 ~~~ bars_calc = 33382020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPCAD на данный момент = 33382020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) GBPCAD 5 ~~~ bars_calc = 33382020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу GBPAUD на данный момент = 33382020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) GBPAUD 6 ~~~ bars_calc = 33382020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) Количество баров в истории терминала по символу EURGBP на данный момент = 33382020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) EURGBP 7 ~~~ bars_calc = 33382020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) bars_calc = 33382020.01.1120:21:30.637 ICTMP_1.03 (GBPUSD,H8) =======================================
И вопрос второй. Почему этот индикатор отрисовывается в тестере, а если бросить его на график - не рисуется?
1. Надо правильно назначить пустое значение для отображения.
Если поставленок примеру
PlotIndexSetDouble(0, PLOT_EMPTY_VALUE, 0);
то все значения до начала отображения реальных, рассчитанных значений индикатора должны быть заполнены нулями.
Если-же для пустых значений используется EMPTY_VALUE по умолчанию, то все значения до начала отображения реальных, рассчитанных значений
индикатора должны быть заполнены этим значением, то-есть EMPTY_VALUE.
2. При запуске в тестере все символы, к которым есть обращение в коде, добавляются в обзор рынка автоматом. А в терминале присутствуют
только те которые открыты пользователем. Так вот что может показать индикатор по отсутствующей паре??? Ничего. Следовательно в OnInit
сделайте проверку присутствия пары в обзоре рынка. Даже необязательно отображение
SYMBOL_VISIBLE, достаточно SYMBOL_SELECT
1. Надо правильно назначить пустое значение для отображения.
Если поставленок примеру
то все значения до начала отображения реальных, рассчитанных значений индикатора должны быть заполнены нулями.
Если-же для пустых значений используется EMPTY_VALUE
по умолчанию, то все значения до начала отображения реальных, рассчитанных значений индикатора должны быть заполнены этим значением,
то-есть EMPTY_VALUE.
2. При запуске в тестере все символы, к которым есть обращение в коде, добавляются в обзор рынка автоматом. А в терминале присутствуют
только те которые открыты пользователем. Так вот что может показать индикатор по отсутствующей паре??? Ничего. Следовательно в
OnInit сделайте проверку присутствия пары в обзоре рынка. Даже необязательно отображение
SYMBOL_VISIBLE, достаточно SYMBOL_SELECT
1. Спасибо.
2. С этим я уже разобрался. Вот здесь цветом
выделено всё, что должно, по идее, инициировать синхронизацию (перед первым жёлтым - добавление инструмента в обзор рынка). Я считаю, что
там прописаны явно излишние меры, но и они не гарантируют запуск индикатора. К примеру, я запустил индикатор на графике. Инструменты в
обзоре есть, данные уже закачаны. Закрываю терминал. Запускаю его. И индикатор не запускается.
2020.01.1218:57:17.888 ICTMP_1.03 (EURUSD,H8) Не удалось получить количество баров на EURTRY
Связывать это с выходными не получается по простой причине - данные то уже есть в терминале.
Кстати, выход по INIT_FAILED не имеет никакого смысла, ибо индикатор всё-равно висит на графике. Помогает такая конструкция
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
В OHLC Indicator я допустил ошибку. В версии 1.001 исправил:
@Vladimir Karputov, а Вы можете сами сделать проверку? В обзоре рынка оставить только один инструмент и запустить Ваш проверочный индикатор?
П.С. Само собой перезагрузив терминал...
OHLC Indicator version "1.002"
MultiSymbols Indicator version "1.001"
(проверка)
Я почему попросил Вас сделать проверку? Дело в том, что
Не нужно никаких 'Bars' - достаточно проводить проверку 'BarsCalculated'
если индикатор посчитан - будет значение > '0'.
Не нужно никаких 'Bars' - достаточно проводить проверку 'BarsCalculated'
если индикатор посчитан - будет значение > '0'.
С этим вообще не проходит.
Как только этот участок скрываю - всё работает.
С этим вообще не проходит.
Как только этот участок скрываю - всё работает.
MultiSymbols Indicator version "1.002"
Отображает все семь цен
Первый вопрос.
Как избавиться от "хвоста"?
И вопрос второй. Почему этот индикатор отрисовывается в тестере, а если бросить его на график - не рисуется?
1. Надо правильно назначить пустое значение для отображения.
Если поставленок примеру
то все значения до начала отображения реальных, рассчитанных значений индикатора должны быть заполнены нулями.
Если-же для пустых значений используется EMPTY_VALUE по умолчанию, то все значения до начала отображения реальных, рассчитанных значений индикатора должны быть заполнены этим значением, то-есть EMPTY_VALUE.
2. При запуске в тестере все символы, к которым есть обращение в коде, добавляются в обзор рынка автоматом. А в терминале присутствуют только те которые открыты пользователем. Так вот что может показать индикатор по отсутствующей паре??? Ничего. Следовательно в OnInit сделайте проверку присутствия пары в обзоре рынка. Даже необязательно отображение SYMBOL_VISIBLE, достаточно SYMBOL_SELECT
1. Надо правильно назначить пустое значение для отображения.
Если поставленок примеру
то все значения до начала отображения реальных, рассчитанных значений индикатора должны быть заполнены нулями.
Если-же для пустых значений используется EMPTY_VALUE по умолчанию, то все значения до начала отображения реальных, рассчитанных значений индикатора должны быть заполнены этим значением, то-есть EMPTY_VALUE.
2. При запуске в тестере все символы, к которым есть обращение в коде, добавляются в обзор рынка автоматом. А в терминале присутствуют только те которые открыты пользователем. Так вот что может показать индикатор по отсутствующей паре??? Ничего. Следовательно в OnInit сделайте проверку присутствия пары в обзоре рынка. Даже необязательно отображение SYMBOL_VISIBLE, достаточно SYMBOL_SELECT
1. Спасибо.
2. С этим я уже разобрался. Вот здесь цветом выделено всё, что должно, по идее, инициировать синхронизацию (перед первым жёлтым - добавление инструмента в обзор рынка). Я считаю, что там прописаны явно излишние меры, но и они не гарантируют запуск индикатора. К примеру, я запустил индикатор на графике. Инструменты в обзоре есть, данные уже закачаны. Закрываю терминал. Запускаю его. И индикатор не запускается.
Связывать это с выходными не получается по простой причине - данные то уже есть в терминале.
Кстати, выход по INIT_FAILED не имеет никакого смысла, ибо индикатор всё-равно висит на графике. Помогает такая конструкция
Впрочем, в таком случае, уже и return теряет смысл.