ENUM_TRADE_RETURN_CODES Код Идентификатор Описание 10004 TRADE_RETCODE_REQUOTE Реквота 10006 TRADE_RETCODE_REJECT Запрос отвергнут ... нет кода 10005. Не ошибка ли это? С уважением...
Вопрос. Есть такая функция GetTickCount () - возвращает количество миллисекунд, прошедших с момента старта системы. В примечании сказано, что "счетчик ограничен разрешающей способностью системного таймера. Так как время хранится как беззнаковое целое, то он переполняется каждые 49.7 дней при непрерывной работе компьютера".
А что происходит после переполнения счётчика? Он обнуляется и начинает новый отсчет, или же система стопорится?
Вопрос. В описании оператора switch(выражение){...} сказано, что "выражение оператора switch должно быть целого типа". В интернете встречал описание этого оператора с выражениями других типов. Будет ли расширено применение оператора switch путем добавления выражений строкового типа?
Вопрос. В описании оператора switch(выражение){...} сказано, что "выражение оператора switch должно быть целого типа". В интернете встречал описание этого оператора с выражениями других типов. Будет ли расширено применение оператора switch путем добавления выражений строкового типа?
Нет, к сожалению не будет. Для строковых типов только if ... else if ... else
За счёт использования целых типов в switch достигается нескольки кратное ускорение по сравнению с if
Вопрос. В описании функции StringConcatenate() сказано, что "функция StringConcatenate() работает быстрее и экономнее по памяти, чем связывание строк при помощи операций сложения за счет того, что не используются временные переменные типа string". Воспользовался примерами из Справочника, чуть изменив их:
string a="a",b="b",c;
uint start,stop;
long i,length=10000000;
//--- первый способ
start=GetTickCount();
for(i=0;i<length;i++)
{
c=a+b;
}
stop=GetTickCount();
Print("time for 'c = a + b' = ",(stop-start)," milliseconds, i = ",i);
//--- второй способ
a="a"; // заново инициализируем переменную a
start=GetTickCount();
for(i=0;i<length;i++)
{
StringAdd(a,b);
}
stop=GetTickCount();
Print("time for 'StringAdd(a,b)' = ",(stop-start)," milliseconds, i = ",i);
//--- третий способ
a="a";c="";
start=GetTickCount();
for(i=0;i<length;i++)
{
int k=StringConcatenate(c,a,b);
//c=""; //с такой строчкой работает ещё дольше.
}
stop=GetTickCount();
Print("time for 'StringConcatenate(c,a,b)' = ",(stop-start)," milliseconds, i = ",i);
На выходе получил:
DR 0 DoubleToString (EURGBP,M1) 22:15:55 time for'c = a + b' = 2359 milliseconds, i = 10000000
QE 0 DoubleToString (EURGBP,M1) 22:15:56 time for'StringAdd(a,b)' = 1031 milliseconds, i = 10000000
FE 0 DoubleToString (EURGBP,M1) 22:16:00 time for'StringConcatenate(c,a,b)' = 3891 milliseconds, i = 10000000
Получилось, что StringConcatenate работает медленнее, чем связывание строк при помощи операций сложения. В чём загвоздка?
Вопрос. В описании функции StringConcatenate() сказано, что "функция StringConcatenate() работает быстрее и экономнее по памяти, чем связывание строк при помощи операций сложения за счет того, что не используются временные переменные типа string". Воспользовался примерами из Справочника, чуть изменив их:
На выходе получил:
Получилось, что StringConcatenate работает медленнее, чем связывание строк при помощи операций сложения. В чём загвоздка?
Немного не так нужно проверять (если я все правильно понимаю). Фишка функции в другом...
Примерно такой код
////////////////////////////////////////////////////////////////////////////////// Global variables, used in working the trade system //////////////////////////////////////////////////////////////////////////////////string a="Пример";
double b=1.26,c = 1.27;
string d;
uint start,stop;
long i,length=10000000;
////////////////////////////////////////////////////////////////////////////////voidOnStart()
{
//----------------------------------------------------------------------------////Work variables//----------------------------------------------------------------------------//
start=GetTickCount();
for(i=0;i<length;i++)
{
d=a+(string)b+(string)c;
}
stop=GetTickCount();
Print("time for 'd = a + b + c' = ",(stop-start)," milliseconds, i = ",i);
//Второй способ
d= "";
start=GetTickCount();
for(i=0;i<length;i++)
{
StringAdd(d,a);
StringAdd(d,(string)b);
StringAdd(d,(string)c);
}
stop=GetTickCount();
Print("time for 'StringAdd()' = ",(stop-start)," milliseconds, i = ",i);
//Третий способ
d= "";
start=GetTickCount();
for(i=0;i<length;i++)
{
int k=StringConcatenate(d,a,b,c);
}
stop=GetTickCount();
Print("time for 'StringConcatenate(d,a,b,c)' = ",(stop-start)," milliseconds, i = ",i);
//----------------------------------------------------------------------------//
}
////////////////////////////////////////////////////////////////////////////////
А такой результат
2011.04.1515:28:58123 (EURUSD,D1) time for'd = a + b + c' = 81094 milliseconds, i = 100000002011.04.1515:30:24123 (EURUSD,D1) time for'StringAdd()' = 85828 milliseconds, i = 100000002011.04.1515:31:46123 (EURUSD,D1) time for'StringConcatenate(d,a,b,c)' = 81812 milliseconds, i = 100000002011.04.1515:33:36123 (EURUSD,D1) time for'd = a + b + c' = 82938 milliseconds, i = 100000002011.04.1515:35:00123 (EURUSD,D1) time for'StringAdd()' = 83859 milliseconds, i = 100000002011.04.1515:36:21123 (EURUSD,D1) time for'StringConcatenate(d,a,b,c)' = 80719 milliseconds, i = 10000000
PS
Скорей всего строчку d= "" нужно было поместить в цикл for, но думается мне косяк этот не очень влияет на результат.
Странно. Вам нужен код на MQL5, который уже должен быть на сайте. Стоит только поискать. Именно об этом речь.
Впрочем, дело Ваше.
поиск очень утомителен, просто может, кто то сходу может сказать.
Я кстати переделал этот код на mql5. Может, кому-нибудь пригодится
прошу прокомментировать:
ENUM_TRADE_RETURN_CODES
Код Идентификатор Описание
10004 TRADE_RETCODE_REQUOTE Реквота
10006 TRADE_RETCODE_REJECT Запрос отвергнут
...
нет кода 10005. Не ошибка ли это?
С уважением...
Вопрос. Есть такая функция GetTickCount () - возвращает количество миллисекунд, прошедших с момента старта системы. В примечании сказано, что "счетчик ограничен разрешающей способностью системного таймера. Так как время хранится как беззнаковое целое, то он переполняется каждые 49.7 дней при непрерывной работе компьютера".
А что происходит после переполнения счётчика? Он обнуляется и начинает новый отсчет, или же система стопорится?
Yedelkin:
А что происходит после переполнения счётчика? Он обнуляется и начинает новый отсчет, или же система стопорится?
Переполняется и начинает с нуля.
Вопрос. В описании оператора switch(выражение){...} сказано, что "выражение оператора switch должно быть целого типа". В интернете встречал описание этого оператора с выражениями других типов. Будет ли расширено применение оператора switch путем добавления выражений строкового типа?
Вопрос. В описании оператора switch(выражение){...} сказано, что "выражение оператора switch должно быть целого типа". В интернете встречал описание этого оператора с выражениями других типов. Будет ли расширено применение оператора switch путем добавления выражений строкового типа?
Нет, к сожалению не будет. Для строковых типов только if ... else if ... else
За счёт использования целых типов в switch достигается нескольки кратное ускорение по сравнению с if
Нет, к сожалению не будет. Для строковых типов только if ... else if ... else
За счёт использования целых типов в switch достигается нескольки кратное ускорение по сравнению с if
Вопрос. В описании функции StringConcatenate() сказано, что "функция StringConcatenate() работает быстрее и экономнее по памяти, чем связывание строк при помощи операций сложения за счет того, что не используются временные переменные типа string". Воспользовался примерами из Справочника, чуть изменив их:
На выходе получил:Получилось, что StringConcatenate работает медленнее, чем связывание строк при помощи операций сложения. В чём загвоздка?
Вопрос. В описании функции StringConcatenate() сказано, что "функция StringConcatenate() работает быстрее и экономнее по памяти, чем связывание строк при помощи операций сложения за счет того, что не используются временные переменные типа string". Воспользовался примерами из Справочника, чуть изменив их:
На выходе получил:Получилось, что StringConcatenate работает медленнее, чем связывание строк при помощи операций сложения. В чём загвоздка?
Немного не так нужно проверять (если я все правильно понимаю). Фишка функции в другом...
Примерно такой код
А такой результат
PS
Скорей всего строчку d= "" нужно было поместить в цикл for, но думается мне косяк этот не очень влияет на результат.