#property strict/******************************************************************************/bool AddValue(double &array[], constdouble value) {
constint size = ArraySize(array);
if (ArrayResize(array, size + 1) != size + 1) {
returnfalse; // Ошибка, значение не может быть добавлено к массиву
}
array[size] = value; //записываемreturntrue; // Нет ошибки, значение добавлено к массиву
}
/******************************************************************************/bool AddValueIfFound(double &array[], conststring name) {
constint type = ObjectType(name);
if (type == OBJ_TREND) {
switch ((color)ObjectGet(name, OBJPROP_COLOR)) { // Тип color допустимо использовать в switchcase Goldenrod:
case Gainsboro:
case White:
if (!AddValue(array, ObjectGetValueByShift(name, 1))) {
returnfalse; // Ошибка, значение найдено, но не может быть добавлено к массиву
}
}
}
returntrue; // Нет ошибки, значение, если найдено, добавлено к массиву
}
/******************************************************************************/bool MassTrendNumber(double &array[], constbool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masBconststring subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второеif (ArrayResize(array, 0) != 0) {
returnfalse; // Ошибка, массив не может быть заполнен достоверно
}
for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit; i++) {
if (!AddValueIfFound(array, subname + IntegerToString(i))|| !FilTrenLin(subname+IntegerToString(i))) { \\ Вот куда вставилreturnfalse; // Ошибка, массив, если и заполнен, то недостоверно
}
}
returntrue; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/boolFilTrenLin(string name) {
conststring dt_123 = TimeToStr(TimeCurrent(),TIME_SECONDS); //constdatetime vremnin= StrToTime(dt_123); // Присваиваем время в секундах constdatetime vrem2kor= ObjectGet(name,OBJPROP_TIME2);// время второй координатыMqlDateTime str1;
TimeToStruct(vrem2kor,str2);
constint PjatPon=str1.sec;
if(PjatPon+3600>=vremnin){ \\ если время 2-ой координаты + час > времени нынешнего то блокируем запись в массивPrint(" PjatPon ", PjatPon," vremnin ",vremnin," vrem2kor ",vrem2kor);
returnfalse;
}
returntrue;
}
/******************************************************************************/void FillAndPrint(double &array[], constbool buy) {
if (MassTrendNumber(array, buy)) {
constint limit = ArraySize(array);
Print("Найдено объектов: ", limit);
for (int i = 0; i < limit; i++) {
Print("Price[", i, "] = ", DoubleToStr(array[i], Digits));
}
} else {
Print("Чёрт!");
}
}
Не сочтите за наглость, даже не знаю как уже обратиться, но нечего поделать не могу. Думал, что если получится составить массив, то условия забить, на от фильтрацию сигнала, как нечего делать.
Не сочтите за наглость, даже не знаю как уже обратиться, но нечего поделать не могу. Думал, что если получится составить массив, то условия забить, на от фильтрацию сигнала, как нечего делать.
Функция TimeCurrent() перегружена. Если почитать описание, что из себя представляет тип datetime, то выяснится, что вполне подойдёт первый вариант функции:
01:30:29 Script 2 EURUSDm,H1: loaded successfully
01:30:292 EURUSDm,H1: initialized
01:30:312 EURUSDm,H1: Момент времени dt НЕ достигнут
01:30:332 EURUSDm,H1: Момент времени dt НЕ достигнут
01:30:352 EURUSDm,H1: Момент времени dt достигнут
01:30:382 EURUSDm,H1: Момент времени dt достигнут
01:30:382 EURUSDm,H1: uninit reason 001:30:38 Script 2 EURUSDm,H1: removed
После получения понимания сути применённых идей, а также, помня о том, что из себя представляет тип datetime, работа с моментами времени, если требуемая точность не превышает единиц секунд, уже не должна вызывать затруднений.
Функция TimeCurrent() перегружена. Если почитать описание, что из себя представляет тип datetime, то выяснится, что вполне подойдёт первый вариант функции:
Запуск даёт:
Можно и с другой стороны зайти, не разницу моментов времени получать, а сравнивать эти моменты (заодно и условное выражение опять поприменяем):
Запуск даёт:
После получения понимания сути применённых идей, а также, помня о том, что из себя представляет тип datetime, работа с моментами времени, если требуемая точность не превышает единиц секунд, уже не должна вызывать затруднений.
Если честно, то не понял как применить. Осталось до конца миллиметр, обидно останавливаться когда почти все законченно.
Задача, не записывать в массив цену, если время объекта(2-ого параметра+3600сек>текущего)||(время 1-ого параметра - время 2-ого параметра)<3600сек )
/******************************************************************************/bool MassTrendNumber(double &array[], constbool buy) { // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masBconststring subname = (buy ? "uptrendline" : "downtrendline"); // существует два названия трендовых линий, первое и второеif (ArrayResize(array, 0) != 0) {
returnfalse; // Ошибка, массив не может быть заполнен достоверно
}
for (int i = 0, limit = ObjectsTotal(OBJ_TREND); i < limit+2; i++) {
if (!AddValueIfFound(array, subname + IntegerToString(i))||!FilTrenLin(subname + IntegerToString(i)) {// Условие вставил вот сюдаreturnfalse; // Ошибка, массив, если и заполнен, то недостоверно
}
}
returntrue; // Нет ошибки, массив заполнен достоверно
}
/***************************************************************************/bool FilTrenLin(string name) {
constdatetime dt = TimeCurrent();
constdatetime dt1 = ObjectGet(name,OBJPROP_TIME1);
constdatetime dt2 = ObjectGet(name,OBJPROP_TIME2);
Print(" DiffInSecs(dt,dt2) ", DiffInSecs(dt,dt2)," DiffInSecs(dt2,dt1)) ",DiffInSecs(dt2,dt1)," dt1 ",dt1);
if(DiffInSecs(dt,dt2)<3600||DiffInSecs(dt2,dt1)<3600)// Если время объекта второго параметра + 3600 сек > текущего времени,
или если разница первого и второго параметра времени объекта < 3600 сек, то запускаем ошибку, чтоб цена не записалась в массив.
{ returnfalse;
}
returntrue;
}
/******************************************************************************/long DiffInSecs(constdatetime dt1, constdatetime dt2) {
return dt1 - dt2;
}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Че то не идет мысля) есть линия А как проверить изминилась ли эта линия
CHARTEVENT_OBJECT_CHANGE
Изменение свойств графического объекта через диалог свойств
CHARTEVENT_OBJECT_CHANGE
Изменение свойств графического объекта через диалог свойств
Как без объекта, знаем цену это и есть линия, надо проверить изминилась она или нет, понятно что надо сравнить эту цену не докумекаю как)
что типо
где взять замер Price2 ))
Как без объекта, знаем цену это и есть линия, надо проверить изминилась она или нет, понятно что надо сравнить эту цену не докумекаю как)
что типо
где взять замер Price2 ))
цена на прошлом баре и будет Price2, сравниваем Бид с любой ценой прошлого бара на выбор - Опен,Клоз,Хай,Лоу.
если хочется промежуточные цены, надо тиковую историю сохранять и оттуда брать прошлую цену, тогда будет сравнение Бид с ценой прошлого тика.
и какой смысл нормализации цены? нормализовывать нужно вычисляемые значения, которые в торговые приказы потом идут, а цена и так нормализованная уже.
цена на прошлом баре и будет Price2
если хочется промежуточные цены, надо тиковую историю сохранять и оттуда брать прошлую цену.
Все разобрался :)
Не, там у меня с барами не пракатило бы
Способ поиска в нижеприведённом слегка другой:
Не сочтите за наглость, даже не знаю как уже обратиться, но нечего поделать не могу. Думал, что если получится составить массив, то условия забить, на от фильтрацию сигнала, как нечего делать.
Не сочтите за наглость, даже не знаю как уже обратиться, но нечего поделать не могу. Думал, что если получится составить массив, то условия забить, на от фильтрацию сигнала, как нечего делать.
Функция TimeCurrent() перегружена. Если почитать описание, что из себя представляет тип datetime, то выяснится, что вполне подойдёт первый вариант функции:
Запуск даёт:
Можно и с другой стороны зайти, не разницу моментов времени получать, а сравнивать эти моменты (заодно и условное выражение опять поприменяем):
Запуск даёт:
После получения понимания сути применённых идей, а также, помня о том, что из себя представляет тип datetime, работа с моментами времени, если требуемая точность не превышает единиц секунд, уже не должна вызывать затруднений.
Функция TimeCurrent() перегружена. Если почитать описание, что из себя представляет тип datetime, то выяснится, что вполне подойдёт первый вариант функции:
Запуск даёт:
Можно и с другой стороны зайти, не разницу моментов времени получать, а сравнивать эти моменты (заодно и условное выражение опять поприменяем):
Запуск даёт:
После получения понимания сути применённых идей, а также, помня о том, что из себя представляет тип datetime, работа с моментами времени, если требуемая точность не превышает единиц секунд, уже не должна вызывать затруднений.
Если честно, то не понял как применить. Осталось до конца миллиметр, обидно останавливаться когда почти все законченно.
Задача, не записывать в массив цену, если время объекта(2-ого параметра+3600сек>текущего)||(время 1-ого параметра - время 2-ого параметра)<3600сек )
Здравствуйте товарищи!
В МТ5 есть такие замечательные, и очень нужные мне инструменты "Импульсная волна Эллиотта" и "корректирующая волна эллиотта".
Вопрос вот в чём: Можно ли как то эти инструменты из МТ5 интегрировать в МТ4?
Торгую я в МТ4, перемещаться в МТ5, чтобы сделать анализ не очень удобно.
Или: Какие есть другие пути решения вопроса?