mobidik Опубликовано 30 декабря, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 декабря, 2014 DmitriyFXА стрелки на каком баре появляются? Быть может не на нулевом, тогда пробуй первый, второй, третий. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DmitriyFX Опубликовано 30 декабря, 2014 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 декабря, 2014 DmitriyFXА стрелки на каком баре появляются? Быть может не на нулевом, тогда пробуй первый, второй, третий. Пробовал 0 и 1. Появляется, поидее, на нулевом.А всё, проблему решил. Оказалось, параметры не так ввёл. Изменено 30 декабря, 2014 пользователем DmitriyFX Ссылка на сообщение Поделиться на другие сайты More sharing options...
XIIIth Опубликовано 3 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2015 Всем привет!!! Давно уже посматриваю на страничку Спойлер macd-ichimoku.narod.ru - ну и вот в праздничные дни появилось время для того чтобы попробовать самому написать сие чудо!!!Начнем с того что каких либо знаний в программировании нет, ну кроме паскаль ++ в мохнатом 10 классе... Решил я значит сесть и попробовать прочитать справочник по MQL - но увидев там 4к страниц понял что лучше оперативно пользоваться справкой.... и решать проблемы поступательными движениями... Нашел видео-урок по внедрению уже готовых сторонних индикаторов в код светника... Но и тут оказалось не все так просто, уроки эти мягко сказать староваты.Скачал 5й терминал от альпари, дабы функция тестирования советников и их оптимизации там более привлекательна чем на 4м, запустил метаэдитор и начал писать.... Что не новая закорючка - так компилятор ругается, вобщем добрался я до исполнения сделок и тут сел окончательно... то что было ранее представлено OP_BUY или OP_SELL уже не воспринимаются... ,но с этим я разобрался ORDER_TYPE_BUY. Вопрос встал очень резко с Ask и Bid - не подсвечиваются. Так же ругается на Volume и OrderSend.В общем такие вот пирожки... Голова уже квадратная. Просьба сильно не осуждать, поскольку только-только в самом начале пути... Из справки узнал что встроенные индикаторы можно подключать уже зарезервированными словами типа iIchimoku. Там возвращается какой то хэндл.... (кароче лес дремучий)Ну и приложение сего мучения.... Буду очень признателен если направите в нужное русло!!! PS если кому то интересно с какого видео урока пробовал учиться писать - Спойлер youtube.com/watch?v=3texhdfseR8&list=PLn1zelyYPatNAVcYDuMSd1BlzhRd51aH7&index=15 Спойлер //+------------------------------------------------------------------+//| EA_MACD+Ichimoku.mq5 |//| XIIIth |//| //+------------------------------------------------------------------+#property copyright "XIIIth"#property link #property version "1.00"// Параметры из индикатора Ichimokuinput int Tenkan_sen=9;input int Kijun_sen=26;input int Senkou_Span_B=52;// Параметры из индикатора MACDinput int Fast_EMA_period=12;input int Slow_EMA_period=26;input int Signal_SMA_period=9;// Нулевой уровень индикатора MACDinput int Level0=0;// Параметры Тейк Профит и Стоп Лоссinput int TakeProfit=10;input int StopLoss=10;// Выставление лота при совершении сделкиinput double Lot=0.1;// Магический номерinput int Magic=12345;// Ввод переменных значений индикатора MACDdouble Histo_MACD0,Histo_MACD1;// Ввод переменных значений индикатора Ichimokudouble Line_Tenkan,Line_Kijun;//+------------------------------------------------------------------+//| Expert initialization function |//+------------------------------------------------------------------+int OnInit() { // Приводим значения пунктов к единичному виду double tp,sl; // Значение в старых пунктах для 4х значных брокеров if (_Digits==2||_Digits==4) {tp=TakeProfit*_Point;sl=StopLoss*_Point;} // Значение в новых пунктах для 5ти значных брокеров if (_Digits==3||_Digits==5) {tp=TakeProfit*10*_Point;sl=StopLoss*10*_Point;} // Переносим индикаторы в советник /* Здесь Histo_MACD0 и Histo_MACD1 - один и тот же бар в индикаторе MACD Только Histo_MACD0 - значение индикатора на предпоследней закрытой свече (с индексом 2), а Histo_MACD1 - значение индикатора на последней закрытой свече (с индексом 1) */ Histo_MACD0=iCustom(NULL,0,"MACD",Fast_EMA_period,Slow_EMA_period,Signal_SMA_period,0,2); Histo_MACD1=iCustom(NULL,0,"MACD",Fast_EMA_period,Slow_EMA_period,Signal_SMA_period,0,1); Line_Tenkan=iCustom(NULL,0,"Ichimoku",Tenkan_sen,Kijun_sen,Senkou_Span_B,0,1); Line_Kijun=iCustom(NULL,0,"Ichimoku",Tenkan_sen,Kijun_sen,Senkou_Span_B,1,1); /* Тут перед выпослением условий должно выполниться еще одно что каждый постапаюший тик относится к последней свече... if (OrdersTotal()==0&&Volume [0]==1) */ if (OrdersTotal()==0&&Volume [0]==1) { if (Histo_MACD1>Level0&&Histo_MACD0Line_Kijun&&Line_Tenkan==Line_Kijun) {OrderSend(Symbol(),ORDER_TYPE_BUY,Lot,Ask,200,Ask-sl,Ask+tp,NULL,Magic,0,CLR_NONE)} /*Сюда передаем символ инструмента, тип ордера, объем,цена покупки, проскальзывание, стоп лосс, тейк профит, комментарий,магический номер, дата экспирации и цвет*/ if (Histo_MACD1Level0&&Line_Tenkan } return(INIT_SUCCEEDED); } Извиняюсь что не в тему немного, но на сколько я понял что уже особой разницы нет в кодировании для 5й и 4й версии... Ссылка на сообщение Поделиться на другие сайты More sharing options...
baksik99 Опубликовано 3 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2015 Добрый день, и с новым годом всех!_____________Помогите, начал писать советник по стрелочному индикатору, помогите подправить код, у меня почему то открывает сделки только на BUY, на SELL сделок нет, + открывает позиции как то не по правилам не там где стрелочки, по ходу от балды, помогите кто чем может! И Если не трудно добавить функцию закрытия позиции при появлении противоположной стрелки и открытия новой по направлению стрелки.) Индикатор MA_Crossover_SignalЭксперт Strelo123Спасибо заранее MA_Crossover_Signal.mq4Strelo123.mq4 Изменено 3 января, 2015 пользователем baksik99 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 3 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2015 XIIIth Вам надо перенести код в функцию OnTick() в ОнИнит - только инициализация, т.е. расчёт пунктов и др. параметры счёта/символа. Объём надо узнавать для какого-нибудь бара в Вашем случае - Volume[0] == 1, так Вы узнаете, что пришёл новый бар, но это иногда глючит - лучше не задавать таких жёстких условий - бары будет пропускать.МКЛ5 получше МКЛ4, но МТ5 распространён значительно хуже. Это всё-равно, что сесть на боллид F1, но при этом иметь возможность покататься только на спец. трассе...baksik99 ПробуйStrelo123.mq4 Изменено 3 января, 2015 пользователем 0ll 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
baksik99 Опубликовано 3 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2015 0ll Открывает щас, только открывает сразу 2 ордера. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 3 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2015 baksik99 Возьми лучше моего бота для проверки стрелочных индюков, а то в твоём чего-то лень разбираться.Сам мой код посмотри - вроде правильно работает.0ll_e_Check_Indi_1.mq4 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
baksik99 Опубликовано 3 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2015 baksik99 Возьми лучше моего бота для проверки стрелочных индюков, а то в твоём чего-то лень разбираться.Сам мой код посмотри - вроде правильно работает. Спасибо, щас буду разбираться! Ссылка на сообщение Поделиться на другие сайты More sharing options...
XIIIth Опубликовано 3 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 января, 2015 0ll Спасибо за ответ. На сколько я понял метаквоты уже изменили язык в метатрейдере 4м, и максимально приблизили к 5му. Почему именно выбрал 5й терминал - в силу специфики прогонов советника в тестере появилось куча дополнительной информации в виде различных графиков, что визуально уже помогает подобрать определенные параметры для советника. только из-за этого.Если уж не получится скомпилить в 4м то подправить то всегда можно :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Strong-Tezis Опубликовано 4 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2015 Приветствую. Ребят помогите пожалуйста. Всю ночь не спал бился с метаэдитором, не осилил. Время уже почти обед, опускаются руки. Очень нужный индикатор, вот нашел его вчера. Индикатор строит горизонтальные линии по круглым ценам. Исправьте пожалуйста, что бы он строил до текущего бара, а не до конца графика.p.s. всю ночь менял значения OBJ_HLINE на OBJ_TREND. писал Time[0]. Но упускаю наверное мелочь какую то. Помогите пожалуйста. Добавлено: 04-01-2015 10:07:52Не могу понять где в коде прописывать первую точку OBJ_TREND, сейчас одну точку прописал и получился штрих. как выровнять линии???? if (nm=="") nm=DoubleToStr(Time[0], 0); if (p1 if (ObjectFind(nm) ObjectSet(nm, OBJPROP_RAY,0);Setka.mq4 Изменено 4 января, 2015 пользователем Strong-Tezis Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2015 У Вас ошибка в этой строке: double Max=iHigh(0,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,iBars(0,PERIOD_MN1),0));поэтому и не работает. исправлю - выложу. позже 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Strong-Tezis Опубликовано 4 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2015 Спасибо Вам большое. Вы не могли бы потом объяснить мою ошибку. Хочу хоть немного научиться. Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 4 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2015 Привет всем!Пишу сейчас советник, мучаюсь над логикойС помощью статической переменной беру показания индикаторов и высчитываю уровни открытия ордеров раз в 4 часа Спойлер if (Hour() >= 00 && Hour() if (Hour() >= 04 && Hour() if (Hour() >= 08 && Hour() if (Hour() >= 12 && Hour() if (Hour() >= 16 && Hour() if (Hour() >= 20 ) time = 16; static int flag; static int newBar; if (newBar != time) { newBar = time; flag = 1; } и если if (flag == 1){(снимаем показания индикаторов и считаем уровни возможного открытия позиций)}Но так же мне нужно отслеживать положение цены относительно этих уровней на каждом тике (чтобы удалять отложки вовремя, например)Сейчас код имеет такой вид:double a,b;if (a>b) deletesellstop();if (flag == 1){(снимаем показания индикаторов и считаем уровни возможного открытия позиций)}Вопрос такой: будут ли переменные a и b обнуляться при каждом тике, не сохраняя показаний индикатора, получаемых раз в 4 часа?и если да, решит ли проблему приведение кода к такому виду:if (flag == 1){double a = (вычисляем); double b = (вычисляем);} if (a>b) deletesellstop(); Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2015 oleguitar Если объявить переменные внутри { }, то и область их действия будет внутри скобок. Объявляй глобально или статик на уровне функции.Вычисляй значения индюков внутри этого (а то у Вас вычисление Н4 какие-то сложные): static datetime newBar; if (newBar != iTime(NULL,PERIOD_H4,0)) { newBar = iTime(NULL,PERIOD_H4,0); a = (вычисляем); b = (вычисляем); }В этом случае использовать параметры а и б можно в любом месте. Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 4 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2015 то есть можно показания индюков записать в переменную типа static?static double a = (вычисляем) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2015 Ошибка самая элементарная - символ не 0, а NULL.Но я ещё много там поправил:- перенес код в Инит - зачем все эти флаги для одноразовой отрисовки уровней? Но линии двигаться не будут с новым баром. если хочешь, чтоб на каждом баре двигались надо переделывать.- удаление линий переделал. как было у Вас делать нельзя. (лично с моего графика стер линии, нанесенные мной вручную)- теперь рисует не от 0 а от исторического минимума - меньше графических объектов - лучше для терминала. Setka.mq4 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2015 oleguitar Уточняю ещё раз: если статик, то объявляем на уровне модуля!!!, а внутри if { вычисляем }Читайте в справке "область видимости переменных". Ссылка на сообщение Поделиться на другие сайты More sharing options...
Konstebl Опубликовано 4 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2015 Вычисляй значения индюков внутри этого (а то у Вас вычисление Н4 какие-то сложные): static datetime newBar; if (newBar != iTime(NULL,PERIOD_H4,0)) { newBar = iTime(NULL,PERIOD_H4,0); a = (вычисляем); b = (вычисляем); }В этом случае использовать параметры а и б можно в любом месте. Так у Вас и цена будет высчитываться раз в 4 часа , а не на каждом тике,как нужно! Изменено 4 января, 2015 пользователем Konstebl Ссылка на сообщение Поделиться на другие сайты More sharing options...
Strong-Tezis Опубликовано 4 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2015 Спасибо. код не мой, его два программиста писали. Сейчас не компилирует, а после удаления ошибок виснет терминал. Вы не могли бы не менять сильно код, только подправить прошу Вас. Мне нужен свободный участок справа на графике, нужно просто что бы горизонтальные линии не шли до конца, а только до текущей свечи. уже голова взрывается, не могу такие казалось бы простые вещи сделать(( Я сделал что бы не шли линии до конца, так они под углом стали. Помогите пожалуйста. Добавлено: 04-01-2015 15:33:23зачеркнул красными крестиками, то что мешает.Добавлено: 04-01-2015 15:41:46В первом посте исходник (мною не испорченный). как я понял там в коде OBJ_HLINE(не имеет привязки по времени) нужно заменить на OBJ_TREND тогда получим что нужны две точки для привязки. Одну точку я кое как менял, а вторую не понимаю как((Когда менял получался курсив вместо горизонтальных линий. Но зато курсив до текущей свечи :)) :)) Изменено 4 января, 2015 пользователем Strong-Tezis Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2015 У меня метаедитор вер.1035. Всё компилируется и работает и линий справа не рисует. Кстати исправил ошибочку - перекачай.Вы мной подправленный индюк скомпилировать не можете? (начал сомневаться - см скрин)Держите компил билд МТ 765. Setka.mq4Setka.ex4Test1.png 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2015 Так у Вас и цена будет высчитываться раз в 4 часа , а не на каждом тике,как нужно!? не понял. поясните Вашу мысль, "цена" - это что? Бид/Аск? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Strong-Tezis Опубликовано 4 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2015 Спасибо Вам огромное за помощь и за то что всегда поддерживаете. Кстати мне пошло на пользу, что я сначала не разобрался)) Сделал сам, что хотел)) Оцените? (учтите я очень слаб в mql)вот что правил\ if (ObjectFind(nm) ObjectSet(nm, OBJPROP_BACK, 1); ObjectSet(nm, OBJPROP_RAY, 0); Добавлено: 04-01-2015 17:23:35Вот что получилось))Setka.mq4 Изменено 4 января, 2015 пользователем Strong-Tezis 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Konstebl Опубликовано 4 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 января, 2015 Но так же мне нужно отслеживать положение цены относительно этих уровней на каждом тике (чтобы удалять отложки вовремя, например) Какую цену он имеет ввиду я не знаю.Я предположил,что a -- это значения индикаторов (раз в 4-е часа)b -- это значение текущей цены (наверно Ask/Bid)или нет? Изменено 4 января, 2015 пользователем Konstebl Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 5 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 января, 2015 Но так же мне нужно отслеживать положение цены относительно этих уровней на каждом тике (чтобы удалять отложки вовремя, например) Какую цену он имеет ввиду я не знаю.Я предположил,что a -- это значения индикаторов (раз в 4-е часа)b -- это значение текущей цены (наверно Ask/Bid)или нет? Верно, только а и б наоборот Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 5 января, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 января, 2015 Значит я не въехал... Я думал, что а и б это значения индикатора (может на разных барах). Если из них что-то является ценой и нуждается в проверке на каждом тике, то, естественно, эту проверку надо выносить из блока if (Н4). Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти