Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Добавили поддержку испанского языка. Заходи и изучай!
Sergio
59
Sergio 2011.11.04 20:26 

Оговорюсь сразу, что поиск по форуму уже использовал. Но в похожих темах даже уровень опыта авторов темы превосходит мой в разы - я попросту не понимаю, о чем там идет речь, посему решил спросить так.

Как отследить момент появления нового бара? Функция start() запускается чуть ли не каждую секунду, какое условие надо наложить, чтобы она завершалась на очередном тике, если в этом тике новый бар не появился?

И обещанные тонкости:

- между соседними барами количество тиков всегда разное?

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

PapaYozh
3768
PapaYozh 2011.11.04 20:31  
farewell:

Оговорюсь сразу, что поиск по форуму уже использовал. Но в похожих темах даже уровень опыта авторов темы превосходит мой в разы - я попросту не понимаю, о чем там идет речь, посему решил спросить так.

Как отследить момент появления нового бара? Функция start() запускается чуть ли не каждую секунду, какое условие надо наложить, чтобы она завершалась на очередном тике, если в этом тике новый бар не появился?

И обещанные тонкости:

- между соседними барами количество тиков всегда разное?

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

1. Между соседними барами тиков нет.

2. Если пришел новый тик, а start() обрабатывает предыдущий, то информация о поступившем тике теряется.

Алексей Тарабанов
7222
Алексей Тарабанов 2011.11.04 20:32  

Тонкости:

1. Всегда, если не случится чудо

2. Она продолжает работу, а по завершении - ждет нового тика.

В учебнике Ковалева толково описана функция NewBar

Sergio
59
Sergio 2011.11.04 20:37  

"Между соседними барами тиков нет."

Это в корне рушит все моё пока хрупкое представление об устройстве mql. :)

Как нет? Появление бара - это событие, которое можно отметить на временной оси. Тик - это тоже событие, происходящее в какое-то время. Естественно, что тики происходят чаще, чем появление баров, значит, между появлением сначала одного, а потом второго бара происходит n тиков. Так вот, n - не константа?

"информация о поступившем тике теряется."

Понятно.

И, всё-таки, как же отследить появление нового бара? Вообще для решения моей задачи вполне сойдет обычный отсчет времени, ибо я рассматриваю h1, и довольно легко можно рассчитать время появления бара. Но более универсального решения что, нет?..

Sergio
59
Sergio 2011.11.04 20:40  

"В учебнике Ковалева толково описана функция NewBar"

Сейчас посмотрю, спасибо. Кстати, по-моему, что-то такое я видел - функцию NewBar, только она была для mql5, а в mql4 из-за фатальных несовместимостей не запускалась.. если это не так, то буду рад.

Алексей Тарабанов
7222
Алексей Тарабанов 2011.11.04 20:43  

Бар - всего-лишь форма аппроксимации.

khorosh
8099
khorosh 2011.11.04 20:43  
farewell:

"Между соседними барами тиков нет."

Это в корне рушит все моё пока хрупкое представление об устройстве mql. :)

Как нет? Появление бара - это событие, которое можно отметить на временной оси. Тик - это тоже событие, происходящее в какое-то время. Естественно, что тики происходят чаще, чем появление баров, значит, между появлением сначала одного, а потом второго бара происходит n тиков. Так вот, n - не константа?

"информация о поступившем тике теряется."

Понятно.

И, всё-таки, как же отследить появление нового бара? Вообще для решения моей задачи вполне сойдет обычный отсчет времени, ибо я рассматриваю h1, и довольно легко можно рассчитать время появления бара. Но более универсального решения что, нет?..

"Между соседними барами тиков нет." - все тики внутри баров. Количество тиков внутри бара может быть разное.
Vadim Krisenko
299
Vadim Krisenko 2011.11.05 03:53  
farewell:

"Между соседними барами тиков нет."

Это в корне рушит все моё пока хрупкое представление об устройстве mql. :) ....

Да уж, тонкости... А между барами - это где?

Функция определения нового бара

int expertBars;

//=xooox=================================================================+
//==xox=| возвращает true если появился новый бар, иначе false |
//===x===================================================================+
bool isNewBar()
{
bool res=false;
if(expertBars!=iBars(Symbol(),0))
{
expertBars=iBars( Symbol (),0);
res=true;
}
return(res);
}

LLIAMAH
34
LLIAMAH 2011.11.05 09:39  

Да, тоже такое же решение хотел предложить:

int start()

{

if (NewBar() == true)

{

// код для обработки

}

return(0);

}

//+------------------------------------------------------------------+

// Определение появления нового бара!

//+------------------------------------------------------------------+

bool NewBar()

{

static datetime lastbar = 0;

datetime curbar = Time[0];

if(lastbar!=curbar)

{

lastbar=curbar;

return (true);

}

else return(false);

}

//+------------------------------------------------------------------+

Sergio
59
Sergio 2011.11.05 17:23  

Ого! Спасибо, ребята. Все оказалось более чем очевидно, только вот этот кусок неясен:

static datetime lastbar = 0;

datetime curbar = Time[0];

curbar - это переменная, в которую пишется.. что пишется? Время, в которое появился новый бар?

o_O
Модератор
23457
o_O 2011.11.05 17:47  
farewell:

datetime curbar = Time[0];

curbar - это переменная, в которую пишется.. что пишется? Время, в которое появился новый бар?


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

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