nikkq Опубликовано 7 июля, 2007 Жалоба Поделиться Опубликовано 7 июля, 2007 Ну конечно, я говорил о своей переменной МА1, она у меня уже расчетная и меняет знак.OK.я здесь пропишусь... вот тоже интересен вопрос: на конкретном периоде красить ма возможно, наподобие как в АО - вверх зелена,а вниз красная напрмер?а тоя думаю, что будет краситься вс я линия в зависимости направления на последних барах? Ссылка на комментарий Поделиться на другие сайты Поделиться
Geokom Опубликовано 7 июля, 2007 Жалоба Поделиться Опубликовано 7 июля, 2007 Liv, добрый день, еще вопрос:- можно ли отобразить вертикальный отрезок в необходимом месте экрана, с координатами в пикселах (а не время/цена)? Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 7 июля, 2007 Автор Жалоба Поделиться Опубликовано 7 июля, 2007 я здесь пропишусь... вот тоже интересен вопрос: на конкретном периоде красить ма возможно, наподобие как в АО - вверх зелена,а вниз красная напрмер?а тоя думаю, что будет краситься вс я линия в зависимости направления на последних барах?Такой индикатор уже давно написан (не мной) и он достаточно прикольный.см. приложение.... а что касается "можно ли отобразить вертикальный отрезок в необходимом месте экрана, с координатами в пикселах (а не время/цена)?", то именно такой объект создать нельзя - нет такого в MT4. Это же не графический редактор, а график движения цен и здесь всё на это завязано. поэтому вряд ли стоит что-то ещё придумывать.... ma_color.zip Ссылка на комментарий Поделиться на другие сайты Поделиться
Geokom Опубликовано 7 июля, 2007 Жалоба Поделиться Опубликовано 7 июля, 2007 У переменной MA1 всегда будет + (плюс), т.к. это Moving Average, т.е. Средняя Скользящая цены, а цена никогда не будет отрицательной (во был бы прикол - тебе платят за то, что ты покупаешь товар! ) На сколько я понял, имеется желание сделать индикатор направления движения СС (вверх или вниз). Об этом позднее мы будем говорить.... увы, сейчас сильно занят - как раз то время, когда день весь год кормит.... Уважаемый Liv! C Вашей помощью сделал первый индикатор:http://forum.masterforex-v.org/index.php?a...5799&st=60# Спасибо Первому учителю! вероятно, все это не оптимально, но это потом. Нужна также помощь для дальнейшего развития. Всем удачи! Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 7 июля, 2007 Автор Жалоба Поделиться Опубликовано 7 июля, 2007 .... сделал первый индикатор:Я очень этому рад! Желаю удачи и дальнейших успехов! Буду помогать, как смогу! Ссылка на комментарий Поделиться на другие сайты Поделиться
Geokom Опубликовано 8 июля, 2007 Жалоба Поделиться Опубликовано 8 июля, 2007 Я очень этому рад! Желаю удачи и дальнейших успехов! Буду помогать, как смогу! Liv, нужна помощь, сделал скрипт, http://forum.masterforex-v.org/index.php?a...=5799&st=61в LiteForexe работает, в других терминалах - нет, как такое может быть? Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 8 июля, 2007 Автор Жалоба Поделиться Опубликовано 8 июля, 2007 Liv, нужна помощь, сделал скрипт, http://forum.masterforex-v.org/index.php?a...=5799&st=61в LiteForexe работает, в других терминалах - нет, как такое может быть?Вообще-то, язык MQL был разработан для платформы MT4 и, разумеется, может быть использован только там. И если какой-то ДЦ имеет терминал, отличный от MetaTrader, то там, вполне возможно, советники/индикаторы/скрипты, написанные в MQL работать не будут. Ссылка на комментарий Поделиться на другие сайты Поделиться
Geokom Опубликовано 8 июля, 2007 Жалоба Поделиться Опубликовано 8 июля, 2007 Вообще-то, язык MQL был разработан для платформы MT4 и, разумеется, может быть использован только там. И если какой-то ДЦ имеет терминал, отличный от MetaTrader, то там, вполне возможно, советники/индикаторы/скрипты, написанные в MQL работать не будут. Да нет, ну ест-но везде МТ4, но в Lite работает , а в Finex - нет Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 8 июля, 2007 Автор Жалоба Поделиться Опубликовано 8 июля, 2007 Советую скачать МетаТрейдер с сайта производителя. Заметил следующую вещь: скаченные у ДЦ терминалы по разному отображают индикаторы... иногда совсем в обратную сторону...Очень подозреваю, что некоторые ДЦ специально изменяют терминал (он поставляется в исходных кодах и легко поддаётся модификации) для успешного "заваливания" трейдера. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vitar Опубликовано 10 июля, 2007 Жалоба Поделиться Опубликовано 10 июля, 2007 @Не обязательно запоминать полностью написание всех параметров функций, - достаточно запомнить только написание имени функции. Уже при написании имени функции редактор предложит вам список, из которого вы сможете выбрать нужное слово. Пишем её, выделяем и нажимаем F1. Откроется окно подсказки, где вы увидите полностью расписанную функцию со всеми параметрами.@ Понятно, как узнать совокупность параметров индикаторов, входящих в комплект МТ4. А как быть с пользовательскими индикаторами, которых там нет?В тексте индикаторов как правило, не написаны строки их параметрнов, и как же к ним обращаться при написании новых индикаторов?например совершенно замечательные индикаторы Юрика JMA JMACD JCFBaux Heiken Ashi www.Specia-list2007.narod.ru/_ind_.rar (в папке _include_ - файлы для правильной работы этих индикаторов, кот. нужно поместить в папку experts/include ) Станислав Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 14 июля, 2007 Автор Жалоба Поделиться Опубликовано 14 июля, 2007 Понятно, как узнать совокупность параметров индикаторов, входящих в комплект МТ4. А как быть с пользовательскими индикаторами, которых там нет?В тексте индикаторов как правило, не написаны строки их параметрнов, и как же к ним обращаться при написании новых индикаторов?например совершенно замечательные индикаторы Юрика JMA JMACD JCFBaux Heiken Ashi www.Specia-list2007.narod.ru/_ind_.rar (в папке _include_ - файлы для правильной работы этих индикаторов, кот. нужно поместить в папку experts/include ) Станислав Я бы назвал этот вопрос провокационным, т.к. ответ ты уже знаешь!...Но раз вопрос прозвучал, то нужно ответить... В основном это делается с помощью функции iCustom.Например:получение значения индикатора JMA:MQLdouble dlCurrentValue = iCustom(NULL,0,"JMA" ,0,0);Значения параметров этой функции простые:NULL - пишется, если не конкретизируется инструмент, иначе пишется символьное имя инструмента, например "GBPUSD".0 - если не конкретизируется таймфрейм, иначе пишется нужный таймфрейм, например 15 - 15-минутный таймфрейм."JMA" - имя используемого индикатора. Индикатор должен быть скомпиллирован, т.е. должен присутствовать файл "jma.ex4" (в Windows регистр букв не имеет значение). После этого параметра могут быть один или несколько параметров, кот. передаются в вызываемый индикатор. Передаваемые параметры должны соответствовать порядку объявления и типу внешних (extern) переменных индикатора. ВНИМАНИЕ! Не все индикаторы принимают параметры из этой функции. Например, я очень много промучался передавая параметры индикатору ZigZag, но выяснилось, что эти парметры не принимаются. В этом случае следует скомпиллировать индикатор с нужными вам параметрами.0 - линия индикатора. У используемого индикатора может быть несколько линий и здесь указывается номер линии по порядку начиная с 0 (всего у индикатора может быть 9 линий - от 0 до 8)0 - текущий бар (свеча). Номера баров (свечей) начинаются от нуля и увеличиваются с права на лево.Для себя я чаще делаю так (при наличии исходных кодов): выделяю индикатор в отдельную функцию и затем использую полчившийся массив в своих целях. Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 15 июля, 2007 Автор Жалоба Поделиться Опубликовано 15 июля, 2007 По просьбам, я забегу несколько вперёд и расскажу сегодня о том, как использовать виндоузовские DLL.Если у вас есть DLL, о которой вы всё знаете (какие функции экспортирует, какие параметры имеют эти функции), то её использование в вашем скрипте/индикаторе/советнике - очень простое дело! И как всегда, я буду показывать на примере. Здесь кусочек кода скрипта, с помощью которого я читал данные на своём сервере для использования.MQL#import "wininet.dll" int InternetAttemptConnect (int x); int InternetCloseHandle(int hInet); int InternetOpenA( string sAgent, int lAccessType, string sProxyName = "", string sProxyBypass = "", int lFlags = 0); int InternetOpenUrlA( int hInternetSession, string sUrl, string sHeaders = "", int lHeadersLength = 0, int lFlags = 0, int lContext = 0); int InternetReadFile( int hFile, int& sBuffer[], int lNumBytesToRead, int& lNumberOfBytesRead[]);#import int start() { if(!IsDllsAllowed()) { Alert("У вас выключено разрешение использовать DLL" ); return(0); } int rv = InternetAttemptConnect(0); if(rv != 0) { Alert("Нет соединения!" ); return(0); } int hInternetSession = InternetOpenA("Microsoft Internet Explorer" , 0, "", " ", 0); if(hInternetSession <= 0) { Alert("Не удаётся соединиться с Internet'ом" ); return(0); } int hURL = InternetOpenUrlA(hInternetSession, "http://forex.orotukan.ru/cgi-bin/connect.cgi" , "", 0, 0, 0); if(hURL <= 0) { Alert("Не удалось соединиться с адресом!" ); InternetCloseHandle(hInternetSession); return(0); } int cBuffer[256]; int dwBytesRead[1]; bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead); /* здесь я обрабатываю полученные данные в массиве cBuffer */ InternetCloseHandle(hInternetSession); return(0);}Как вы можете заметить, сначала идет описание импорта из DLL нужных мне функций, с обязательным указанием всех параметров и их типов. Обратите внимание, что в используемых функциях имеются параметры, передаваемые по ссылке:MQL...int& sBuffer[],...Знак амперсанда (&) как раз и указывает то, что этот параметр передаётся по ссылке, а не по значению. После полного описания импортируемых функций, их можно использовать в вашем модуле точно так же, как и обычные функции. Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 15 июля, 2007 Автор Жалоба Поделиться Опубликовано 15 июля, 2007 После некоторого отступления, вернёмся опять к нашим скользящим средним.Сейчас мы создадим простой индикатор флэта.Когда четыре СС разных периодов сближаются, то это говорит о возможном повороте тренда, но это может быть и флэт, особенно, когда эти четыре СС доржатся друг возле друга продолжительное время. Вот на этом и будет базироваться наш индикатор. Он будет иметь одну линию типа гистограммы:MQL#property indicator_separate_window#property indicator_buffers 1#property indicator_color1 White#property indicator_width1 2#property indicator_minimum 0#property indicator_maximum 10Как видите, я прописал размер отдельного окна с тем, чтобы величина нашего индикатора всегда была не более 1/10 совместного окна. Если индикатор не будет использоваться с другими индикаторами вместе, то можно выключить установки максимума и минимума окна и сделать окно индикатора узеньким.Для нашего индикатора мы будем использовать пять параметров - уровень флэта и четыре периода СС:MQLextern double УровеньФлэта=0.0003;extern int MA1=5;extern int MA2=12;extern int MA3=18;extern int MA4=21;//---- buffersdouble ExtMapBuffer1[];Уровень флэта подбирается на каждый таймфрейм самостоятельно. Он будет везде разным. И, возможно придётся и периоды подбирать....Наш индикатор будет гистограммой:MQLint init() { SetIndexStyle(0,DRAW_HISTOGRAM); SetIndexBuffer(0,ExtMapBuffer1); return(0);}И теперь расчётная часть:MQLint start() { int limit; int save_val=0; double valMA1, valMA2, valMA3, valMA4; 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++) { valMA1 = iMA(NULL,0,MA1,0,MODE_SMA,PRICE_CLOSE,i); valMA2 = iMA(NULL,0,MA2,0,MODE_SMA,PRICE_CLOSE,i); valMA3 = iMA(NULL,0,MA3,0,MODE_SMA,PRICE_CLOSE,i); valMA4 = iMA(NULL,0,MA4,0,MODE_SMA,PRICE_CLOSE,i); if ( MathAbs(valMA1-valMA2)<=УровеньФлэта && MathAbs(valMA1-valMA3)<=УровеньФлэта && MathAbs(valMA1-valMA4)<=УровеньФлэта ) save_val = 1; else save_val=0; ExtMapBuffer1 = save_val; } return(0);}Как видите - тут всё просто: на текущем баре расчитываются СС разных периодов и разности этих значений сравниваются со значением переменной УровеньФлэта. Если значение не правышает уровень, то индикатору назначается 1, иначе - 0. Всё просто! Ссылка на комментарий Поделиться на другие сайты Поделиться
Liv Опубликовано 10 августа, 2007 Автор Жалоба Поделиться Опубликовано 10 августа, 2007 Приветствую!Пока есть немного времени я хочу поговорить о ещё одной возможности индикации флэта. У RSI есть одна интересная особенность: чем больше волатильность, тем меньше мгновенное значение движения RSI. И, соответственно, наоборот.... что даёт нам возможность получить индикатор мгновенного флэта. Итак, начнём... Это будет просто вывод сообщения о том, что "Индикатор мгновенного флэта" показывет вероятность флэта.Будут пять внешних параметров:[MQL]extern double РазмерФлэта=3.0; // проверочная значение шага RSIextern int ПериодФлэта=10; // период для расчёта RSIextern color ЦветФлэта=Yellow; // цвет вывода надписиextern int КоординатаX=400; // координаты вывода надписиextern int КоординатаY=0;// нам нужна одна переменная, которая бы хранила прошлое значениеstatic double OldValue;[/MQL]Собственно никаких идикаторов нет... просто будет выводиться надпись о том, что RSI сигналит о возможном флэте. Создаём эту надпись и временно убираем с экрана:[MQL]int init() { ObjectCreate("FlatSig",OBJ_LABEL,0,0,0); ObjectSet("FlatSig",OBJPROP_XDISTANCE,1000); ObjectSet("FlatSig",OBJPROP_YDISTANCE,1000); ObjectSetText("FlatSig","ФЛЭТ!",14,"Arial Cyr",ЦветФлэта); return(0);} int deinit() { ObjectDelete("FlatSig"); ObjectDelete("HalfLine"); Comment(" "); return(0);}// эта функция показывает надписьvoid Make() { ObjectSet("FlatSig",OBJPROP_XDISTANCE,КоординатаX); ObjectSet("FlatSig",OBJPROP_YDISTANCE,КоординатаY);}// эта функция прячет надписьvoid Del() { ObjectSet("FlatSig",OBJPROP_XDISTANCE,1000); ObjectSet("FlatSig",OBJPROP_YDISTANCE,1000);} int start() { double NewValue = iRSI(NULL,0,ПериодФлэта,PRICE_CLOSE,0); double CurFlat = MathAbs(NewValue - OldValue); Comment("Флэт="+ CurFlat); if (CurFlat > РазмерФлэта || CurFlat == 0) { Make(); } else { Del(); } OldValue = NewValue; }[/MQL] Вот, собственно, и всё... При подозрении на флэт будет выводиться надпись "ФЛЭТ!", а в месте коментария будет выведено расчётное значение. Для каждого инструмента, таймфрэйма и ДЦ значения мгновенного флэта будут разные и тут нужно поработать с индикатором, чтобы найти нужные значения. Но, как я думаю, это стоит того.... Я широко пользуюсь этим индикатором. Как только начинает мигать (или горит постоянно) надпись "ФЛЭТ!", значит будет флэт. Если сначала уровень был высок, затем снизился (надпись исчезла), а потом опять появилась - сужающийся флэт,.... если сначала высокий, затем низкий, затем опять высокий, то тут можно ждать расширяющегося флэта...Вариантов очень много, но, к сожалению, на каждом инструменте, таймфрэйме и ДЦ они разные. Ссылка на комментарий Поделиться на другие сайты Поделиться
putnik Опубликовано 3 октября, 2007 Жалоба Поделиться Опубликовано 3 октября, 2007 Здравствуйте.Я все прочел но видно не дано быть писателем индикаторов.Не все могут.Но один индикатор хотелось бы иметь.Может кто и напишет. Идея такая."Я проверял не обман ли упровляемость рынка просто"Провел по паре EURUSD по вершинам линии и они совпали во многих местах в2,00минутки на терминале лайта.Я даже чутьчуть с этого поимел потом тренд пошел в верх.хотел индикатор но не мое. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения