Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 646
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Нет, проверил только что. Действительно, при отключённом инете таймер отключается.
Вот!) А я подумал уж, что только у меня глюки)) Как бы решить эту проблему?
Если разработчики не задумали такое поведение таймера в качестве "защиты от дурака", то баг однозначно. Ведь таймер запускается в ините, и с этого момента должен работать автономно. Нужно в сервисдеск заявку оформить.
EventSetTimer(1); стоит. И когда связь есть всё работает, как ни странно.В OnInit() выгрузки нет. Не знай почему так(...
MetaTrader 4 build 660. Действительно если на момент запуска терминала отсутствует связь, то OnInit() не происходит.
Лечиться полумерой: заново прикрепить эксперта или два раза переключить таймфрейм.
MetaTrader 4 build 660. Действительно если на момент запуска терминала отсутствует связь, то OnInit() не происходит.
Лечиться полумерой: заново прикрепить эксперта или два раза переключить таймфрейм.
с этим проблема) У меня советник рассчитан на автономную работу(
Нужно написать заявку в сервисдеск.
Здравствуйте. Друзья помогите новичку. Не могу понять, как загрузить котировки в терминал, заранее отредактированные в файле .xls. Целый день мучаюсь.
Спасибо!
Здравствуйте ещё раз. Сам задал, сам ответил: при редактировании названия выбирал любое название, кроме оригинального. Исправил на - RTSI1440.csv и загрузил.
Спасибо.
Доброго времени суток!
Цель написать алгоритм усреднения сделок.
Решил реализовать, через заполнение значений цены открытых позиций в массив. В итоге заполняет массив без перестанки. Что то где то пропустил...
Обнуление массива перед началом:
Кстати, если OrderSelect() вернула ошибку хоть в одной итерации цикла, до доверять результатам уже нельзя. То есть, не следует пытаться дальше работать с оставшимися ордерами, если часть ордеров выпала. Вместо этого логичнее сразу вернуть ошибку. Код более высокого уровня, например, мог бы среагировать на ошибку так: попробовать повторить ещё пару раз на этом тике, либо на этом тике отказаться от действий, отложить их и попробовать снова на следующем тике.
Usred() и Zapis() логичнее объединить, и условие фильтра совместить как-нибудь так: "if (OrderSymbol() == Symbol() && OrderType() == type)". Во всяком случае, повторный OrderSelect() в Zapis() не нужен.
Для вычисления средней цены позиции по отдельным ордерам не обязательно всё запоминать в массиве. Можно вычислить на ходу.
S1 = order1_lots * order1_openprice + order2_lots * order2_openprice + ... orderN_lots * orderN_openprice.
S2 = order1_lots + order2_lots + ... + orderN_lots.
Искомая цена позиции = S1 / S2.
Если завести две переменные, для S1 и для S2, занулить их, и в цикле каждый раз прибавлять соответствующее значение каждой из переменных, то после цикла останется лишь разделить S1 на S2, предварительно проверив, что S2 не равно 0 (в этом случае - ошибка, то есть, результат НЕ вычислен, его нет). Возможно, получившееся значение ещё надо нормализовать NormalizeDouble() - это уже по алгоритму, надо ли нормализовывать, и по соглашениям, принятым для программы, какая функция, вызываемая или вызывающая нормализует.
Тогда и массив не нужен будет.
Если нужны другие вычисления, кроме цены общей позиции, можно "вернуть" значения S1 и S2 в вызываемую функцию, передав сами переменные по ссылке, а из функции возвращать признак ошибки. То есть, прототип вызываемой функции мог бы выглядеть так: "bool fun(double &S1, double &S2);". Вызывающая функция заводит переменные, передаёт их в fun(), и, если fun() вернула true, использует значения переданных переменных (которые сами по себе могут называться и по-другому) как S1 и S2.