Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 646

 
valeryk:


Нет, проверил только что. Действительно, при отключённом инете таймер отключается.
Вот!) А я подумал уж, что только у меня глюки)) Как бы решить эту проблему?
 
Хорошо, что пока не пользуюсь нововведениями, в которых более сведущие ещё толком не разобрались! :)
 
Megan:
Вот!) А я подумал уж, что только у меня глюки)) Как бы решить эту проблему?



Если разработчики не задумали такое поведение таймера в качестве "защиты от дурака", то баг однозначно. Ведь таймер запускается в ините, и с этого момента должен работать автономно. Нужно в сервисдеск заявку оформить.
 
модератор вроде прочитал это.   barabashkakvn - может подтвердит, что проблема есть и надо в сервисдеск писать?
 
Megan:
EventSetTimer(1); стоит. И когда связь есть всё работает, как ни странно.В OnInit() выгрузки нет. Не знай почему так(...

MetaTrader 4 build 660. Действительно если на момент запуска терминала отсутствует связь, то OnInit() не происходит. 

Лечиться полумерой: заново прикрепить эксперта или два раза переключить таймфрейм. 


 
barabashkakvn:

MetaTrader 4 build 660. Действительно если на момент запуска терминала отсутствует связь, то OnInit() не происходит. 

Лечиться полумерой: заново прикрепить эксперта или два раза переключить таймфрейм. 


с этим проблема) У меня советник рассчитан на автономную работу(
 
Megan:
с этим проблема) У меня советник рассчитан на автономную работу(


Нужно написать заявку в сервисдеск.
 

Здравствуйте. Друзья помогите новичку. Не могу понять, как загрузить котировки в терминал, заранее отредактированные в файле .xls. Целый день мучаюсь.

Спасибо! 

 

Здравствуйте ещё раз. Сам задал, сам ответил: при редактировании названия выбирал любое название, кроме оригинального. Исправил на - RTSI1440.csv и загрузил.

Спасибо. 

 
Top2n:

Доброго времени суток!

Цель написать алгоритм усреднения сделок. 

Решил реализовать, через заполнение значений цены открытых позиций в массив. В итоге заполняет массив без перестанки. Что то где то пропустил...

Обнуление массива перед началом:

  if (ArrayResize(array, 0) != 0) {
    return false;
  }

Кстати, если 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.