![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
{
//---
ObjectCreate("SimultaneousReleaseIndex1",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT,"Four");
ObjectCreate("SimultaneousReleaseIndex2",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT,"44");
ObjectCreate("SimultaneousReleaseIndex3",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT,"Forty4");
ObjectCreate("SimultaneousReleaseIndex4",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT,".1234567890");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT)))
Print("text1 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT)))
Print("text2 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT)))
Print("text3 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT)))
Print("text4 is numeric");
}
//---
bool IsNumeric(string text)
{
int length=StringLen(text);
for(int i=0;i<length;i++)
{
int char1=StringGetChar(text,i);
if((char1>47 && char1<58) || char1==46)
continue;
else
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
О, посмотрите на меня. Я должен был догадаться. Спасибо @whroeder1.
Еще один момент - как вводить отрицательные числа. Код должен фиксировать знак отрицания (-) только в начале ввода.
Более того, чтобы усовершенствовать код. Он должен принимать знак отрицания (-) даже в середине чисел, таких как (45-20), и рассматривать его как вычитание, оценивать, а затем использовать код
Вся идея в том, чтобы заставить свойство OBJPROP_TEXT в OBT_EDIT принимать данные экономического календаря и обрабатывать их как числа, которыми они и являются. Поэтому встроенная функция IsNumeric очень важна, чтобы избежать написания неоправданно большого кода для нее.
Конечно, точка (.) должна быть числовой, поскольку (.) рассматривается как одно и то же с точкой и нулем (.0), который на самом деле является нулем (0). Теперь я попробовал увеличить количество периодов (.....), и он все равно распознает его как числовой. Нам нужен код для периода (.), чтобы исключить дополнительный период (....) после того, как первый период был приведен.
Еще один момент - как вводить отрицательные числа. Код должен фиксировать знак отрицания (-) только в начале ввода.
Более того, чтобы усовершенствовать код. Он должен принимать знак отрицания (-) даже в середине чисел, таких как (45-20), и рассматривать его как вычитание и оценивать, а затем использовать код
Вся идея в том, чтобы заставить свойство OBJPROP_TEXT в OBT_EDIT принимать данные экономического календаря и обрабатывать их как числа, которыми они и являются. Поэтому встроенная функция IsNumeric очень важна, чтобы избежать написания неоправданно большого кода для нее.
macpee:
Of course a period (.) should be numeric since (.) is regarded as the same thing with a period and zero (.0) which is in fact zero (0). Now I tried increasing the number of period (.....) and it is still recognizing it as numeric. We need the code for period (.) so as to eliminate additional period (....) once the first period has been cited in
Другое дело - как вводить отрицательные числа. Код должен фиксировать знак отрицания (-) только в начале ввода.
Есть ли здесь эхо?![](https://c.mql5.com/3/118/unknown.gif)
Да, что-то вроде этого.
Вам нужно быть осторожным в отношении:
________________________________
Кстати, я не могу найти список кода (ASCII, я предполагаю).
Давайте, попробуйте. Я знаю, что вам давно хотелось отточить свои навыки поиска.
________________________________
Вся идея в том, чтобы заставить свойство OBJPROP_TEXT в OBT_EDIT принимать данные экономического календаря и рассматривать их как числа, которыми они и являются. Поэтому встроенная функция IsNumeric очень важна, чтобы избежать написания неоправданно большого кода для нее.
Возможно, я неправильно понял ваши намерения, но если вы хотите, чтобы пользователь вводил даты в поле редактирования, а затем интерпретировал их как даты (возможно, нет, если вас интересуют отрицательные числа), я не уверен, что это лучший подход по ряду причин.
Есть ли здесь эхо?
________________________________
Давай, попробуй. Я знаю, что ты давно жаждал возможности отточить свои навыки поиска.
________________________________
Возможно, я неправильно понял ваши намерения, но если вы хотите, чтобы пользователь вводил даты в текстовое поле, а затем интерпретировал их как даты (возможно, нет, если вас интересуют отрицательные числа), я не уверен, что это лучший подход по ряду причин.
На самом деле рассматриваемые экономические данные не включают даты - только "фактические", "прогнозные", "предыдущие" и, возможно, "пересмотренные" данные. Конечно, мы также не собираемся вводить такие символы, как B(для миллиарда), %(для процента) и т. д. Только чистые реальные числа без пробелов. Идея заключается в том, чтобы рассчитать то, что я называю "Индекс одновременного выпуска". Он предназначен для того, чтобы объединить набор экономических данных, выпущенных одновременно, и рассматривать их как единое целое. Я бы объединил все "факты" как один "факт", все "прогнозы" как один "прогноз" и т.д., чтобы увидеть взаимосвязь между объединенными "фактами" и объединенными "прогнозами" и т.д.
Итак:
например.
{
StringReplace(text," ",NULL);
StringReplace(text,",",NULL);
int point_cnt = 0;
for(int i=StringLen(text)-1; i>=0; i--)
{
int this_char = StringGetChar(text,i);
if(this_char == '.')
{
point_cnt++;
if(point_cnt>1) return(false);
if(StringLen(text)<2) return(false);
}
else if(this_char == '+' || this_char == '-')
{
if(i>0) return(false);
}
else if(this_char < '0' || this_char > '9') return(false);
}
return(true);
}
Если возвращается true, то строку можно преобразовать в число.
Итак:
например.
{
StringReplace(text," ",NULL);
StringReplace(text,",",NULL);
int point_cnt = 0;
for(int i=StringLen(text)-1; i>=0; i--)
{
int this_char = StringGetChar(text,i);
if(this_char == '.')
{
point_cnt++;
if(point_cnt>1) return(false);
if(StringLen(text)<2) return(false);
}
else if(this_char == '+' || this_char == '-')
{
if(i>0) return(false);
}
else if(this_char < '0' || this_char > '9') return(false);
}
return(true);
}
Если возвращается true, можно преобразовать строку в число.