sniv Опубликовано 29 сентября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 сентября, 2017 У меня вот такой вопрос на засыпку:Есть разные варианты определения наличия гэпа, и в принципе они все похожи,один из них (тож неплохо отрабатывает) extern int min_gapsize = 1;extern double lotsize_gap = 0.1;......double current_openprice = iOpen(Symbol(), PERIOD_M15, 0); double previous_highprice = iHigh(Symbol(), PERIOD_M15, 1); double previous_lowprice = iLow(Symbol(), PERIOD_M15, 1); double point_gap = MarketInfo(Symbol(), MODE_POINT); int spread_gap = MarketInfo(Symbol(), MODE_SPREAD); datetime current_time = iTime(Symbol(), PERIOD_M15, 0);// catching the gap on sell upper gap if(current_openprice > previous_highprice + (min_gapsize + spread_gap)*point_gap && current_time != order_time) { int ticket = OrderSend(Symbol(), OP_SELL, lotsize_gap, Bid, 0, 0, previous_highprice + spread_gap*point_gap, "", 4, 0, Red); order_time = iTime(Symbol(), PERIOD_M15, 0); Print("Sell", order_time); //---- if(ticket { Print("Error #", GetLastError()); } }//catching the gap on buy down gap if(current_openprice current_time != order_time) { ticket = OrderSend(Symbol(), OP_BUY, lotsize_gap, Ask, 0, 0, previous_lowprice - spread_gap*point_gap, "", 5, 0, Green); order_time = iTime(Symbol(), PERIOD_M15, 0); Print("Buy", order_time); if(ticket { Print("Error #", GetLastError()); } } Но может кто пробовал и знает почему бы не воспользоваться wininet.dll,,,т.е в пятницу на конец рынка писать в файл цену по инструменту с рабочего терминала, а воскресенье парсить данные цены этого же инструмента скажем с forex.tradingcharts.comwww.xe.comeasymarkets.comсравнивать и таким образом полностью отсекать в сове момент гэпа на понедельник??Если это чревато, то отпишите плз почему Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 сентября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 сентября, 2017 сравнивать и таким образом полностью отсекать в сове момент гэпа на понедельник??Если это чревато, то отпишите плз почемучто значит отсекать? сова чужая и её выключить надо если гэп наметился? Вопрос непонятен, поэтому чревато остаться без ответа... Ссылка на сообщение Поделиться на другие сайты More sharing options...
sniv Опубликовано 30 сентября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 сентября, 2017 И да и нет) я имею ввиду если стратегия предусматривает отмену входа при наличии гепа, встроить в свой сов такой своеобразный сравнивающий парсер Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 30 сентября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 сентября, 2017 Если в свою сову, то гэп на открытии рынка (или на открытии любой свечи) определяется так:if ( MathAbs ( Open[0] - Close[1] ) если гэп новостной, то он может быть внутри свечи (особенно крупной), здесь надо исследовать межтиковую дистанцию или на более низком ТФ.Парсить страницы из инета не вижу необходимости - сначала сова в любом случае увидит гэп и только потом может принимать решение. Отложку тоже не сможете убрать, если на выходные оставили - она сработает в гэпе без вариантов. Изменено 30 сентября, 2017 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
sniv Опубликовано 30 сентября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 сентября, 2017 Понял, пасиб)Но я к чему - в теме "пружина" здесь usver73 лопатит тему гэпов и я так понял есть косяк с подачей котировок в сове для определения гэпа. И как же тогда отбить погрешности? Т.к скажем парсер решил бы эту проблему---? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 1 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2017 sniv Вы поднимаете тему арбитража. это когда котировки брокера тормозят, а сова качает данные с быстрых серверов другого брокера и успевает открыть ордер до гэпа в его сторону. Тормознутые брокеры этого не любят! ;) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Kasander Опубликовано 1 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 октября, 2017 Всем добрый день. Приглашаю в мою тему по поводу улучшения Индикатора для ТС (Пост №7) -http://tlap.com/forum/torgovye-sistemy/2/ts-smooth-filter/17015/ Ссылка на сообщение Поделиться на другие сайты More sharing options...
sniv Опубликовано 2 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2017 Скорее всего тормозо-дц не сильно волнует ментальное состаяние трейдера, который у них сливает, вот наверн и трейдера не сильно должно волновать мнение дц когда он вырывает плюсы :d Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 2 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2017 Если в свою сову, то гэп на открытии рынка (или на открытии любой свечи) определяется так:if ( MathAbs ( Open[0] - Close[1] ) 0ll , но ведь если у брокера появляются котировки в воскресенье, то Ваша функция даст отличные результаты от брокера, у которого котировки идут с понедельника? Конечно, академически Вы правы, но все таки хотелось бы вычислять гэп как close пятницы - open понедельника.Sniv правильно обратил внимание, я всю голову сломал, но у всех тестирующих через раз появляются разные результаты по учету гэпа... И еще обратил внимание, что на разных ТФ цена закрытия пятницы(или открытия понедельника - не помню) тоже может быть разной.Может подскажете универсальный вариант? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 2 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 2 октября, 2017 Это и есть самый универсальный, без всякой привязки к дню недели. Время брокера не имеет значения - торги начинаются практически одновременно, а у брокеров время может отличаться, как и день недели. ;)Ловля гэпа - брокерозависимая штука и дистанция у разных брокеров будет разная, имхо это максимум, что можно сделать. 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Kasander Опубликовано 3 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 3 октября, 2017 Уважаемые программисты помогите пожалуйста подправить Машку - http://tlap.com/forum/ugolok-programmista/13/pomogite-podpravit-mashku/17031/ Ссылка на сообщение Поделиться на другие сайты More sharing options...
lordsamven Опубликовано 5 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2017 Добрый день, уважаемые знатоки-программисты мт4.В результате изучения курса по программированию и дальнейшего погружения в данную тему возник следующий вопрос.Ситуация: Пишется индикатор с математическими вычислениями на основе OHLC. Задан цикл расчета переменной Highist на периоде n свечей. При этом n вынесено в пользовательские настройки индикатора и соответственно может меняться.Вопрос: как не зная текущего значения n запрограммировать расчет суммы (High-Low) всех свечей интервала n? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 5 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 5 октября, 2017 Вопрос: как не зная текущего значения n запрограммировать расчет суммы (High-Low) всех свечей интервала n?Вы же написали: "При этом n вынесено в пользовательские настройки" - значит n- известно, делайте цикл и вычисляйте. Чтоб не гонять цикл на каждом баре можно из суммы хай+лоу читать n-значение и суммировать с 0-начением. Ссылка на сообщение Поделиться на другие сайты More sharing options...
lordsamven Опубликовано 11 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 11 октября, 2017 Добрый день!Пишу сеточника и столкнулся со следующей ситуацией.Задача: ограничить количество колен не более 4.Пишем: if (Magic == 111 && CountTrades() == 0){}if (Magic == 111 && CountTrades() >= 1 && CountTrades() {}В моем понимании если стоит "и" то должны проверяться все условия в скобке.Подскажите, почему могло открыться пятое колено. Добавлено: 12-10-2017 07:18:57Разобрался. При Добавлено: 12-10-2017 14:22:42 Вопрос: как не зная текущего значения n запрограммировать расчет суммы (High-Low) всех свечей интервала n?Вы же написали: "При этом n вынесено в пользовательские настройки" - значит n- известно, делайте цикл и вычисляйте. Чтоб не гонять цикл на каждом баре можно из суммы хай+лоу читать n-значение и суммировать с 0-начением. Возможно я еще не знаю все разновидности циклов в mql, основываюсь пока на примерах из курса по программированию.Ниже приведен цикл определения минимальной цены из интервала Ind_Period: double minprice=99999, mp; for(int i=0; i { mp=iLow(Symbol(), PERIOD_CURRENT, i); if (mp minprice=mp; }То есть здесь выбирается только одно значение из массива, это логично и понятно.Подскажите как преобразовать этот цикл, чтобы он считал сумму разностей (High-Low) всех свечек в интервале Ind_Period ? Изменено 12 октября, 2017 пользователем lordsamven Ссылка на сообщение Поделиться на другие сайты More sharing options...
axwellweb Опубликовано 12 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 октября, 2017 Привет, Г-да трейдеры-программисты.У меня появилась значительная проблема которая рушит всю систему сетки из-за неправильной функции определения достижения уровня.Собственно вот примеры кода:Есть массив уровней в нём хранятся цены на которых они стоят... Цитата double Levels[150];ArrayInitialize(Levels, 0);Levels[num] = Ask; Есть функция которая "пытается" поймать нахождение цены на уровне... Цитата int GetLvl(double bidask){ // поиск уровня по цене for(int i = 0; i if(bidask == Levels) return(i); } return(-1);} По логике скрипта - когда цена доходит до, допустим 1.3345, и на этой цене есть уровень) - функция GetLvl должна вернуть порядковый номер уровня, иначе -1.Но! Собственно в тестере цена проходит мимо многих уровней не замечая их, что делает сеточника бесполезным куском г*** :dВопрос: в чём может быть проблема? Именно в тестере? Или в функции? Может ли влиять количество уровней на реакцию советника?P.S. даже вот такой код Цитата if(Ask == 1.3378) Print(GetLvl(Ask),"-",Ask); if(Ask == 1.3328) Print(GetLvl(Ask),"-",Ask); if(Ask == 1.3278) Print(GetLvl(Ask),"-",Ask); Выводит только при прохождении 1.3328 и то GetLvl=-1(а должен быть номер уровня)А остальные пролетает мимо...Добавлено: 12-10-2017 11:34:02Во я Вася ваще...РЕШЕНИЕ: Цитата 1) Цену лучше использовать всё таки Bid2) Если используете собственные значения цены - то приводите всё через NormalizeDouble к правильному виду, иначе Bid!=ВАША_ЦЕНА А вот результаты по usdcad восхитили за последние 4 месяца. Более ранние тоже неплохие, но больше у нуля прибыль гуляет.P>S> спасибо прочитавшим.P>P>S> Модератор, можешь закрыть тему :dTesterGraph.gif Изменено 12 октября, 2017 пользователем axwellweb Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 12 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 12 октября, 2017 То есть здесь выбирается только одно значение из массива, это логично и понятно.Подскажите как преобразовать этот цикл, чтобы он считал сумму разностей (High-Low) всех свечек в интервале Ind_Period ?Простое решение (думаю лучше запускать на закрытии 0-го бара ) : sumdif = 0; for(int i=1; iболее сложных решений не буду рассматривать. Изменено 13 октября, 2017 пользователем 0ll 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
lordsamven Опубликовано 14 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 14 октября, 2017 То есть здесь выбирается только одно значение из массива, это логично и понятно.Подскажите как преобразовать этот цикл, чтобы он считал сумму разностей (High-Low) всех свечек в интервале Ind_Period ?Простое решение (думаю лучше запускать на закрытии 0-го бара ) : sumdif = 0; for(int i=1; iболее сложных решений не буду рассматривать. Добрый день!В продолжение данной темы написал индикатор который через буфер выводит в отдельное окно значение sumdif.Но значение индикатора не пересчитывается, в результате чего в окне видим прямую линию. Я так понимаю это связанно с различными длительностями циклов, потому что sumdif считался на ограниченном интервале, а индикатор должен показывать значения на всей истории. int limit=rates_total-prev_calculated; double sumdif = 0; for(int i=0; i for (int j=0; j { Buffer1[j] = sumdif; } return(rates_total);Подскажите, что нужно исправить для корректного отображения индикатора.Для удобства прилагаю файлы индикатора.TEST.mq4 Изменено 15 октября, 2017 пользователем lordsamven Ссылка на сообщение Поделиться на другие сайты More sharing options...
axwellweb Опубликовано 15 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 октября, 2017 Подскажите, что нужно исправить для корректного отображения индикатора. Тебе надо отрисовывать индикатор на каждой свече, вот в чем проблема:Твой цикл проходит один раз, а надо его пересчитывать на каждой свечке, тогда будет отображение на истории. Ссылка на сообщение Поделиться на другие сайты More sharing options...
lordsamven Опубликовано 15 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 октября, 2017 Подскажите, что нужно исправить для корректного отображения индикатора. Тебе надо отрисовывать индикатор на каждой свече, вот в чем проблема:Твой цикл проходит один раз, а надо его пересчитывать на каждой свечке, тогда будет отображение на истории. А можно на примере для понимания где я что не так написал? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 15 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 15 октября, 2017 как-то так: int limit=rates_total-prev_calculated; for (int j=0; j { double sumdif = 0; for(int i=j; i Buffer1[j] = sumdif; } return(rates_total); 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
axwellweb Опубликовано 17 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2017 добрый день. подскажите... написал соетника, на 4-знаке работает, а на 5-знаке нет.Проблему нашел: Bid приходит 4-знак, хотя на графике 5-знак.Расскажите почему так? и как с этим бороться? Можно как то Бид получить 5-значным? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Иван В Опубликовано 17 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2017 Добрый день!Торгую а Альпари на счете нано евродол (4 знака), написал советника, на демосчете работает нормально, а на реале косячит, при открытии ордера, не всегда выставляет TP и SL, в журнале пишет [Off quotes], если руками начинаешь доводить до ума ордер сначала думает, а потом пишет НЕТ КОТИРОВОК и только раза с 4-го ставит TP и SL, обычно это бывает в районе 12 дня, вечером ордер выставляется корректно с TP и SL.Читал на других форумах, эта ошибка встречается у Альпари часто, знающие люди советуют дописать в код условие, что бы запрос по функции модифи был не один раз, а несколько, пока не установятся TP и SL. Но конкретно ни кто не подсказал. Подскажите пожалуйста, может кто в теме. Заранее благодарен. Мой код выставления ордеров прилагаю. код_открытия_ордеров.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 17 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 17 октября, 2017 подскажите... написал соетника, на 4-знаке работает, а на 5-знаке нет.Проблему нашел: Bid приходит 4-знак, хотя на графике 5-знак.Расскажите почему так? и как с этим бороться? Можно как то Бид получить 5-значным?ХЗ что ответить... где работает- в тестере или на счёте? Где не работает, котировки чьи?Читал на других форумах, эта ошибка встречается у Альпари часто, знающие люди советуют дописать в код условие, что бы запрос по функции модифи был не один раз, а несколько, пока не установятся TP и SL.Если OrderModify возвращает false, то нужно анализировать код ошибки. Есть всего несколько кодов, которые позволяют в цикле, через некий таймаут долбить сервер брокера повторными запросами на модификацию ордера. В том числе реквота. Вот коды ошибок - познавайте. Ссылка на сообщение Поделиться на другие сайты More sharing options...
axwellweb Опубликовано 18 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 октября, 2017 Мой код выставления ордеров прилагаю. А почему стопы не ставишь прямо во время выставления ордера? У меня просто складывается впечатление что ордер не находится из-за молниеносной реакции)) ну он ещё не открылся. а ты следом выставляешь уровни ордера который ещё не открылся...Добавлено: 18-10-2017 14:31:46Может я и не прав...=D Ссылка на сообщение Поделиться на другие сайты More sharing options...
Иван В Опубликовано 18 октября, 2017 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 18 октября, 2017 А почему стопы не ставишь прямо во время выставления ордера? У меня просто складывается впечатление что ордер не находится из-за молниеносной реакции)) ну он ещё не открылся. а ты следом выставляешь уровни ордера который ещё не открылся...Добавлено: Сегодня в 05:31:46 pmМожет я и не прав...=D Добрый день! Так меня учили, что нужно сначала выставить ордер, а потом через функцию нормализе установить ТП и СЛ. TP = NormalizeDouble(Ask + TakeProfit*Point, Digits); SL = NormalizeDouble(Ask - StopLoss*Point, Digits); Сам ордер открывается, а ТП и СЛ не успевают. Хотя вечером, все работает, там и руками без проблем открывается и закрывается. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти