Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Интересуешься социальным трейдингом? Прочти соответствующую статью!
IgorM М
4801
IgorM М 2011.11.05 17:50  

у меня такая конструкция в эксперте определяла новый бар:

int start(){
// операции на каждом тике
   int bar = Bars;
   if (bar != counted ) {
      counted= bar;
// операции при появлении нового бара
   }
return(0);
}

теоретически работать не должно, но работает даже при синхронизации данных с сервером (перерисовка)

ЗЫ: на последних билдах МТ4 не проверял

Sergio
59
Sergio 2011.11.05 18:02  
sergeev:

а у вас сложности с левой (datetime curbar) или правой (Time[0]) часть этой операции?


Уже никаких) Погуглил и успешно выяснил, что Time[] - это массив, элементами которого являются моменты появления баров на графике.. Только сомнения есть по поводу этого куска теперь:

if(lastbar!=curbar){

lastbar=curbar;

return (true); }

else return(false);

Не понимаю логики. Например, рассмотрим первый запуск программы: lastbar = 0; curbar = 1823589823 (к примеру. Это ведь кол-во секунд, прошедшее между 01.01.1970 и появлением последнего бара.

lastbar, как можно увидеть, не равен curbar, поэтому вернётся true. Хотя появлением нового бара там даже и не пахло вроде..

В общем, не могли бы вы пояснить, пожалуйста, как это работает?.

Sergio
59
Sergio 2011.11.05 18:09  

Ааа, нет, дошло, наконец) При первом запуске программы мы пишем в переменную время появления последнего бара, а потом уже, можно сказать, начинаем работать, то есть отлавливать новые бары.

Кстати, переменная lastbar не должна ли быть глобальной? Она же, по-моему, уничтожается каждый раз при завершении работы функции NewBar().

Алексей Тарабанов
7222
Алексей Тарабанов 2011.11.05 18:15  

static

Sergio
59
Sergio 2011.11.05 18:25  
ну она же объявляется каждый раз при вызове функции, как-то это странно) Если сделать не статик, а обычную переменную, только глобально, тоже же работать будет, верно я думаю? )
Алексей Тарабанов
7222
Алексей Тарабанов 2011.11.05 18:36  

Будет, так же, как и static, но это - некорректное использование памяти. Глобальные переменные предназначены исключительно для передачи значений в специальные функции, любое другое их использование - забивание гвоздей ноутбуком :) (чуть не сказал - логарифмической линейкой, но побоялся оказаться непонятым).

Sergio
59
Sergio 2011.11.05 19:21  

Я знаю, что такое логарифмическая линейка :) Еще не так много лет прошло со времен их использования.. Но это уже оффтоп. Спасибо за помощь)

/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий