0ll Опубликовано 12 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 марта, 2017 Сигнал №1 (пересечение средних) не может действовать полгода? у него должен быть срок действия, например 15 мин.Вводим переменную datetime dtvalid1 = 0;if ( cross_ma() ) dtvalid1 = TimeCurrent() + 15*60; - В итоге в dtvalid1 записано время окончания действия 1 сигнала.Следующая проверка в течении действия 1 сигнала ищем сигнал 2 и если нашли - открываем сделку:if ( TimeCurrent() { if ( find_signal2() ) { if ( open_order() ) dtvalid1 = 0; } - если ордер открыли переменную обнулили.}else dtvalid1 = 0; - окончание действия 1 сигнала - обнуляем переменную валидности.можно сделать и большее кол-во сигналов по аналогичной схеме 5 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 13 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 марта, 2017 Здравствуйте, появилась необходимость использование SMMA (smoothed moving average) на нестандартном таймфрейме т.е. сделать то же что делает iMA только для ценового ряда из моего массива цен. Все мои попытки разобраться с тем ка считается SMMA используя материалы опубликованные на сервере Metaquotes и исходник Custom Moving average.mq4 к положительному результату не привели. Подскажите как рассчитать значение SMMA (к примеру 5, close) в ручную или любой способ расчета для ценового ряда из моего массива Здравствуйте! Думаю вот здесь то, что Вам нужно. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Roman 13 Опубликовано 13 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 марта, 2017 Извините а как сигнал может действовать полгода, если после пересечения средних сразу сработает Buy или Sell и откроется ордер ? И не будет ни какого ожидания. Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 13 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 марта, 2017 Цитата Извините а как сигнал может действовать полгода, если после пересечения средних сразу сработает Buy или Sell и откроется ордер ? И не будет ни какого ожидания. Вы же сами пишете: Цитата ...но советник открывает сделку не сразу Поэтому и нужно как-то определиться что есть "не сразу". Oll поэтому и предложил установить срок годности (15 минут в его примере) такого сигнала. Хотите чтобы сразу открывалась сделка - не устанавливайте такой срок, а просто идентифицируйте пересечение как сигнал на отправку ордера: if ( cross_ma() ) OrderSend(....); Ссылка на сообщение Поделиться на другие сайты More sharing options...
terinki777 Опубликовано 13 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 марта, 2017 Можно ввести переменную типа bool (signal1, signal2, signal3....), если пересечение произошло, то signal1 = true, потом цена опустилась ниже signal2 = true, а дальше, когда все устраивает, то входите (if (sig2==true && sig1==true)...... ). Как-то так. Изменено 13 марта, 2017 пользователем terinki777 Ссылка на сообщение Поделиться на другие сайты More sharing options...
piratik Опубликовано 13 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 13 марта, 2017 Уважаемые спецы! Сделайте пожалуйста что бы у этого индюка работали буфера и если можно то прикрепите алерт или сообщение.(не обязательно) . Вот индик и скрин. При появлении паттерна заполнялся буфер. К сожалению сам не шарю в этом. Спасибо. Bheurekso_pattern.mq4Безымянный.png Ссылка на сообщение Поделиться на другие сайты More sharing options...
vitek01 Опубликовано 14 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 марта, 2017 Уважаемые спецы! Сделайте пожалуйста что бы у этого индюка работали буфера и если можно то прикрепите алерт или сообщение.(не обязательно) . Вот индик и скрин. При появлении паттерна заполнялся буфер. К сожалению сам не шарю в этом. Спасибо. на историй хорошо отрабатывается, даже удивил.А что значит буфера работали, что он еще должен делать? И может советник кто то накидает, посмотрели бы что он на самом деле из себя представляет! Ссылка на сообщение Поделиться на другие сайты More sharing options...
zliden Опубликовано 15 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2017 Подскажите, в чём ошибка:Вот скрипт (часть):0 main(){1 var OpenTime,MA;2 MA=Point("MA",0);Вот ошибки:not a variable in line 2MA=Pointsyntax error in line 2MA=Point Ссылка на сообщение Поделиться на другие сайты More sharing options...
pfenix Опубликовано 15 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2017 Здравствуйте.Просмотрел урок Сергея по модификации ордеров,но при написании советника столкнулся с проблемой - при создании обертки для OrderModify в виде OrderModifyX компилятор выдает ошибку,хотя у автора на видео все нормально.Кто-нибудь подскажет в чем проблема? Ссылка на сообщение Поделиться на другие сайты More sharing options...
mobidik Опубликовано 15 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2017 Здравствуйте.Просмотрел урок Сергея по модификации ордеров,но при написании советника столкнулся с проблемой - при создании обертки для OrderModify в виде OrderModifyX компилятор выдает ошибку,хотя у автора на видео все нормально.Кто-нибудь подскажет в чем проблема? Удали в названии функции "OrderModifyX" - буковку: "Х". Ссылка на сообщение Поделиться на другие сайты More sharing options...
pfenix Опубликовано 15 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2017 а как быть тогда с " bool OrderModifyX (int ticket, // номер ордера double price, // цена открытия double stoploss, // stop loss double takeprofit, // take profit datetime expiration, // время истечения ордера color arrow_color) // цвет { if (IsStopped()) { Print("Ошибка: советник остановлен, IsStopped() == true"); return(false); } int cnt = 0; ..... и т .д. Ссылка на сообщение Поделиться на другие сайты More sharing options...
mobidik Опубликовано 15 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2017 а как быть тогда с " Так я не телепат, а по сути: посчитай на пальцах - сколько параметров ты передаешь в функцию и сколько параметров у самой функции - найди отличия и получишь результат. Ссылка на сообщение Поделиться на другие сайты More sharing options...
pfenix Опубликовано 15 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2017 Видимо это вопрос к самому Сергею,или хотя бы к тем,кто видел его видеоуроки: Спойлер if(OrderSelect(ticket,SELECT_BY_TICKET)) if(!OrderModifyX(ticket, OrderOpenPrice(), SL, TP, 0)) Print("Ошибка модификации ордера на покупку!"); } else Print("Ошибка открытия ордера на покупку!"); } }//+------------------------------------------------------------------+bool OrderModifyX (int ticket, // номер ордера double price, // цена открытия double stoploss, // stop loss double takeprofit, // take profit datetime expiration, // время истечения ордера color arrow_color) // цвет { if (IsStopped()) { Print("Ошибка: советник остановлен, IsStopped() == true"); return(false); } int cnt = 0; while(!IsTradeAllowed() && cnt { Sleep(500); cnt++; } if (!IsTradeAllowed()) { Print("Ошибка:операция недопустима - IsTradeAllowed() == false"); return(false); } if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) { string sym = OrderSymbol(); int digits = int(MarketInfo(sym, MODE_DIGITS)); if (digits > 0) { price = NormalizeDouble(price, digits); stoploss = NormalizeDouble(stoploss, digits); takeprofit = NormalizeDouble(takeprofit, digits); } } int err = GetLastError(); err = 0; bool exit_loop = false; bool result = false; while(!exit_loop) { result = OrderModify(ticket, price, stoploss, takeprofit, expiration, arrow_color); err = GetLastError(); if (result == true) return(true); switch(err) { case ERR_NO_ERROR: case ERR_NO_RESULT: exit_loop = true; break; case ERR_SERVER_BUSY: case ERR_NO_CONNECTION: case ERR_INVALID_PRICE: case ERR_BROKER_BUSY: case ERR_OFF_QUOTES: case ERR_TRADE_CONTEXT_BUSY: case ERR_TRADE_TIMEOUT: cnt++; break; case ERR_PRICE_CHANGED: case ERR_REQUOTE: RefreshRates(); continue; default: exit_loop = true; break; } // switch(err) if (cnt > TryCount) exit_loop = true; if (!exit_loop) { Print("Ошибка! Попыток: " + IntegerToString(cnt) + "/" + IntegerToString(TryCount)); Sleep(500); RefreshRates(); } if (exit_loop) { if (err != ERR_NO_ERROR && err != ERR_NO_RESULT) { Print("Ошибка: " + IntegerToString(err)); } } } // while(!exit_loop) if (err == ERR_NO_RESULT) { return(true); } Print("Ошибка модификации после" + IntegerToString(cnt) + " попыток"); return(false); } Ссылка на сообщение Поделиться на другие сайты More sharing options...
mobidik Опубликовано 15 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2017 Ты не передаешь параметр по цвету при вызове функции, самый последний в перечне. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
inve7tor Опубликовано 15 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2017 Доброго времени суток! Нужна Ваша помощь в написании простенького советника или индикатора, для упрощения ручной торговли.Суть его работы: отслеживание комбинации свечей, а именно чередования в нужной последовательности (бычьи и медвежьи свечи).Настройки, которые хотелось бы в нем видеть:1. Минимальный размер свечи в пунктах, которые будут учитываться2. Настройки чередования свечей. Например, выбираем последовательность (медвежья, бычья, бычья, медвежья) подается алерт. Длинна цепочки позволяет учитывать длинную комбинацию.3. Алерт: звук, окно, телефон и почта4. Время работы советника или индикатора5. Возможность отслеживать в одном окне много валютных парЗаранее благодарен! Ссылка на сообщение Поделиться на другие сайты More sharing options...
pfenix Опубликовано 15 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2017 Ты не передаешь параметр по цвету при вызове функции, самый последний в перечне. спасибо мил человек,помог.Видимо на новых билдах уже по-другому малость. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 марта, 2017 Вот скрипт (часть): это скрипт (часть) не для МТ. Поэтому компилятор ругается на чужой код. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
sergej1968 Опубликовано 16 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2017 Уважаемые программисты. Как сделать счётчик паттернов Прайс Экшн (допустим "Рельсы"). По типу "CountTrade" у меня не получается. Подскажите, пожалуйста. Заранее, спасибо. Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 16 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2017 Уважаемые программисты. Как сделать счётчик паттернов Прайс Экшн (допустим "Рельсы"). По типу "CountTrade" у меня не получается. Подскажите, пожалуйста. Заранее, спасибо. Немного вопрос непонятен. Вы имеете ввиду подсчет количества появлений паттерна за время работы эксперта? Ссылка на сообщение Поделиться на другие сайты More sharing options...
sergej1968 Опубликовано 16 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2017 Да Ссылка на сообщение Поделиться на другие сайты More sharing options...
AlexFlex Опубликовано 16 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2017 "Можно ли написать код Мартингейла в Советник - не трогая код самого советника (что-то типа автономного следящего модуля)"Добрый день! Помогите с кодом. Можно ли написать мартингейл для уже существующего советника + к его коду, не меняя сам советник, чтобы код мартина следил на действиями советника по мэджику - высчитывал от уже существующей ставки удаление и применял логику мартина: через определенное количество пунктов (или суммы минус в маджэку) ставить противоположные ставки на расстоянии Х с множителем Y Для мт4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 16 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2017 Да Ну тогда вкратце примерно так:-объявляйте глобальную переменную, например, int PtCount=0; -как появился новый паттерн, складывайте в нее -> PtCount++;Чтобы появление одного паттерна считалось один раз, отслеживайте время свечи, на которой появился паттерн. Как паттерн сложен в переменную Pcount, больше на этой свече его не считайте. Ссылка на сообщение Поделиться на другие сайты More sharing options...
sergej1968 Опубликовано 16 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2017 Извините, но я ничего не понял. Мой уровень не позволяет так быстро схватывать. Если можно, то поподробнее. Паттерн "Рельсы" у меня описан вот так.int Reils(){ double Close1 = iClose(Symbol(), 0, 1); double Open1 = iOpen(Symbol(), 0, 1); double Close2 = iClose(Symbol(), 0, 2); double Open2 = iOpen(Symbol(), 0, 2); if (Close1 Open2) return(-1); if (Close1 > Open1 && Close2 return(0);}И как мне его привязать к счётчику. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 16 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2017 http://tlap.com/forum/laboratoriya-profitfx/24/open-source-sovetnik-forex-setka-trader-mod-i-ea-setka/2738/?do=findComment&comment=3442603-м и 4-м параметрами запрещаете нашему боту открывать первые ордера сеток - это будет делать ваш бот.А наш бот будет сопровождать ваши входы/ордера как вам угодно изощренными способами.В код же вам лучше не лезть и даже не думать об этом - судя по посту, вы крайнее далеки от программирования. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
DreamWorks Опубликовано 16 марта, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 16 марта, 2017 И как мне его привязать к счётчику. Мне кажется паттерн "рельсы" должен не так выглядеть. Но вопрос сейчас не в этом. Вот у Вас функция Reils() возвращает 0,1 или -1. Допустим, у нас задача посчитать сколько раз эта функция вернет единицу. Делаем так: Спойлер int PtCount=0;//Сюда считаем количество появившихся паттерновdatetime LastPattern;//сюда запоминаем время бара, на котором последний раз появился паттернvoid OnTick(){ if(LastPattern!=Time[0]) { if(Reils()==1) { PtCount++;//считаем появление единицы в переменную PtCount LastPattern=Time[0];//запоминаем время последнего бара } } Comment("Счетчик = ",PtCount);} 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти