Доброе время суток. Возник еще один вопросик. К примеру мы запустили эксперта на оптимизацию, при каждой ли итерации ( в смысле прохода с новыми входными параметрами ) вызывается метод OnInit бот каждый раз переинициализируется?
Обучение языку MQL4 под MetaTrader 4📌
От xbms, 13 апреля, 2013 в Уголок Программиста
Если бот не сильно сливной, то данные прогоны должны сгруппироваться.
Уважаемые программисты, можете скинуть наглядный код того как узнать значение 2го хая, вершины ZigZag. Не второго экстремума, а 2й вершины?!
Дык, они же идут по-очереди (вершины и низины), если Вы узнали 1-ю вершину ищите через один экстремум.
Это все понятно, но как, какой код этого счетчика?!
У Вас должен быть цикл по барам в поисках значения цены в буфере инд. Зиг-Заг. а в цикле считаете экстремумы - Вам нужен 0 и 2 экстремум, если счётчик = 0 , то это 1-я вершина, если счётчик = 2, то вторая...
Счетчик описывается так: int cn = 0;
Далее в цикле по барам:
for (.....)
{
if (ZigZag > 0) // нашли экстремум
{
if (cn == 0) // первая вершина
if (cn == 2) // вторая вершина
// Вам только надо разбираться вершина или низина, если последняя - низина, а нужны вершины, то счетчик нужно уменьшать на 1.
cn++;
}
}
на сколько я понял, таким образом мы узнаем значение перелома 3го зигзага, где на скрине отображена первая фиолетовая горизонтальная линия, но она ниже первой вершины, как и следующий зигзаг, а как по счетчику добраться до второй вершины, которая будет хоть чуть больше первой вершины, и пропускать счетчик будет значения переломов, которые меньше первой вершины?
Тогда счётчик не нужен. записываем цену первой вершины и в цикле ищем большее значение, это и есть то, что Вам нужно..
я поэтому и создал тему, что бы узнать код счетчика, или цикла, или массива, смотря что в данном случае правильней будет.
Если есть какой то шаблонный вариант - можете скинуть?
Шаблонов нет. Давайте Ваш код добавим туда проверку.
Так что делать с этой 2 вершиной?
что бы ставил стоп лосс на значении этой второй вершины,
или хотя бы выдавал алерт с этим значением второй вершины , к стоп лоссу я уже прикручу,
а если вершины рядом за кокой то период, или свеч, или дней, не будет, выдавал алерт, что за данный период второй вершины нет.
Нету у меня ни какого int start, есть int onInit, есть int OnDeinit, есть void OnDeInit, void ontick, void ontimer, double ontester, void onchartEver; а int start нет @-)
Нету у меня ни какого int start, есть int onInit, есть int OnDeinit, есть void OnDeInit, void ontick, void ontimer, double ontester, void onchartEver; а int start нет @-)
http://docs.mql4.com/ru/mql4changes - первая табличка и первая строчка.
Перезаписан под актуальные билды первый урок курса "MQL программирование":
http://tradelikeapro.ru/mql-nachalo/
Кто-нибудь пробовал реализовать делегаты или хотя бы знает как в MQL сделать указатель на функцию?
Подскажите, можно ли как то привязать лейбл к шкале времени не по левому краю (началу текста), а по правому?
Устанавливаю лейбл рядом с линией на расстояние, равное 7 свечам от этой линии - вписывается нормально
Но при уменьшении zoom'а на графике она, естественно, смещается на линию:
Как можно обойти данную проблему с целью улучшения "красоты" отображения графических фигур? :d
UPD
Разобрался )
Угол привязки определяется с помощью функции OBJPROP_ANCHOR: ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_RIGHT);
Изменено 13 ноября, 2015 пользователем Rever27
Добрый день.
Помогите пожалуйста с функцией поиска нового бара и ограничения открытия позиций на одном определённом символе и таймфрейме. С обычным советником всё понятно. Можно использовать стандартную функцию из учебника
Цитатаbool New_Bar=false;
bool Fun_New_Bar() // Ф-ия обнаружения ..
{ // .. нового бара
static datetime New_Time=0; // Время текущего бара
bool New_Bar=false; // Нового бара нет
if (New_Time != Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
}
return(New_Bar);
}
bool IsNewBar(){
static datetime _timeLastBar = 0;
if(_timeLastBar == (datetime)0) //первый запуск
_timeLastBar = Time[0];
if(Time[0] > _timeLastBar){
_timeLastBar = Time[0];
return true;
}
return false;
}
if (Fun_New_Bar()==true)
{}
А как эту функцию приспособить к мультивалютному эксперту?
Soldat так и применяйте - новый бар от на всех инструментах. правда тики не синхронно приходят, но с этим придётся жить...
Да это понятно. Не понятно как её использовать при мультивалютности и различных таймфреймах. Допустим у меня 10 пар и 4 таймфрейма. Мне получается через цикл for 40 вариантов прописывать? Или через оператор if? Может есть иной, более компактный способ?
Ваш эксперт будет стоять и получать тики с одного графика (пары), узнать котировку по другой паре можно только специально через запрос, т.е. Вы можете отследить закрытие бара (любого ТФ) только на основной паре, а теперь, как говориться, следите за руками: тик пришел и сова поняла, что по основной паре открылся новый бар, а по другой паре (XXXYYY) тика ещё не было, вопрос что Вам вернёт функция iClose(XXXYYY, 0, 1)?
Если Вы знаете ответ - то Вам должно быть вообще все понятно.
Я точного ответа не знаю, но могу предположить, что эта функция вернёт Вам не то, что Вы ожидали, скажу даже больше, эта функция вернёт Вам не то, даже если Вы сделаете запрос по текущей паре, но с другого ТФ.
Это я к тому, что отслеживать закрытие баров на 4 ТФ надо по той паре, где стоит сова, потом в цикле делать расчёты сигналов по всем парам (предполагая, что и там бары закрыты, или проверяя время открытия 1 бара на основной паре и рабочей паре).
Выполнил задание по первому уроку. Очень рад, что попал в новую волну обучения. Огромное спасибо. Жду продолжения... .
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем