Подскажите выход из ситуации. Есть индикатор Average Directional Movement Index, рисует он пунктирные линии. Я хочу поймать пересечение линий. Но в следствии того что они пунктирные нормально поймать пересечение невозможно.
Shuba: Чуток подправил функцию. Теперь пересечения вычисляет без сбоев. Входные Параметры: | nm1 - имя первой линии |
nm2 - имя второй линии
на выходе M - ценовой уровень.
PS. Прошу извинить автора ветки, что выложил здесь свой код. Просто подумал, что может кто-то тоже мучался с пересечениями...
Ну, так может, пускай бы эта функция возвращала этот самый ценовой уровень (как в предыдущем варианте)?! К тому же, в Вашем коде присутствует не объявленная переменная "T".
TarasBY: Ну, так может, пускай бы эта функция возвращала этот самый ценовой уровень (как в предыдущем варианте)?! К тому же, в Вашем коде присутствует не объявленная переменная "T".
Ну, так она его и возвращает)
про необъявленные переменные - извините. Исправляюсь.
double M - ценовой уровень пересечения. Эту переменную объявляем в самом начале.
Эта функция выполняет закрытие позиции по рыночной цене в том случае, если цена некоторое количество баров топчется в зоне, близкой к TakeProfit или попыталась выйти из этой зоны. Отбор закрываемых позиций задаётся внешними параметрами:
sy - Наименование инструмента. Если задать этот параметр, то функция проверит позиции только заданного инструмента. NULL означает текущий инструмент, а "" (по умолчанию) - любой инструмент.
op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 - означает любую позицию.
mn - Идентификатор позиции (MagicNumber). Значение по умолчанию -1 - любой магик.
tf - Таймфрейм графика, на котором считать бары, в течение которых цена топчется в зоне TakeProfit. Значение по умолчанию 0 - текущий таймфрейм.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 01.04.2012 |//| Описание : Закрытие позиций при нахождении цены в зоне TakeProfit |//| в течение заданного количества баров, |//| а также при попыте выйти из этой зоны. |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//+----------------------------------------------------------------------------+void ClosePosByTakeProfitZone(string sy="", int op=-1, int mn=-1, int tf=0) {
double pa, pb, po, pp, tp;
int i, k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if ((mn<0 || OrderMagicNumber()==mn) && OrderTakeProfit()>0) {
po=MarketInfo(OrderSymbol(), MODE_POINT);
if (po==0) Message("В обзоре рынка отсутствует символ "+OrderSymbol());
else {
if (OrderType()==OP_BUY) {
RefreshRates();
pb=MarketInfo(OrderSymbol(), MODE_BID);
pp=iLow(OrderSymbol(), tf, iLowest(OrderSymbol(), tf, MODE_LOW, TP.ZoneBars, 0));
tp=OrderTakeProfit()-TP.ZonePoint*po;
if (pp>tp || (pb<tp && (iHigh(OrderSymbol(), tf, 0)>tp) || (iHigh(OrderSymbol(), tf, 1)>tp))) ClosePosBySelect();
}
if (OrderType()==OP_SELL) {
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pp=iHigh(OrderSymbol(), tf, iHighest(OrderSymbol(), tf, MODE_HIGH, TP.ZoneBars, 0));
tp=OrderTakeProfit()+TP.ZonePoint*po;
if (pp<tp || (pb>tp && (iLow(OrderSymbol(), tf, 0)<tp) || (iLow(OrderSymbol(), tf, 1)<tp))) ClosePosBySelect();
}
}
}
}
}
}
}
Во вложении советник для тестирования функции ClosePosByTakeProfitZone(). тестировать можно как в тестере. так и онлайн.
Не так давно начала изучение ваших функций, на 36 странице не совсем поняла функции, помогите пожалуйста разобраться:
Функция GetArrowInterval().
//+------------------------------------------------------------------+ //| Возвращает интервал установки сигнальных указателей | //+------------------------------------------------------------------+ int GetArrowInterval() { int p = Period();
switch (p) { case 1: return(4); case 5: return(5); case 15: return(6); case 30: return(8); case 60: return(10); case 240: return(20); case 1440: return(40); case 10080: return(80); case 43200: return(150); } }
т.е. эта функция использовалась для установки стрелок с помощью ф-ии SetArrow(), а именно вместо уровня цены в строке ObjectCreate(nm, OBJ_ARROW, 0, 0,0), подскажите каким образом это происходило, мне не понятно, что означают возвращаемые значения (4,5,6,8,10....)
Новый вариант функции тоже остался не понятен:
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 12.10.2007 | //+----------------------------------------------------------------------------+ //| Описание : Возвращает интервал установки сигнальных указателей | //| Параметры: | //| pr - процент относительно ценового размера окна | //+----------------------------------------------------------------------------+ int GetArrowInterval(int pr=7) { if (pr<=0) pr=7;
Не так давно начала изучение ваших функций, на 36 странице не совсем поняла функции, помогите пожалуйста разобраться:
т.е. эта функция использовалась для установки стрелок с помощью ф-ии SetArrow(), а именно вместо уровня цены в строке ObjectCreate(nm, OBJ_ARROW, 0, 0,0), подскажите каким образом это происходило...
Не совсем правильно Вами понято назначение данных функций. Они не оперируют с ценами и не ставят значков, а всего лишь возвращают расстояние в пунктах в зависимости от текущего таймфрейма. Смотрите рисунок ниже
Если Вы поставите подобный значок не вплотную к цене, а на некотором расстоянии и, например, на графике таймфрейма Н1, а потом переключитесь на М1, то значка Вы скорее всего не увидите. Изменится масштаб и значок уйдёт либо далеко вниз, либо вверх. Упомянутые Вами функции предназначены для того, чтобы значки всегда были видны на графике при любом таймфрейме.
Lisi4ka330:
... что означают возвращаемые значения (4,5,6,8,10....)
Расстояние в пунктах взависимости от текущего таймфрейма.
Lisi4ka330:
Функция WindowPriceMax() возвращает максимальное значение вертикальной шкалы, т.е. это максимальное значение цены, но за какой период?
Ни за какой... просто в текущем окне. Например, на рисунке ниже, максимальная цена равна 97,35
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Входные Параметры: |
nm1 - имя первой линии |
nm2 - имя второй линии
на выходе M - ценовой уровень.
PS. Прошу извинить автора ветки, что выложил здесь свой код. Просто подумал, что может кто-то тоже мучался с пересечениями...
Вспомнилось (уже в Анналах):
PS. Прошу извинить автора ветки, что выложил здесь свой код. Просто подумал, что может кто-то тоже мучался с пересечениями...
Чуток подправил функцию. Теперь пересечения вычисляет без сбоев.
Входные Параметры: |
nm1 - имя первой линии |
nm2 - имя второй линии
на выходе M - ценовой уровень.
PS. Прошу извинить автора ветки, что выложил здесь свой код. Просто подумал, что может кто-то тоже мучался с пересечениями...
Ну, так может, пускай бы эта функция возвращала этот самый ценовой уровень (как в предыдущем варианте)?! К тому же, в Вашем коде присутствует не объявленная переменная "T".
Ну, так она его и возвращает)
про необъявленные переменные - извините. Исправляюсь.
double M - ценовой уровень пересечения. Эту переменную объявляем в самом начале.
В прицепе - советник для того, чтобы посмотреть, как функция работает.
сразу чего-то не загрузилось...
сразу чего-то не загрузилось...
Вы бы воду, ИМХО, не мутили - бомбили бы сюда в библиотеки функций с описанием и все...
Кому надо - поиском найдут.
Функция ClosePosByTakeProfitZone().
Эта функция выполняет закрытие позиции по рыночной цене в том случае, если цена некоторое количество баров топчется в зоне, близкой к TakeProfit или попыталась выйти из этой зоны. Отбор закрываемых позиций задаётся внешними параметрами:
Добрый вечер, Игорь!
Не так давно начала изучение ваших функций, на 36 странице не совсем поняла функции, помогите пожалуйста разобраться:
Функция GetArrowInterval().
//+------------------------------------------------------------------+
//| Возвращает интервал установки сигнальных указателей |
//+------------------------------------------------------------------+
int GetArrowInterval() {
int p = Period();
switch (p) {
case 1: return(4);
case 5: return(5);
case 15: return(6);
case 30: return(8);
case 60: return(10);
case 240: return(20);
case 1440: return(40);
case 10080: return(80);
case 43200: return(150);
}
}
т.е. эта функция использовалась для установки стрелок с помощью ф-ии SetArrow(), а именно вместо уровня цены в строке ObjectCreate(nm, OBJ_ARROW, 0, 0,0), подскажите каким образом это происходило, мне не понятно, что означают возвращаемые значения (4,5,6,8,10....)
Новый вариант функции тоже остался не понятен://+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 12.10.2007 |
//+----------------------------------------------------------------------------+
//| Описание : Возвращает интервал установки сигнальных указателей |
//| Параметры: |
//| pr - процент относительно ценового размера окна |
//+----------------------------------------------------------------------------+
int GetArrowInterval(int pr=7) {
if (pr<=0) pr=7;
return((WindowPriceMax()-WindowPriceMin())/100*pr/Point);
Функция WindowPriceMax() возвращает максимальное значение вертикальной шкалы, т.е. это максимальное значение цены, но за какой период?
И спасибо за ваш труд....))))
Не так давно начала изучение ваших функций, на 36 странице не совсем поняла функции, помогите пожалуйста разобраться:
т.е. эта функция использовалась для установки стрелок с помощью ф-ии SetArrow(), а именно вместо уровня цены в строке ObjectCreate(nm, OBJ_ARROW, 0, 0,0), подскажите каким образом это происходило...
Не совсем правильно Вами понято назначение данных функций. Они не оперируют с ценами и не ставят значков, а всего лишь возвращают расстояние в пунктах в зависимости от текущего таймфрейма. Смотрите рисунок ниже
Если Вы поставите подобный значок не вплотную к цене, а на некотором расстоянии и, например, на графике таймфрейма Н1, а потом переключитесь на М1, то значка Вы скорее всего не увидите. Изменится масштаб и значок уйдёт либо далеко вниз, либо вверх. Упомянутые Вами функции предназначены для того, чтобы значки всегда были видны на графике при любом таймфрейме.
Lisi4ka330:
... что означают возвращаемые значения (4,5,6,8,10....)
Расстояние в пунктах взависимости от текущего таймфрейма.
Lisi4ka330:
Функция WindowPriceMax() возвращает максимальное значение вертикальной шкалы, т.е. это максимальное значение цены, но за какой период?
Ни за какой... просто в текущем окне. Например, на рисунке ниже, максимальная цена равна 97,35