Всё ты знаешь! Сегодня не смог поймать, кто мне поставил Администратора, а пароль не дал, и мне невдомёк было спросить! Завтра заарканю! Чего не спится?
Спасибо таре за участие! Всё мне восстановил мой сосед по кварталу! Эксперт в информатике!
Да понимаю, что много вопросов глупых. Честно стараюсь, весь день просидел, но без результатно.
Записываю в массив, значение цен нескольких трендовых линий на текущем баре.
Как удалить из массива значение, если объекта нет?
artmedia70:
Если пробегать по значениям цен трендовых на каждом тике, инициализировать массив, и увеличивать его размерность при нахождении очередной нужной цены нужной трендовой линии, то отпадёт необходимость убирать из массива уже отработанные значения удалённых трендовых. Массив будет динамическим, и в нём каждый раз на каждом тике будут только значения существующих объектов.
double MassTrendNumber(double &array[], string tip) // Поиск значения цены трендовой линии, текущего бара, запись в массив. Два массива: masS и masB
{
ArrayResize(array,ObjectsTotal(OBJ_TREND));
for (int i = 0, limit = ArrayResize(array,ObjectsTotal(OBJ_TREND)); i < limit; i++)
{
string DWnem=ObjectName(i);
string DW="downtrendline"+IntegerToString(i); // существует два названия трендовых линий, первое
string DW2="uptrendline"+IntegerToString(i); // второе
if(tip="Sell") //первый массив цен на селл
if(DWnem=DW)//если имя равно "downtrendline"if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
// Также существует три цвета
array[i]=ObjectGetValueByShift(DWnem,1); //записываем
if(tip="Buy") //второй массивцен на бай
if(DWnem=DW2)
if(ObjectGet(DWnem,OBJPROP_COLOR)==Goldenrod || ObjectGet(DWnem,OBJPROP_COLOR)==Gainsboro || ObjectGet(DWnem,OBJPROP_COLOR)==White)
array[i]=ObjectGetValueByShift(DWnem,1);
} return;
}
Пытаюсь сделать в отдельном окне осциллятор вокруг 0 из цены закрытия, но никак не получается, иожет кто-то делал уже, подскажите, пожалуйста, формулу.
То есть имеем цену Close[i], надо чтобы эта цена крутилась выше-ниже нуля как в MACD/CCI, в отдельном окне, но как ни стараюсь, не получается без дополнительных значений вроде МА: сейчас что-то похожее получается если вычесть iClose-iMA, но может есть варианты без сглаживания?
Ну или в диапазоне 0,0...1,0 если вокруг нуля никак...
#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))) {
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("Чёрт!");
}
}
/******************************************************************************/voidOnStart() {
double masS[];
double masB[];
Print("Sell:");
FillAndPrint(masS, false);
Print("Buy:");
FillAndPrint(masB, true);
}
Добавил на график две белые трендовые линии с соответствующими именами и получил:
Не пишите километровые функции, разбивайте программу на короткие "фразы"-"кирпичики". Из мелких "кирпичиков" лепятся более крупные, из крупных - ещё более крупные. Видите, это же возможно.
Все данные передавайте функциям исключительно через параметры.
Обязательно обрабатывайте ошибки, если вызываемая функция может завершиться неуспешно, и последующие действия в случае игнорирования ошибки приведут к серьёзным последствиям. Подавляющее большинство падений программ (вообще) происходит из-за того, что обработка ошибок вообще никак не запрограммирована.
Например, если ArrayResize(), вызванная для увеличения размера массива, вернула ошибку, а программист не проверил этого и обращается к, якобы, увеличенному массиву, то возникает ошибка выхода за границы массива, что приводит к последующей остановке работы программы MQL4. Эксперт, например, перестаёт торговать, бросив открытые позиции. Правда, великолепно?
Попробуйте вставить "array[0] = 0;" перед циклом в функции MassTrendNumber(), и убедитесь, что скрипт завершается после ошибки выхода за границы массива.
Пытаюсь сделать в отдельном окне осциллятор вокруг 0 из цены закрытия, но никак не получается, иожет кто-то делал уже, подскажите, пожалуйста, формулу.
То есть имеем цену Close[i], надо чтобы эта цена крутилась выше-ниже нуля как в MACD/CCI, в отдельном окне, но как ни стараюсь, не получается без дополнительных значений вроде МА: сейчас что-то похожее получается если вычесть iClose-iMA, но может есть варианты без сглаживания?
Ну или в диапазоне 0,0...1,0 если вокруг нуля никак...
Добавил на график две белые трендовые линии с соответствующими именами и получил:
Не пишите километровые функции, разбивайте программу на короткие "фразы"-"кирпичики". Из мелких "кирпичиков" лепятся более крупные, из крупных - ещё более крупные. Видите, это же возможно.
Все данные передавайте функциям исключительно через параметры.
Обязательно обрабатывайте ошибки, если вызываемая функция может завершиться неуспешно, и последующие действия в случае игнорирования ошибки приведут к серьёзным последствиям. Подавляющее большинство падений программ (вообще) происходит из-за того, что обработка ошибок вообще никак не запрограммирована.
Например, если ArrayResize(), вызванная для увеличения размера массива, вернула ошибку, а программист не проверил этого и обращается к, якобы, увеличенному массиву, то возникает ошибка выхода за границы массива, что приводит к последующей остановке работы программы MQL4. Эксперт, например, перестаёт торговать, бросив открытые позиции. Правда, великолепно?
Попробуйте вставить "array[0] = 0;" перед циклом в функции MassTrendNumber(), и убедитесь, что скрипт завершается после ошибки выхода за границы массива.
Да, спасибо вам большое, вы просто нет слов как помогли, так все четко! Крутооо!!!
Зато у вас принц коронован.
Всё ты знаешь! Сегодня не смог поймать, кто мне поставил Администратора, а пароль не дал, и мне невдомёк было спросить! Завтра заарканю! Чего не спится?
Спасибо таре за участие! Всё мне восстановил мой сосед по кварталу! Эксперт в информатике!
Да понимаю, что много вопросов глупых. Честно стараюсь, весь день просидел, но без результатно.
Записываю в массив, значение цен нескольких трендовых линий на текущем баре.
Как удалить из массива значение, если объекта нет?
artmedia70:Если пробегать по значениям цен трендовых на каждом тике, инициализировать массив, и увеличивать его размерность при нахождении очередной нужной цены нужной трендовой линии, то отпадёт необходимость убирать из массива уже отработанные значения удалённых трендовых. Массив будет динамическим, и в нём каждый раз на каждом тике будут только значения существующих объектов.
ArrayResize(array,ObjectsTotal(OBJ_TREND)); for (int i = 0, limit = ArrayResize(array,ObjectsTotal(OBJ_TREND)); i < limit; i++) { string DWnem=ObjectName(i); string DW="downtrendline"+IntegerToString(i); // существует два названия трендовых линий, первое string DW2="uptrendline"+IntegerToString(i); // второеПытаюсь сделать в отдельном окне осциллятор вокруг 0 из цены закрытия, но никак не получается, иожет кто-то делал уже, подскажите, пожалуйста, формулу.
То есть имеем цену Close[i], надо чтобы эта цена крутилась выше-ниже нуля как в MACD/CCI, в отдельном окне, но как ни стараюсь, не получается без дополнительных значений вроде МА: сейчас что-то похожее получается если вычесть iClose-iMA, но может есть варианты без сглаживания?
Ну или в диапазоне 0,0...1,0 если вокруг нуля никак...
Способ поиска в нижеприведённом слегка другой:
Добавил на график две белые трендовые линии с соответствующими именами и получил:
Не пишите километровые функции, разбивайте программу на короткие "фразы"-"кирпичики". Из мелких "кирпичиков" лепятся более крупные, из крупных - ещё более крупные. Видите, это же возможно.
Все данные передавайте функциям исключительно через параметры.
Обязательно обрабатывайте ошибки, если вызываемая функция может завершиться неуспешно, и последующие действия в случае игнорирования ошибки приведут к серьёзным последствиям. Подавляющее большинство падений программ (вообще) происходит из-за того, что обработка ошибок вообще никак не запрограммирована.
Например, если ArrayResize(), вызванная для увеличения размера массива, вернула ошибку, а программист не проверил этого и обращается к, якобы, увеличенному массиву, то возникает ошибка выхода за границы массива, что приводит к последующей остановке работы программы MQL4. Эксперт, например, перестаёт торговать, бросив открытые позиции. Правда, великолепно?
Попробуйте вставить "array[0] = 0;" перед циклом в функции MassTrendNumber(), и убедитесь, что скрипт завершается после ошибки выхода за границы массива.
Пытаюсь сделать в отдельном окне осциллятор вокруг 0 из цены закрытия, но никак не получается, иожет кто-то делал уже, подскажите, пожалуйста, формулу.
То есть имеем цену Close[i], надо чтобы эта цена крутилась выше-ниже нуля как в MACD/CCI, в отдельном окне, но как ни стараюсь, не получается без дополнительных значений вроде МА: сейчас что-то похожее получается если вычесть iClose-iMA, но может есть варианты без сглаживания?
Ну или в диапазоне 0,0...1,0 если вокруг нуля никак...
https://www.mql5.com/ru/code/9340
https://www.mql5.com/ru/code/9340
О, примерно так. Ничто не ново в этом мире )))
Способ поиска в нижеприведённом слегка другой:
Добавил на график две белые трендовые линии с соответствующими именами и получил:
Не пишите километровые функции, разбивайте программу на короткие "фразы"-"кирпичики". Из мелких "кирпичиков" лепятся более крупные, из крупных - ещё более крупные. Видите, это же возможно.
Все данные передавайте функциям исключительно через параметры.
Обязательно обрабатывайте ошибки, если вызываемая функция может завершиться неуспешно, и последующие действия в случае игнорирования ошибки приведут к серьёзным последствиям. Подавляющее большинство падений программ (вообще) происходит из-за того, что обработка ошибок вообще никак не запрограммирована.
Например, если ArrayResize(), вызванная для увеличения размера массива, вернула ошибку, а программист не проверил этого и обращается к, якобы, увеличенному массиву, то возникает ошибка выхода за границы массива, что приводит к последующей остановке работы программы MQL4. Эксперт, например, перестаёт торговать, бросив открытые позиции. Правда, великолепно?
Попробуйте вставить "array[0] = 0;" перед циклом в функции MassTrendNumber(), и убедитесь, что скрипт завершается после ошибки выхода за границы массива.
Да, спасибо вам большое, вы просто нет слов как помогли, так все четко! Крутооо!!!
Да, спасибо вам большое, вы просто нет слов как помогли, так все четко! Крутооо!!!
Круто будет, если вы сможете сами постепенно обучиться важным навыкам максимально прямым и эффективным способом.
И если и другие смогут извлечь такую же пользу.
Че то не идет мысля) есть линия А как проверить изминилась ли эта линия