А рисование наклонных уровней с другой стороны сможете реализовать?
т.е. линии поддержки и сопротивления рисовать не снизу при восходящем ,а наоборот сверху?
А рисование наклонных уровней с другой стороны сможете реализовать?
т.е. линии поддержки и сопротивления рисовать не снизу при восходящем ,а наоборот сверху?
да конечно, это не так сложно как кажется.
Грамотные ребята подскажите пожалуйста, как в MQL5 найти максимальный хай и лоу за выставленное количество баров
К примеру на mql4 там все просто делается
_High = NormalizeDouble(iHigh(Symb,PERIOD_CURRENT,iHighest(Symb,PERIOD_CURRENT,MODE_HIGH,CanalBar,0)), Digits); // вычисление наибольшей цены хай за последнии CanalBar _Low = NormalizeDouble(iLow (Symb,PERIOD_CURRENT,iLowest (Symb,PERIOD_CURRENT,MODE_LOW, CanalBar,0)), Digits); // вычисление наименьшей цены лоу за последнии CanalBar
тут просто берем то что нашли и отрисовываем на графике линию.
А вот как найти хай лоу за кол-во баров в mql5 голову сломал. iHighest и iLowest
в простом понимании тут нет как я понял.
Буду благодарен если поможете, а если будет пример кода то вообще шикарно
спасибо.
Грамотные ребята подскажите пожалуйста, как в MQL5 найти максимальный хай и лоу за выставленное количество баров
К примеру на mql4 там все просто делается
тут просто берем то что нашли и отрисовываем на графике линию.
А вот как найти хай лоу за кол-во баров в mql5 голову сломал. iHighest и iLowest
в простом понимании тут нет как я понял.
Буду благодарен если поможете, а если будет пример кода то вообще шикарно
_High = NormalizeDouble(high[ArrayMaximum(high, 0, CanalBar)], Digits); // вычисление наибольшей цены хай за последнии CanalBar
где high - массив хай цены баров
если это индикатор, то он вам в OnCalculation приходит,
если это в эксперте, то запрашивайте через CopyHigh
не забывайте ArraySetAsSeries true
спасибо.
СПС
Грамотные ребята подскажите пожалуйста, как в MQL5 найти максимальный хай и лоу за выставленное количество баров
К примеру на mql4 там все просто делается
тут просто берем то что нашли и отрисовываем на графике линию.
А вот как найти хай лоу за кол-во баров в mql5 голову сломал. iHighest и iLowest
в простом понимании тут нет как я понял.
Буду благодарен если поможете, а если будет пример кода то вообще шикарно
спасибо.
вы путаете команды общего запроса ко всем данным, с командами запроса к текущим данным, что в данном случае лишнее.
//для текущих данных(доступ к текущим данным из любого советника или индикатора) будет _High=NormalizeDouble(High[iHighest(Symb,_Period,MODE_HIGH,CanalBar)],_Digits); //для общих данных(доступ из любого советника или индикатора к любым данным в базе) будет _High=NormalizeDouble(iHigh(Symb,PERIOD_CURRENT,iHighest(Symb,PERIOD_CURRENT,MODE_HIGH,CanalBar)),MarketInfo(Symb,MODE_DIGITS));
а теперь по коду в мт5.
double high[]; ArrayResize(high,CanalBar); CopyHigh(Symb,PERIOD_CURRENT,0,CanalBar,high); _High=NormalizeDouble(high[ArrayMaximum(high)],SymbolInfoInteger(Symb,SYMBOL_DIGITS)); ArrayFree(high);
в данном случае приведен доступ к любым данным в базе данных для любого символа из любого индикатора или советника.
не нужно мудрить на счет направления индексации, так как нам нужен только максимум, не важно где он находиться.
команда ArrayMaximum() (согласно справке) возвращает нужное значение учитывая направление индексации массива.
с/у.
P.S. я бы не нормализовывал цену, это лишнее, если конечно вы не строите пипсовщика, который ловит 1 Point со сделки.
во первых по вашему коду. я бы сделал проще, исходя из того что вы запрашиваете максимум на текущем графике, приведу пример для вершин, для впадин все практически так же.
вы путаете команды общего запроса ко всем данным, с командами запроса к текущим данным, что в данном случае лишнее.
а теперь по коду в мт5.
в данном случае приведен доступ к любым данным в базе данных для любого символа из любого индикатора или советника.
не нужно мудрить на счет направления индексации, так как нам нужен только максимум, не важно где он находиться.
команда ArrayMaximum() (согласно справке) возвращает нужное значение учитывая направление индексации массива.
с/у.
P.S. я бы не нормализовывал цену, это лишнее, если конечно вы не строите пипсовщика, который ловит 1 Point со сделки.
Отлично, с этим со всем разобрался
Теперь вот вопрос в другом
Реализация такая
input int CanalBar = 200; // Кол-во баров для расчета //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { double high[]; ArrayResize(high,CanalBar); CopyHigh(_Symbol,PERIOD_CURRENT,0,CanalBar,high); double _High=NormalizeDouble(high[ArrayMaximum(high)],SymbolInfoInteger(_Symbol,SYMBOL_DIGITS)); ArrayFree(high); HLineCreate(0,"HIGH",0,_High,"",clrBlue,1,1); // Нарисуем линию на графике. } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| Создает горизонтальную линию | //+------------------------------------------------------------------+ //| На основе: | //| Справочник MQL5 / Стандартные константы, перечисления и структуры| //| / Константы объектов / Типы объектов / OBJ_HLINE | //+------------------------------------------------------------------+ bool HLineCreate(const long chart_ID=0, // ID графика const string name="HLine", // имя линии const int sub_window=0, // номер подокна double price=0, // цена линии const string toolTip="\n", // текст всплывающей подсказки const color clr=clrRed, // цвет линии const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии const int line_width=1, // толщина линии const bool back=false, // на заднем плане const bool selection=true, // выделить для перемещений const bool hidden=true, // скрыт в списке объектов const long z_order=0, // приоритет на нажатие мышью const int timeFrames=OBJ_ALL_PERIODS)//отображение объекта на различных периодах { //--- сбросим значение ошибки ResetLastError(); //--- создадим горизонтальную линию if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price)) { Print(LINE_NUMBER,__FUNCTION__, ": failed to create a horizontal line! Error code = ",GetLastError()); return(false); } //--- установим текст всплывающей подсказки ObSetString(chart_ID,name,OBJPROP_TOOLTIP,toolTip); //--- установим цвет линии ObSetIntegerColor(chart_ID,name,OBJPROP_COLOR,clr); //--- установим стиль отображения линии ObSetIntegerLineStyle(chart_ID,name,style); //--- установим толщину линии ObSetIntegerInt(chart_ID,name,OBJPROP_WIDTH,line_width); //--- отобразим на переднем (false) или заднем (true) плане ObSetIntegerBool(chart_ID,name,OBJPROP_BACK,back); //--- включим (true) или отключим (false) режим перемещения линии мышью //--- при создании графического объекта функцией ObjectCreate, по умолчанию объект //--- нельзя выделить и перемещать. Внутри же этого метода параметр selection //--- по умолчанию равен true, что позволяет выделять и перемещать этот объект ObSetIntegerBool(chart_ID,name,OBJPROP_SELECTABLE,selection); ObSetIntegerBool(chart_ID,name,OBJPROP_SELECTED,selection); //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObSetIntegerBool(chart_ID,name,OBJPROP_HIDDEN,hidden); //--- установим приоритет на получение события нажатия мыши на графике ObSetIntegerLong(chart_ID,name,OBJPROP_ZORDER,z_order); //--- установка видимости объекта на различных таймфреймах ObSetIntegerInt(chart_ID,name,OBJPROP_TIMEFRAMES,timeFrames); //--- успешное выполнение return(true); }
При запуске визуального тестирования, линия на графике отрисовывается, но стоит на месте, свои значения линия не меняет по ходу тестирования, в mql5 что нужно дополнительно каким то образом давать расчетам пинка под зад ?
Отлично, с этим со всем разобрался
Теперь вот вопрос в другом
Реализация такая
При запуске визуального тестирования, линия на графике отрисовывается, но стоит на месте, свои значения линия не меняет по ходу тестирования, в mql5 что нужно дополнительно каким то образом давать расчетам пинка под зад ?
Попробуйте так:
void HLineCreate(const long chart_ID=0, // ID графика const string name="HLine", // имя линии const int sub_window=0, // номер подокна double price=0, // цена линии const string toolTip="\n", // текст всплывающей подсказки const color clr=clrRed, // цвет линии const ENUM_LINE_STYLE style=STYLE_SOLID, // стиль линии const int line_width=1, // толщина линии const bool back=false, // на заднем плане const bool selection=true, // выделить для перемещений const bool hidden=true, // скрыт в списке объектов const long z_order=0, // приоритет на нажатие мышью const int timeFrames=OBJ_ALL_PERIODS)//отображение объекта на различных периодах { if(ObjectFind(chart_ID, name)<0) { //--- создадим горизонтальную линию ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price); //--- установим текст всплывающей подсказки ObjectSetString(chart_ID,name,OBJPROP_TOOLTIP,toolTip); //--- установим цвет линии ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- установим стиль отображения линии ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); //--- установим толщину линии ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,line_width); //--- отобразим на переднем (false) или заднем (true) плане ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); //--- включим (true) или отключим (false) режим перемещения линии мышью //--- при создании графического объекта функцией ObjectCreate, по умолчанию объект //--- нельзя выделить и перемещать. Внутри же этого метода параметр selection //--- по умолчанию равен true, что позволяет выделять и перемещать этот объект ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); //--- скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); //--- установим приоритет на получение события нажатия мыши на графике ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); //--- установка видимости объекта на различных таймфреймах ObjectSetInteger(chart_ID,name,OBJPROP_TIMEFRAMES,timeFrames); } //--- установим способ привязки ObjectSetDouble(chart_ID,name,OBJPROP_PRICE,price); }
Отлично, с этим со всем разобрался
Теперь вот вопрос в другом
Реализация такая
При запуске визуального тестирования, линия на графике отрисовывается, но стоит на месте, свои значения линия не меняет по ходу тестирования, в mql5 что нужно дополнительно каким то образом давать расчетам пинка под зад ?
if(!ObjectCreate(chart_ID,name,OBJ_HLINE,sub_window,0,price))если уже существует объект с таким именем не реализуется, как следствие ваша цена, на уже существующей линии не измениться.
как вам правильно сказали, это нужно делать командой
ObjectSetDouble(chart_ID,name,OBJPROP_PRICE,price);и еще одно замечание, старайтесь не лезть в классы и другие премудрости, если есть возможность написать проще, используя команды прямого доступа.
применяйте только те команды, которые необходимы, не нужно при каждом обращении перебирать все параметры линии ведь вам нужно изменить только цену линии.
с уважением.
Спасибо ребята, разобрался теперь.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Пример индикатора, строящего линии поддержки и сопротивления:
В статье приводится пример реализации индикатора для построения линий поддержки и сопротивления на основе формализованных условий. Вы сможете не только применить индикатор, но и поймете, насколько просто это реализовать. Теперь вы сможете сами сформулировать те условия для построения линий, которые посчитаете нужными, немного изменив код индикатора под свои нужды.
Обратите внимание на индикаторы на основе скользящих средних. В числе первых мы назовем, конечно же, Moving Average, далее — Bollinger Bands и Envelopes, которые входят в стандартный набор терминала. Эти индикаторы как будто созданы показывать уровни поддержки и сопротивления на графике. Открываем свойства индикатора на вкладке "Уровни" и прописываем там пару уровней со знаком минус и пару — со знаком плюс. Получим примерно такое изображение:
Автор: Andrey Kisselyov