Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 737
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Какая размерность массива NewsArr во втором измерении?
К сожалению, не понял. Что такое второе измерение?
А, наверное понял: NewsArr принимает значения 0,1,2 и 3. Это?
Наверное это: string NewsArr[4][1000];
К сожалению, не понял. Что такое второе измерение?
А, наверное понял: NewsArr принимает значения 0,1,2 и 3. Это?
Наверное это: string NewsArr[4][1000];
Первое измерение и второе измерение.
Но наверное что-то не то ответили.Первое измерение и второе измерение.
Но наверное что-то не то ответили.А где искать размерность второго измерения?
Или размерность первого измерения 4, а второго 1000?А где искать размерность второго измерения?
Или размерность первого измерения 4, а второго 1000?Да. Но что-то напутано в этом сообщении
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
novichok2018, 2019.01.16 15:52
Возможно, вопрос глупый, раз никто не отвечает, но как ещё бороться с остановкой работы советника и возобновлением после компиляции?
Платформа выдает сообщение: array out of range (284,17).
строка 284: NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh); позиция 17 открывает квадр.скобку с NomNews, кот. глобально инициирована 0.
Менял 0 на 1, безрезультатно.
Менял в строке if(NomNews==300)break; 300 на 360000, безрезультатно.
Скомпилирую - несколько минут работает нормально. И что делать?
При количестве значений во втором измерении 1000 и
Выход за пределы массива во втором измерении быть не может.У меня нет точек привязки, есть только вертикальное перемещение, горизонталь один раз задаю через ширину экрана. Вести отсчет с другой стороны не проблема, однако вызывает удивление что одно и то же действие в разных функциях выполняется по-разному.
И еще есть вопрос - если в качестве текста метки выводится Bid, то в какой функции это делать более оптимально OnChartEvent или OnCalculate?
У OBJ_LABEL точка привязки есть даже если ты ее не задавал, по-умолчаню это левый верхний угол. Bid меняется в OnCalculate, в нём и делай изменение текста в метке.
Да. Но что-то напутано в этом сообщении
При количестве значений во втором измерении 1000 и
Выход за пределы массива во втором измерении быть не может.Да нет, ничего вроде не напутал. Вот скопированное сообщение: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array out of range in 'OnNews_M5_EURUSD.mq4' (284,17).
Да нет, ничего вроде не напутал. Вот скопированное сообщение: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array out of range in 'OnNews_M5_EURUSD.mq4' (284,17).
позиция 17 открывает квадр.скобку с NomNews, кот. глобально инициирована 0.
Ну так у вас размер ячейки массива во втором измерении нулевой получается...
Ну так у вас размер ячейки массива во втором измерении нулевой получается...
Вот где находится NomNews:
datetime TimeNewsFunck(int nomf)
{
string s=NewsArr[0][nomf];
string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2),":",StringSubstr(s,14,4));
return((datetime)(StringToTime(time) + GMTplus*3600));
}
//345678901234567890////////////////////////////////////////////////////////////////////////////////
void UpdateNews()
{
string TEXT=ReadCBOE();
int sh = StringFind(TEXT,"pageStartAt>")+12;
int sh2= StringFind(TEXT,"</tbody>");
TEXT=StringSubstr(TEXT,sh,sh2-sh);
sh=0;
while(!IsStopped())
{
sh = StringFind(TEXT,"event_timestamp",sh)+17;
sh2= StringFind(TEXT,"onclick",sh)-2;
if(sh<17 || sh2<0)break;
NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
sh = StringFind(TEXT,"flagCur",sh)+10;
sh2= sh+3;
if(sh<10 || sh2<3)break;
NewsArr[1][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
if(OnlySymbolNews && StringFind(ValStr,NewsArr[1][NomNews])<0)continue;
sh = StringFind(TEXT,"title",sh)+7;
sh2= StringFind(TEXT,"Volatility",sh)-1;
if(sh<7 || sh2<0)break;
NewsArr[2][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
if(StringFind(NewsArr[2][NomNews],"High")>=0 && !HighNews)continue;
if(StringFind(NewsArr[2][NomNews],"Moderate")>=0 && !MidleNews)continue;
if(StringFind(NewsArr[2][NomNews],"Low")>=0 && !LowNews)continue;
sh=StringFind(TEXT,"left event",sh)+12;
int sh1=StringFind(TEXT,"Speaks",sh);
sh2=StringFind(TEXT,"<",sh);
if(sh<12 || sh2<0)break;
if(sh1<0 || sh1>sh2)NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
else NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh1-sh);
NomNews++;
if(NomNews==300)break;
}
}
Значения от 0 до 300. Задать глобально 4?
Значения от 0 до 300. Задать глобально 4?
Всё равно на 12 минуте работы выдает сообщение.
Всё равно на 12 минуте работы выдает сообщение.
из всего могу сказать, что NomNews попадает в цикл While уже в состоянии больше, чем 999. И тогда нужно искать из-за чего так выходит и где-то ставить сброс этой переменной.
Что бы это проверить впишите в самом начале цикла: