Liv Опубликовано 10 июня, 2007 Автор Жалоба Поделиться Опубликовано 10 июня, 2007 Жду с нетерпениемК сожалению, пока не получается - что-то, видимо, ещё не знаю... но ближайшее время сделаю. Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 16 июня, 2007 Автор Жалоба Поделиться Опубликовано 16 июня, 2007 После некоторого отсутствия (увы - денюжку я пока не на форексе зарабатываю), я продолжаю наши занятия. Сегодня будет простой урок:Как сделать, чтобы индикатор был в отдельном окне? На самом деле это очень просто! Нужно только вместо:#property indicator_chart_windowнаписать так:#property indicator_separate_window Те, кто немного разбирает аглицкие буковы поймёт, что новая инструкция как раз и устанавливает индикатор в отдельном окне. В принципе, любой индикатор может помещён как в окно графика цены, так и в отдельное окно. Для проверки достаточно в нашем индикаторе Сидуса заменить указаные инструкции. Может получиться так, что некоторым такой вариант этого индикатора будет удобнее, т.к. ничего не мешает определению пересечений линий индикатора. А индикатор MACD, например, может некоторым понравиться в окне графика, ибо там он становиться более наглядным. http://forex.orotukan.ru/images/macd.jpgКак я только что обнаружил, что это работает не на всех терминалах. :ninja: Тут надо быть внимательным, потому, что не все индикаторы будут нормально отображаться в противоположном окне. Индикатор ZigZag, в отрыве от цены, полностью теряет свою информативность и в отдельном окне абсолютно не пригоден. Так же как и некоторые индексные индикаторы (CCI, RVI, RSI & etc.), которые используют текущую шкалу цены и исчезают с графика (или полностью корожатся). Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 17 июня, 2007 Автор Жалоба Поделиться Опубликовано 17 июня, 2007 Индикатор Сидуса построен на нескольких скользящих средних (СС). Но СС можно использовать не только на ценах графика, но и на других линиях графика. Вот сегодня мы и займёмся построением СС на другой линии, например RSI. RSI – это индексный индикатор относительной силы рынка. Он построен на отношении положительных ценовых изменений (это когда цена идёт вверх) к отрицательным ценовым изменениям (когда цена идёт вниз). Один из распространенных методов анализа индикатора RSI состоит в поиске расхождений, при которых цена образует новый максимум, а RSI не удается преодолеть уровень своего предыдущего максимума. Подобное расхождение свидетельствует о вероятности разворота цен. Если затем индикатор поворачивает вниз и опускается ниже своей впадины, то он завершает так называемый «неудавшийся размах» (failure swing). Этот неудавшийся размах считается подтверждением скорого разворота цен. Итак, начнём.Отрываем редактор и создаём новый индикатор, который назовём "RSI+MA". В качестве переменных пишем:ПериодRSI = 14;ПериодMA = 6;Добавляем две линии – синюю для RSI и красную для СС. Указываем, что индикатор будет в отдельном окне и желательно указать максимум и минимум окна – для RSI используется 100 и 0.Делаем цикл так же, как мы делали на индикаторе Сидуса и в этом цикле мы делаем расчёт RSI.MQLExtMapBuffer1 = iRSI(NULL,0,ПериодRSI,PRICE_CLOSE,i);Как видите, здесь всё просто и для вывода RSI больше ничего не надо…. Но наша задача "навесить" СС на нашу линию RSI. Для этого мы делаем ещё раз цикл и пользуемся функцией iMAOnArray:MQLfor(i=0; i<limit; i++) { ExtMapBuffer2 = iMAOnArray(ExtMapBuffer1,0,ПериодMA,0,MODE_SMA,i);}Функция iMAOnArray предназначена как раз, для расчёта СС исходя из данных имеющегося массива ExtMapBuffer1. Как видите, он стоит первым в аргументах функции. С остальными аргументами функции вам, я думаю, уже не стоит труда разобраться.В принципе, эту функцию можно было бы использовать и в первом цикле вместе с расчётом RSI, но мои эксперименты показали, что лучше использовать отдельный цикл для расчёта СС. Это всё! Осталось сохранить, скомпилировать, поместить на график и наслаждаться нашим индикатором. Скользящая средняя на RSI будет показывать тенденцию изменения индекса роста/снижения цен, а сама линия RSI покажет момент возможного разворота цен. Домашнее задание:Что нужно сделать, чтобы выводились линии уровней 30 и 70? Они помогают в определении точки разворота.Что нужно сделать для добавления ещё одной СС?Разобраться, для чего нужна вторая СС. Ссылка на комментарий Поделиться на другие сайты Поделиться
Geokom Опубликовано 30 июня, 2007 Жалоба Поделиться Опубликовано 30 июня, 2007 Добрый день, Подскажите, как вывести, например, цифру, в угол главного окна? Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 30 июня, 2007 Автор Жалоба Поделиться Опубликовано 30 июня, 2007 Добрый день, Подскажите, как вывести, например, цифру, в угол главного окна?Привет! Простейший вариант - использование коментария:MQLComment("Текщая цена: " + Bid);Данная инструкция выведет строчку с ценой в левый верхний угол, во вторую строку. Для вывода многострочного коментария нужно разделять строки символом перевода строки "\n".Более сложный вариант - использование объекта OBJ_TEXT:MQLObjectCreate("name1" ,OBJ_TEXT,0,iTime(NULL,0,0),Ask);ObjectSetText("name1" ,"Привет!" ,12,"Arial" ,Red);Данный пример выводит слово "Привет" красным цветом в районе текущей цены. Примерно так же выводится с помощью инструкции OBJ_LABEL, только здесь координаты задаются в виде точек-пикселей, которые отчситываются от верхнего правого угла.И наконец, инструкция OBJ_ARROW позволяет вывести один символ в нужной точке окна. Это может быть один из определённых символов MT4 или один из симоволов набора шрифта Windings. Ссылка на комментарий Поделиться на другие сайты Поделиться
Geokom Опубликовано 1 июля, 2007 Жалоба Поделиться Опубликовано 1 июля, 2007 Привет! Простейший вариант - использование коментария:MQLComment("Текщая цена: " + Bid); Данная инструкция выведет строчку с ценой в левый верхний угол, во вторую строку. Для вывода многострочного коментария нужно разделять строки символом перевода строки "\n".Более сложный вариант - использование объекта OBJ_TEXT:MQLObjectCreate("name1" ,OBJ_TEXT,0,iTime(NULL,0,0),Ask);ObjectSetText("name1" ,"Привет!" ,12,"Arial" ,Red); Данный пример выводит слово "Привет" красным цветом в районе текущей цены. Примерно так же выводится с помощью инструкции OBJ_LABEL, только здесь координаты задаются в виде точек-пикселей, которые отчситываются от верхнего правого угла.И наконец, инструкция OBJ_ARROW позволяет вывести один символ в нужной точке окна. Это может быть один из определённых символов MT4 или один из симоволов набора шрифта Windings. Привет, СпасибоМне нужно вывести переменную (int или double) как раз в определенном месте экрана с координатами X и Y. Так я понял-OBJ_LABEL надо использовать? Может, пример скинешь? Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 1 июля, 2007 Автор Жалоба Поделиться Опубликовано 1 июля, 2007 Ну, кто из учеников решит это простой пример? :) Ссылка на комментарий Поделиться на другие сайты Поделиться
Geokom Опубликовано 6 июля, 2007 Жалоба Поделиться Опубликовано 6 июля, 2007 Ну, кто из учеников решит это простой пример? :) не получается передать значение переменной Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 6 июля, 2007 Автор Жалоба Поделиться Опубликовано 6 июля, 2007 не получается передать значение переменнойЭэээ.... мда...Переменной значение присваевается с помощью знака равно (=). Вот так:int МояПеременная=0; Если вы хотели что-то другое узнать, то нужно говрить конкретнее..... Ссылка на комментарий Поделиться на другие сайты Поделиться
Geokom Опубликовано 6 июля, 2007 Жалоба Поделиться Опубликовано 6 июля, 2007 Ээээ.... мда...Переменной значение присваевается с помощью знака равно (=). Вот так:int МояПеременная=0; Если вы хотели что-то другое узнать, то нужно говрить конкретнее..... Прошу прощения за неточность.Я имел ввиду -передать значение переменной в Label на экран, так,чтобы она обновлялась.Вроде, сделал сам. int start() { int limit;int counted_bars=IndicatorCounted();// проверим возможные ошибки - зачем время терять, если нет ничегоif(counted_bars<0) return(-1);// пересчитаем последнийif(counted_bars>0) counted_bars--;limit=Bars-counted_bars;for(int i=0; i<limit; i++) { ObjectDelete ("MA1"); MA1 = iMA (NULL,0,MA_Period1,0,MODE_SMA,PRICE_CLOSE,i);MA_1=DoubleToStr(MA1,4); ObjectCreate("MA1" ,OBJ_LABEL,0,0,0);ObjectSet ("MA1",OBJPROP_XDISTANCE, 50);ObjectSet ("MA1",OBJPROP_YDISTANCE,50);ObjectSetText("MA1" ,MA_1 ,12,"Arial" ,Red); RefreshRates(); } что-то типа этого, правильно? теперь вопрос - как сделать обновлене не с кждым баром,а с каждым тиком? Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 6 июля, 2007 Автор Жалоба Поделиться Опубликовано 6 июля, 2007 Вы не очень внимательно читали мои посты....Функция start() вызывается при каждом тике. И только для того, что не было лишних пересчётов уже расчитанных баров и используется функция IndicatorCounted() и всё остальное....Для вашего примера это всё не требуется и всё просто:MQL#property indicator_chart_window extern int Период=14;extern color Цвет=Red;extern int КоордX=50;extern int КоордY=50; int init() { ObjectCreate("MA1" ,OBJ_LABEL,0,0,0); ObjectSet ("MA1" ,OBJPROP_XDISTANCE,КоордX); ObjectSet ("MA1" ,OBJPROP_YDISTANCE,КоордY); ObjectSetText("MA1" ,"0" ,12,"Arial" ,Цвет); return(0);}int deinit() { ObjectDelete ("MA1" ); return(0);}int start() { double MA1 = iMA (NULL,0,Период,0,MODE_SMA,PRICE_CLOSE,0); string MA_1=DoubleToStr(MA1,4); ObjectSetText("MA1" ,MA_1,12,"Arial" ,Цвет);}Данный пример никакой информационной ценности не несёт, но как пример использования объекта очень поучителен и я рад, всё-таки, что нашёлся хотя бы один неравнодушный к моим урокам. Кстати, для того, чтобы ваш код имел расцветку нужно использовать BB-код: [MQL] ...... здесь код программы ...... [/MQL] Ссылка на комментарий Поделиться на другие сайты Поделиться
Geokom Опубликовано 6 июля, 2007 Жалоба Поделиться Опубликовано 6 июля, 2007 Вы не очень внимательно читали мои посты....Функция start() вызывается при каждом тике. И только для того, что не было лишних пересчётов уже расчитанных баров и используется функция IndicatorCounted() и всё остальное....Для вашего примера это всё не требуется и всё просто: ... Данный пример никакой информационной ценности не несёт, но как пример использования объекта очень поучителен и я рад, всё-таки, что нашёлся хотя бы один неравнодушный к моим урокам. Liv, огромное спасибо, на самом деле -читаю вроде внимательно,но когда начинаешь писать, вылетает из головы,теперь уже запомню :) Кстати, для того, чтобы ваш код имел расцветку нужно использовать BB-код: [MQL] ...... здесь код программы ...... [/MQL] И за это спасибо! Что касается активности - я думаю- лето - вот причина.Но я то буду теребить вопросами :) Ссылка на комментарий Поделиться на другие сайты Поделиться
Geokom Опубликовано 6 июля, 2007 Жалоба Поделиться Опубликовано 6 июля, 2007 Вы не очень внимательно читали мои посты....Функция start() вызывается при каждом тике. И только для того, что не было лишних пересчётов уже расчитанных баров и используется функция IndicatorCounted() и всё остальное....Для вашего примера это всё не требуется и всё просто:MQL#property indicator_chart_window extern int Период=14;extern color Цвет=Red;extern int КоордX=50;extern int КоордY=50; int init() { ObjectCreate("MA1" ,OBJ_LABEL,0,0,0); ObjectSet ("MA1" ,OBJPROP_XDISTANCE,КоордX); ObjectSet ("MA1" ,OBJPROP_YDISTANCE,КоордY); ObjectSetText("MA1" ,"0" ,12,"Arial" ,Цвет); return(0);}int deinit() { ObjectDelete ("MA1" ); return(0);}int start() { double MA1 = iMA (NULL,0,Период,0,MODE_SMA,PRICE_CLOSE,0); string MA_1=DoubleToStr(MA1,4); ObjectSetText("MA1" ,MA_1,12,"Arial" ,Цвет);} Данный пример никакой информационной ценности не несёт, но как пример использования объекта очень поучителен и я рад, всё-таки, что нашёлся хотя бы один неравнодушный к моим урокам. Кстати, для того, чтобы ваш код имел расцветку нужно использовать BB-код: [MQL] ...... здесь код программы ...... [/MQL] А вот и вопрос:можно сделать чтобы переменная Цвет менялась в зависимости от знака MA1 ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 6 июля, 2007 Автор Жалоба Поделиться Опубликовано 6 июля, 2007 А вот и вопрос:можно сделать чтобы переменная Цвет менялась в зависимости от знака MA1 ?У переменной MA1 всегда будет + (плюс), т.к. это Moving Average, т.е. Средняя Скользящая цены, а цена никогда не будет отрицательной (во был бы прикол - тебе платят за то, что ты покупаешь товар! ) На сколько я понял, имеется желание сделать индикатор направления движения СС (вверх или вниз). Об этом позднее мы будем говорить.... увы, сейчас сильно занят - как раз то время, когда день весь год кормит.... Ссылка на комментарий Поделиться на другие сайты Поделиться
Geokom Опубликовано 7 июля, 2007 Жалоба Поделиться Опубликовано 7 июля, 2007 У переменной MA1 всегда будет + (плюс), т.к. это Moving Average, т.е. Средняя Скользящая цены, а цена никогда не будет отрицательной (во был бы прикол - тебе платят за то, что ты покупаешь товар! ) На сколько я понял, имеется желание сделать индикатор направления движения СС (вверх или вниз). Об этом позднее мы будем говорить.... увы, сейчас сильно занят - как раз то время, когда день весь год кормит.... Ну конечно, я говорил о своей переменной МА1, она у меня уже расчетная и меняет знак.OK. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения