Sany2912 Опубликовано 1 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 апреля, 2015 Oll , спасибо за помощь!!! Но тестировать все равно не возможно, даже, за прошлую неделю - тормозит ужасно! Только, вот, почему-то, другие советники хорошо тестируются, при любых условиях... ~x( Ссылка на сообщение Поделиться на другие сайты More sharing options...
oleguitar Опубликовано 1 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 апреля, 2015 Убрал все лишние переменные типа "string" из индикаторов, ошибка пропалаВот только ордера не открываются все равно Цитата Вы определили 2 буфера://---- 2 индикаторных буффера использованы для счёта SetIndexBuffer(0, buf_1); // 0 SetIndexBuffer(1, buf_2); // 1Вы их и читаете на 1-баре Вот это не совсем понял... Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 1 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 апреля, 2015 Вот это не совсем понял...Вы спросили: "А я хоть правильно проверяю буфер индикатора? Больше нуля он должен быть, как я понимаю..." - я ответил: правильно - 2 буфера №0 и №1. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ttomas Опубликовано 1 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 апреля, 2015 Sany2912, будьте более внимательный при написании советников. Во первых в строках 57-62 не стоит использовать функцию iCustom лучше сразу взять функции iBand и iStohastic, во вторых если что то зависает то либо много математических расчетов, либо косяк в цикле. В вашем случае 99 и 110 строки, Нарушена логика работы с оператором for. Строки должны выглядеть for (int q = OrdersTotal()-1; q>=0; q--). 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 2 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 апреля, 2015 Точно, Ttomas !!!! цикл был не правильный!!!! ё-маё)))) Спасибо, друг!!!!!! :) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гриня Опубликовано 2 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 апреля, 2015 Действительно в уроке Сергей (xbms) в конце упомянул что необходимо в условия добавить ещё индикатор , например RSI. Чтоб убедиться что цена двинулась от границ канала TMA и одновременно из зон перекупленности или перепроданности индикатора RSI. Вот строка кода с условиями как добавить RSI в неё ??? if (Bid >= PriceHight && CountSell() == 0) Где указать что будут использоваться оба индикатора??? Вам нужно описать РСИ: rsi = iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,1); и в условие на вход дописать:if (Bid >= PriceHight && rci && CountSell() == 0) ...Вместо 70 можно писать RSI_Up и вывести его во внешние настройки (вместе с RSI_Down) Добрый день и спасибо огромное Вам 0ll . По аналогии могу вписать в код советника и "СТОХАСТИК" ???так же объявив внешниеextern int stohastic_period=14;extern int stohastic_Up=80;extern int stohastic_Down=20; нужен ли ? double StochasticBuffer[];объявляется стохастик так ??? stohastic=iStochastic(NULL,0,stohastic_period,3,3,MODE_SMA,0,MODE_MAIN,shift);и в условия вставить так ??? if (Bid >= PriceHight && stohastic && CountSell() == 0) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 2 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 апреля, 2015 нужен ли ? double StochasticBuffer[];объявляется стохастик так ??? stohastic=iStochastic(NULL,0,stohastic_period,3,3,MODE_SMA,0,MODE_MAIN,shift);и в условия вставить так ??? if (Bid >= PriceHight && stohastic && CountSell() == 0)Зачем Вам StochasticBuffer[]? - где Вы это нашли?про объявление стохастика лучше смотрите справку.условия примерно правильно - я-ж не знаю как Вы хотите стоха использовать... Ссылка на сообщение Поделиться на другие сайты More sharing options...
baksik99 Опубликовано 2 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 апреля, 2015 Знающие помогите, как сделать так чтобы этот бот открывал только один ордер на 1 сигнал.Шас он так работает....допустим сигнал на сел....он открывает ордер на сел при достижении ТП или СЛ он опять открывает на сел....как сделать чтоб он ждал сигнал на бай...а не лепил дальше сеЛ!? Думаю понятно объяснил))) e-parabolic-2.0.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гриня Опубликовано 2 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 апреля, 2015 условия примерно правильно - я-ж не знаю как Вы хотите стоха использовать... Спасибо огромное Вам 0ll за ответ, это в продолжение разговора о советнике которого в уроке №3 Сергей (xbms) преподавал. Работа в канале ТМА, и в подтверждении входа дополнительно убедиться что цена двинулась от границ канала TMA и одновременно из зон перекупленности или перепроданности стохастик . Но не базовый, а планирую реализовать с ОБЯЗАТЕЛЬНЫМ УСЛОВИЕМ, пересечениями зелёной и красной между собой, линий стохастика.Если подскажите как реализовать в коде буду признателен. Для наглядности пересечения отметил на приложенном фото.Добавлено: 03-04-2015 09:30:19 условия примерно правильно - я-ж не знаю как Вы хотите стоха использовать... Спасибо огромное Вам 0ll за ответ, это в продолжение разговора о советнике которого в уроке №3 Сергей (xbms) преподавал. Работа в канале ТМА, и в подтверждении входа дополнительно убедиться что цена двинулась от границ канала TMA и одновременно из зон перекупленности или перепроданности стохастик . Но не базовый, а планирую реализовать с ОБЯЗАТЕЛЬНЫМ УСЛОВИЕМ, пересечениями зелёной и красной между собой, линий стохастика.Если подскажите как реализовать в коде буду признателен. Для наглядности пересечения отметил на приложенном фото. При компиляции под новым билдом, кода советника из №3 урока, выходят ошибки 'Sumbol' - function not defined implicit conversion from 'number' to 'string' 'i' - undeclared identifier 'Sumbol' - function not defined implicit conversion from 'number' to 'string' 'Sumbol' - function not defined implicit conversion from 'number' to 'string' 4 error(s), 3 warning(s) Код советника прилагаю, что я упустил?_ЛИНИЙ_СТОХАСТИКА.JPGtest_3.mq4 Изменено 3 апреля, 2015 пользователем Гриня Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 3 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 апреля, 2015 Гриня Попробуйте вместо Sumbol - Symbol, и i первый раз сделайте int i 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
formula Опубликовано 4 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 апреля, 2015 Помогите пожалуйста разобраться - как работает OrderSend ? if(OrdersTotal()==0) { if(!Vkl_TP_SL) { if(Fast_MA_2Slow_MA_1) { if(!OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0,NULL,Magic,0,clrBlue)) Print("Ошибка окрытия BUY: ",GetLastError()); } if(Fast_MA_2>Slow_MA_2&&Fast_MA_1 { if(!OrderSend(Symbol(),OP_SELL,Lots,Bid,30,0,0,NULL,Magic,0,clrRed)) Print("Ошибка окрытия SELL: ",GetLastError()); } } Не пойму применения "отрицания ! ". Во первых int OrderSend(), и еще " логическое отрицание (!) применимо только к булевым переменным". Запутался. в упор не понимаю. Везде " Ошибка открытия... " Но этот код работает - проверял на тестере. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 апреля, 2015 formula булева переменная имеет значение int (4 байта) Цитата из справочной системы: Цитата Необходимо отметить, что в логических выражениях допустимо использовать вместо типа bool другие целые или вещественные типы или выражения этих типов, компилятор не выдаст ошибки. В таком случае значение ноль будет интерпретировано как false, а все остальные значения как true это значит, что когда ордер успешно размещён МТ возвращает № тикета > 0 - это true, НО в случае ошибки (в реальной работе, а не в тестере) будет возвращен -1, т.е. тоже true, ибо только 0 - false. В приведённом примере обработки ошибки по сути нет - вывод сообщения не считается, по этому всё работает, при серьёзном подходе к обработке ошибок открытия так делать нельзя! 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гриня Опубликовано 4 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 апреля, 2015 Вопрос: достаточно ли такого указания переменной? Для Ask варианта также modify1 определять или уже нужно modify2?Тоже касается и переменных OrderSelect, OrderDelete, OrderClose, OrderSend ...Молодец, сам разобрался! Достаточно одной переменной на все функции, возвращающие true/false. Низкий поклон Вам 0ll за доброту.И за пояснения. В коде осталось если ещё ошибки return value of 'OrderModify' should be checked , прописывая bool modify1= Выходит ошибка что уже объявлена 'modify1' - variable already defined ,если ничего не прописать то ошибки не исчезнут при компиляции Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 4 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 4 апреля, 2015 В коде осталось если ещё ошибки return value of 'OrderModify' should be checked , прописывая bool modify1= Выходит ошибка что уже объявлена 'modify1' - variable already defined ,если ничего не прописать то ошибки не исчезнут при компиляцииНе понял... это вопрос? если всё-таки вопрос, то modify1 можно объявлять один раз, а потом пользоваться без объявления (если объявлена глобально). Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гриня Опубликовано 5 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 апреля, 2015 В коде осталось если ещё ошибки return value of 'OrderModify' should be checked , прописывая bool modify1= Выходит ошибка что уже объявлена 'modify1' - variable already defined ,если ничего не прописать то ошибки не исчезнут при компиляцииНе понял... это вопрос? если всё-таки вопрос, то modify1 можно объявлять один раз, а потом пользоваться без объявления (если объявлена глобально). Похоже не правильно объявил потому что остались предупреждения после компиляции. И ошибки 'HighesBuffer' - invalid array access 'LowesBuffer' - invalid array access что исправить? если есть приведите пример кода для наглядности ,пожалуйста.глобальная_переменная2.JPG Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 5 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 апреля, 2015 Гриня Массивы объявлены как динамические (безразмерные) которые перед употреблением нужно инициализировать и определить размерность (видимо это не сделано).По поводу замечаний о проверке возвращаемого значения ф-циями ОрдерМодифи и ОрдерКлоуз - в чём проблема? Вы же объявили переменную modifi1, ну и присваивайте ей значения, возвращаемые этими функциями. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гриня Опубликовано 6 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2015 Гриня Массивы объявлены как динамические (безразмерные) которые перед употреблением нужно инициализировать и определить размерность (видимо это не сделано).По поводу замечаний о проверке возвращаемого значения ф-циями ОрдерМодифи и ОрдерКлоуз - в чём проблема? Вы же объявили переменную modifi1, ну и присваивайте ей значения, возвращаемые этими функциями. Здравствуйте 0ll . Спасибо за пояснения! Достаточно ли, после объявления глобальной, такого решения ??? modify1=OrderModify(ticket2, OrderOpenPrice(), SL, TP, 0);Я чтоб не путаться в следующий раз попрошу уточнения какие варианты наиболее грамотное решение?Существуют решения следующие:bool select1=OrderSelect.......... bool delete1=OrderDelete.......... bool close1=OrderClose.......... bool modify1=OrderModify.......... int send1=OrderSend.......... bool OrdSellMod = OrderModify(ticket,OrderOpenPrice(),SLSell,0,0);bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0);bool sel=OrderSelect(tic,SELECT_BY_TICKET);также Вы советуете bool res = OrderModify())Добавлено: 06-04-2015 08:39:43Домашнее задание по уроку №3 работа в канале по индикатору ТМА. Присоединяюсь к сообщениям от ar7319 и Deymos что советник пропускает входы в сделку при наличии условий !!! Недочёты : 1)Почему-то открывает только одну сделку. При закрытии ордера по TP, SL, или у противоположной границы -- далее тишина. Не входит в противоположную сторону при наличии условий Например у верхней границы сов поставил SELL. Но цена ушла вверх и сработал SL. Все, ордеров нет, цена выше PriceHigh канала, т.е. условия для открытия нового SELL. За сутки всего 8 сделок на 5-ти мин. остальные пропустил как "СЛЕПОЙ"Фото прилагаю.Способы лечения: частота проверок условий входа в сделку, слишком простой код условий, блок кода для отслеживания приближения цены к верхней или нижней границе канала. Возможно нужно во внешние переменные вывести и указать параметр в процентах. Приближение к границам канала.Что ВЫ бы применили на практике ??? Чтоб он начал торговать по хорошему.123.JPG Изменено 6 апреля, 2015 пользователем Гриня Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 6 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2015 Гриня Вы очень напряжены. если Вы никак не используете возвращаемое значение от ф-ций типа ОрдерМодифи, то можете вообще ничего не присваивать - компилятор выдаст предупреждение, но сова будет работать. По поводу Вашего списка вариантов - используйте любой. Я иногда и таким пользуюсь: if (!OrderSelect(no, SELECT_BY_POS, MODE_TRADES)) continue;По поводу пропуска сделок. Я ранее писал, что xbms оставил в коде простенькие ошибки - для самостоятельного поиска. Так же неоднократно писал о перерисовке ТМА на глубину 2*Полупериода. Ставьте на тот-же график индикатор КС с тем-же периодом (он не рисует) и смотрите на истории где был канал ТМА (примерно) если-бы не перерисовался и была-ли там сделка. Ссылка на сообщение Поделиться на другие сайты More sharing options...
fintech Опубликовано 6 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2015 Как написать функцию которая считает количество баров с момент открытия ордера. ордер единственные.Например:поступил сигналоткрыли ордерчерез N баров ордер закрыли. (N - внешняя переменная) как написать функцию возвращающую количество баров с момента открытия ордера. (не дней, если на Д1 графике) а именно баров истории (т.к. есть выходные и неторговые дни) Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 6 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 6 апреля, 2015 fintech самое простое - узнать номер бара (= количество) по дате открытия, напримерint barcount = iBarShift(NULL,мой_PERIOD,OrderOpenTime()); Ссылка на сообщение Поделиться на другие сайты More sharing options...
fintech Опубликовано 7 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 апреля, 2015 Попробую, но тогда нужно какую-то функцию, которая будет определять OrderOpenTime() для открытого ордера (он будет единственный открытый для данного Magic) и возвращать значение OrderOpenTime() для подстановки в данную функцию, приведённую вами. как ее лучше написать ? Изменено 7 апреля, 2015 пользователем fintech Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 7 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 апреля, 2015 Тут вариантов ещё больше. Можно при открытии ордера запоминать дату/времяили выбрать ордер по магику и тогда ОрдерОпенТайм будет работать. Ссылка на сообщение Поделиться на другие сайты More sharing options...
mobidik Опубликовано 7 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 апреля, 2015 Здравствуйте! Подскажите пожалуйста как сделать ограничение на количество открываемых ордеров (например, в серии не более 10 шт.)??? (это из урока №4) Не знаю как в уроке сказано, а так, в настройках указать параметр: extern int MaxOrders = 10;затем: if (Ваше условие на открытие ордера) { if (MaxOrders>OrdersTotal()) { ваше действие } } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sany2912 Опубликовано 7 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 апреля, 2015 mobidik , спасибо! :))):) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Гриня Опубликовано 7 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 7 апреля, 2015 Так же неоднократно писал о перерисовке ТМА на глубину 2*Полупериода. Ставьте на тот-же график индикатор КС с тем-же периодом (он не рисует) и смотрите на истории где был канал ТМА (примерно) если-бы не перерисовался и была-ли там сделка. Доброго вечера 0ll , пусть ТМА рисует не корректно,но как объяснить сделки по ценам которые там не гуляли !!! Если судить по тестированию нашего советника из урока №3.20 мая 2013 две сделки, а на графике цена на много выше,мы не могли войти там в сделку. фото приложил)))Второй момент сделка №1 и №2 закрылась по цене 1,29417 и 1,29864, а хай этого дня вообще не поднимался выше 1,29006. Фото приложил , архив котировок брокера Фибо групп. Понимаю что это всего лишь видеоролик где xbms учит нас программированию,но цены несуществующие :-?Добавлено: 07-04-2015 17:11:55Не нарушается ли логика в последовательности действий ???Если в коде указанны блок продаж Sell , потом блок покупок Buy . Потом блоки закрытия. В фото приведённом постом выше, мы одновременно находились в сделке и Buy и Sell по Евро Доллару.Урок_№3_44.46_МИНУТ_.jpgКОТИРОВКИ.JPGtest3.3.mq4 Изменено 7 апреля, 2015 пользователем Гриня Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти