//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//--- Проверка количества доступных баров (1 - минимально, 4 - оптимально для большинства расчётов. Но всё "по месту"...)if(rates_total<4) return0;
//--- Проверка и расчёт количества просчитываемых баровint limit=rates_total-prev_calculated; // 0 - пришел новый тик, новый бар формироваться не начал. 1 - пришел новый тик и начал формироваться новый бар.if(limit>1)
// если вписать "limit>0", то на нулевом баре будет расчёт только нулевого бара, на каждом новом баре будет полный перерасчёт всей истории// если вписать "limit>1", то на нулевом баре будет расчёт только нулевого бара, на открытии нового бара - пересчёт первого и нулевого,// при подгрузке истории и на первом запуске - перерасчёт всей истории
{
limit=rates_total-1;
// здесь должна быть инициализация всех используемых буферов индикатора необходимыми значениями (обычно EMPTY_VALUE и 0)
}
//--- Расчёт индикатораfor(int i=limit; i>=0 && !IsStopped(); i--)
{
// необходимые действия по расчёту индикатора
}
//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+
В некоторых случаях почему-то цена превышает размерность двух значащих цифр после точки в любую сторону.
И это происходит безо всяких погрешностей в вычислениях, это просто вывод значения цены из базы графика tmp1[i]=close[i];
Это можно как-то победить или просто не обращать внимание?
Всё нормально. Для вывода дробных чисел на печать просто используйте DoubleToString() с нужной точностью. В данном случае необходимой точностью должно выступать Digits()
В некоторых случаях почему-то цена превышает размерность двух значащих цифр после точки в любую сторону.
И это происходит безо всяких погрешностей в вычислениях, это просто вывод значения цены из базы графика tmp1[i]=close[i];
Это можно как-то победить или просто не обращать внимание?
это обычные значения для вещественного числа, Вы может научиться писать программы, все с этого начинают- просто читать много нужно и пытаться писать и писать свои коды
про точность вещественного числа, мантису и как оно все хранится в памяти, Вы можете нагуглить в интернете, принципы хранения и везде одни и те же
если хотите красивый вывод используйте DoubleToStr()
это обычные значения для вещественного числа, Вы может научиться писать программы, все с этого начинают- просто читать много нужно и пытаться писать и писать свои коды
про точность вещественного числа, мантису и как оно все хранится в памяти, Вы можете нагуглить в интернете, принципы хранения и везде одни и те же
если хотите красивый вывод используйте DoubleToStr()
Где есть возможность использования совместимых функций, лучше предлагать их к использованию. А то потом сия эпопея заново начнётся. В данном случае: DoubleToString()
Как можно было запретить запуск советника на одинаковых инструментах?
Например, советник работает в окне eur/usd, а при запуске в других окнах по eur/usd выводится некоторое alert сообщение. Буду благодарен за помощь.
нужно передать данные из одного советника в другой, поиском по форуму
или используйте глобальные переменные терминала (это наиболее простой способ) - туда можно записать значение первым советником, а последующие копии советников будут считывать это значение и не будут запускаться https://www.mql5.com/ru/docs/globals
Глобальные переменные существуют в клиентском терминале 4 недели с момента последнего обращения, после этого автоматически уничтожаются. Обращением к глобальной переменной считается не только установка нового значения, но и чтение значения глобальной переменной.
нужно передать данные из одного советника в другой, поиском по форуму
или используйте глобальные переменные терминала (это наиболее простой способ) - туда можно записать значение первым советником, а последующие копии советников будут считывать это значение и не будут запускаться https://www.mql5.com/ru/docs/globals
советник один и тот же, нужно запретить ему запускаться на одинаковых инструментах
gans71: советник один и тот же, нужно запретить ему запускаться на одинаковых инструментах
и? за 2 минуты Вы не смогли бы изучить справку
если конкретно речь как передать в глобальную переменную строку, то единственный способ это создать имя глоб.переменной, т.е. в Вашем случае запустили советник на EURUSD, сделайте проверку:
if(GlobalVariableCheck(_Symbol)) .....
если нет такой переменной, то создаете такую перемеренную, примерно так:
if(GlobalVariableSet(_Symbol,Magic)==0) Print("Ошибка записи в глоб.переменную № ",GetLastError());
потом нужно при завершении работы советника удалить глоб.переменную
кактотак, терминала нет под рукой, да и вроде направление поисков я указал
После последних ответов картина стала проясняться и самое очевидное это то что стать программистом мне не судьба :-)
Пока что начал с самого простого листинга и вот что оказалось:
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[4] = 86.09999999999999 2018.10.15 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[3] = 85.98999999999999 2018.10.16 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[1] = 86.5 2018.10.18 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[0] = 85.72 2018.10.19 00:00:00
В некоторых случаях почему-то цена превышает размерность двух значащих цифр после точки в любую сторону.
И это происходит безо всяких погрешностей в вычислениях, это просто вывод значения цены из базы графика tmp1[i]=close[i];
Это можно как-то победить или просто не обращать внимание?
Из него можно выкинуть всё относящееся к пятёрке, и получите шаблон для четвёрки.
Такое можно писать тем кто знает чем пятерка отличается от четверки и это точно не я :-)
Откуда цифра 4 взялась, какой у неё сакральный смысл?
Такое можно писать тем кто знает чем пятерка отличается от четверки и это точно не я :-)
Откуда цифра 4 взялась, какой у неё сакральный смысл?
Вы точно и не слушаете, и не читаете... Было же ж:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Artyom Trishkin, 2018.10.18 09:26
После последних ответов картина стала проясняться и самое очевидное это то что стать программистом мне не судьба :-)
Пока что начал с самого простого листинга и вот что оказалось:
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[4] = 86.09999999999999 2018.10.15 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[3] = 85.98999999999999 2018.10.16 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[1] = 86.5 2018.10.18 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[0] = 85.72 2018.10.19 00:00:00
В некоторых случаях почему-то цена превышает размерность двух значащих цифр после точки в любую сторону.
И это происходит безо всяких погрешностей в вычислениях, это просто вывод значения цены из базы графика tmp1[i]=close[i];
Это можно как-то победить или просто не обращать внимание?
Всё нормально. Для вывода дробных чисел на печать просто используйте DoubleToString() с нужной точностью. В данном случае необходимой точностью должно выступать Digits()
После последних ответов картина стала проясняться и самое очевидное это то что стать программистом мне не судьба :-)
Пока что начал с самого простого листинга и вот что оказалось:
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[4] = 86.09999999999999 2018.10.15 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[3] = 85.98999999999999 2018.10.16 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[2] = 86.76000000000001 2018.10.17 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[1] = 86.5 2018.10.18 00:00:00
2018.10.20 08:42:43.343 _t1 CADJPY,Daily: tmp1[0] = 85.72 2018.10.19 00:00:00
В некоторых случаях почему-то цена превышает размерность двух значащих цифр после точки в любую сторону.
И это происходит безо всяких погрешностей в вычислениях, это просто вывод значения цены из базы графика tmp1[i]=close[i];
Это можно как-то победить или просто не обращать внимание?
это обычные значения для вещественного числа, Вы может научиться писать программы, все с этого начинают- просто читать много нужно и пытаться писать и писать свои коды
про точность вещественного числа, мантису и как оно все хранится в памяти, Вы можете нагуглить в интернете, принципы хранения и везде одни и те же
если хотите красивый вывод используйте DoubleToStr()
это обычные значения для вещественного числа, Вы может научиться писать программы, все с этого начинают- просто читать много нужно и пытаться писать и писать свои коды
про точность вещественного числа, мантису и как оно все хранится в памяти, Вы можете нагуглить в интернете, принципы хранения и везде одни и те же
если хотите красивый вывод используйте DoubleToStr()
Где есть возможность использования совместимых функций, лучше предлагать их к использованию. А то потом сия эпопея заново начнётся. В данном случае: DoubleToString()
Как можно было запретить запуск советника на одинаковых инструментах?
Например, советник работает в окне eur/usd, а при запуске в других окнах по eur/usd выводится некоторое alert сообщение. Буду благодарен за помощь.
Как можно было запретить запуск советника на одинаковых инструментах?
Например, советник работает в окне eur/usd, а при запуске в других окнах по eur/usd выводится некоторое alert сообщение. Буду благодарен за помощь.
нужно передать данные из одного советника в другой, поиском по форуму
или используйте глобальные переменные терминала (это наиболее простой способ) - туда можно записать значение первым советником, а последующие копии советников будут считывать это значение и не будут запускаться https://www.mql5.com/ru/docs/globals
нужно передать данные из одного советника в другой, поиском по форуму
или используйте глобальные переменные терминала (это наиболее простой способ) - туда можно записать значение первым советником, а последующие копии советников будут считывать это значение и не будут запускаться https://www.mql5.com/ru/docs/globals
советник один и тот же, нужно запретить ему запускаться на одинаковых инструментах
и? за 2 минуты Вы не смогли бы изучить справку
если конкретно речь как передать в глобальную переменную строку, то единственный способ это создать имя глоб.переменной, т.е. в Вашем случае запустили советник на EURUSD, сделайте проверку:
if(GlobalVariableCheck(_Symbol)) .....
если нет такой переменной, то создаете такую перемеренную, примерно так:
if(GlobalVariableSet(_Symbol,Magic)==0) Print("Ошибка записи в глоб.переменную № ",GetLastError());
потом нужно при завершении работы советника удалить глоб.переменную
кактотак, терминала нет под рукой, да и вроде направление поисков я указал