Нашёл такое решение:
https://www.mql5.com/ru/forum/118402
но это не совсем то..процессор он не слишком разгружает..хотя возможно
if (iBarShift(NULL,0,t_Open)>0)
{ OrderSend(Symbol(),OP_BUY,Lot,Ask,5,0,0; t_Open=TimeCurrent() }
t_Open=TimeCurrent()
поможет..правда непонятно как его применить
|
и в случае неравенства переменной количеству баров в текущем чарте
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ bool NewBar(int per = 0){static int preTime; if(preTime == 0){preTime = iTime(Symbol(),per,0);} if(preTime < iTime(Symbol(),per,0)){ preTime = iTime(Symbol(),per,0); return(true); } return(false); }
Проанализировал типовые советники и вижу,что 99% загружают процессор бесполезными операциями.
Как правило обработка нужна только после открытия нового бара и совсем необязательно долбить процессор на каждом тике ( что соответствует обращению к программе start)
Может кто знает: КАК получить в программе start сигнал открытия нового бара и по его наличию передавть управление нужной подпрограмме,
Можно конечно анализировать open и close предыдущего бара и если он изменился-то это и будет сигналом (open(1).close(1)
Может есть ещё идеи или готовые решения?
//-------------------------------------------------------------------- // newbar.mq4 // Предназначен для использования в качестве примера в учебнике MQL4. //-------------------------------------------------------------------- bool New_Bar=false; // Флаг нового бара //-------------------------------------------------------------------- int start() // Спец. функция start { //-------------------------------------------------------------------- Fun_New_Bar(); // Обращение к ф-ии if (New_Bar==false) // Если бар не новый.. return; // ..то уходим //-------------------------------------------------------------------- return; // Выход из start() } //-------------------------------------------------------------------- void Fun_New_Bar() // Ф-ия обнаружения .. { // .. нового бара static datetime New_Time=0; // Время текущего бара New_Bar=false; // Нового бара нет if(New_Time!=Time[0]) // Сравниваем время { New_Time=Time[0]; // Теперь время такое New_Bar=true; // Поймался новый бар } } //--------------------------------------------------------------------
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Проанализировал типовые советники и вижу,что 99% загружают процессор бесполезными операциями.
Как правило обработка нужна только после открытия нового бара и совсем необязательно долбить процессор на каждом тике ( что соответствует обращению к программе start)
Может кто знает: КАК получить в программе start сигнал открытия нового бара и по его наличию передавть управление нужной подпрограмме,
Можно конечно анализировать open и close предыдущего бара и если он изменился-то это и будет сигналом (open(1).close(1)
Может есть ещё идеи или готовые решения?