Перейти к содержанию

Обучение языку MQL4 под MetaTrader 4


Рекомендуемые сообщения

Обучение языку MQL4 под MetaTrader 4 Опубликовано

У меня вот такой вопрос на засыпку:
Есть разные варианты определения наличия гэпа, и в принципе они все похожи,
один из них (тож неплохо отрабатывает)


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.com
www.xe.com
easymarkets.com
сравнивать и таким образом полностью отсекать в сове момент гэпа на понедельник??
Если это чревато, то отпишите плз почему
Ссылка на сообщение
Поделиться на другие сайты

  • Ответов 6,8k
  • Создано
  • Последний ответ

Популярные авторы

Популярные авторы

Популярные посты

Смотрим видео-уроки, изучаем MQL:       Скачать видеокурс «MQL программирование. Как самому написать форекс советник/ индикатор/ скрипт»   P.S. Тема про Обучение MQ

Перейти

Циклы цикл for Иногда необходимо повторять одно и то же действие несколько раз подряд. Для этого используют циклы. К примеру, мы хотим проанализировать последние 10 баров и выяснить наименьшую цен

Перейти

Речь идет о том, что не будет значимых нововведений. А только баги периодически будут править. А вот все новое мол - в МТ5. Когда они вживую сказали то же самое на конференции в Москве, я уточнил: "То

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано

сравнивать и таким образом полностью отсекать в сове момент гэпа на понедельник??
Если это чревато, то отпишите плз почему

что значит отсекать? сова чужая и её выключить надо если гэп наметился?
Вопрос непонятен, поэтому чревато остаться без ответа...
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

И да и нет) я имею ввиду если стратегия предусматривает отмену входа при наличии гепа, встроить в свой сов такой своеобразный сравнивающий парсер

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Если в свою сову, то гэп на открытии рынка (или на открытии любой свечи) определяется так:
if ( MathAbs ( Open[0] - Close[1] ) если гэп новостной, то он может быть внутри свечи (особенно крупной), здесь надо исследовать межтиковую дистанцию или на более низком ТФ.
Парсить страницы из инета не вижу необходимости - сначала сова в любом случае увидит гэп и только потом может принимать решение. Отложку тоже не сможете убрать, если на выходные оставили - она сработает в гэпе без вариантов.

Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Понял, пасиб)
Но я к чему - в теме "пружина" здесь usver73 лопатит тему гэпов и я так понял есть косяк с подачей котировок в сове для определения гэпа. И как же тогда отбить погрешности? Т.к скажем парсер решил бы эту проблему---?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
sniv Вы поднимаете тему арбитража. это когда котировки брокера тормозят, а сова качает данные с быстрых серверов другого брокера и успевает открыть ордер до гэпа в его сторону. Тормознутые брокеры этого не любят! ;)
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Всем добрый день. Приглашаю в мою тему по поводу улучшения Индикатора для ТС (Пост №7) -http://tlap.com/forum/torgovye-sistemy/2/ts-smooth-filter/17015/

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Скорее всего тормозо-дц не сильно волнует ментальное состаяние трейдера, который у них сливает, вот наверн и трейдера не сильно должно волновать мнение дц когда он вырывает плюсы :d

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Если в свою сову, то гэп на открытии рынка (или на открытии любой свечи) определяется так:
if ( MathAbs ( Open[0] - Close[1] )


0ll , но ведь если у брокера появляются котировки в воскресенье, то Ваша функция даст отличные результаты от брокера, у которого котировки идут с понедельника?
Конечно, академически Вы правы, но все таки хотелось бы вычислять гэп как close пятницы - open понедельника.
Sniv правильно обратил внимание, я всю голову сломал, но у всех тестирующих через раз появляются разные результаты по учету гэпа...
И еще обратил внимание, что на разных ТФ цена закрытия пятницы(или открытия понедельника - не помню) тоже может быть разной.
Может подскажете универсальный вариант?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Это и есть самый универсальный, без всякой привязки к дню недели. Время брокера не имеет значения - торги начинаются практически одновременно, а у брокеров время может отличаться, как и день недели. ;)
Ловля гэпа - брокерозависимая штука и дистанция у разных брокеров будет разная, имхо это максимум, что можно сделать.

  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Уважаемые программисты помогите пожалуйста подправить Машку - http://tlap.com/forum/ugolok-programmista/13/pomogite-podpravit-mashku/17031/

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Добрый день, уважаемые знатоки-программисты мт4.
В результате изучения курса по программированию и дальнейшего погружения в данную тему возник следующий вопрос.
Ситуация: Пишется индикатор с математическими вычислениями на основе OHLC. Задан цикл расчета переменной Highist на периоде n свечей. При этом n вынесено в пользовательские настройки индикатора и соответственно может меняться.
Вопрос: как не зная текущего значения n запрограммировать расчет суммы (High-Low) всех свечей интервала n?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Вопрос: как не зная текущего значения n запрограммировать расчет суммы (High-Low) всех свечей интервала n?

Вы же написали: "При этом n вынесено в пользовательские настройки" - значит n- известно, делайте цикл и вычисляйте. Чтоб не гонять цикл на каждом баре можно из суммы хай+лоу читать n-значение и суммировать с 0-начением.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Добрый день!
Пишу сеточника и столкнулся со следующей ситуацией.
Задача: ограничить количество колен не более 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 ? Изменено пользователем lordsamven
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Привет, Г-да трейдеры-программисты.

У меня появилась значительная проблема которая рушит всю систему сетки из-за неправильной функции определения достижения уровня.
Собственно вот примеры кода:
Есть массив уровней в нём хранятся цены на которых они стоят...

Цитата


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) Цену лучше использовать всё таки Bid
2) Если используете собственные значения цены - то приводите всё через NormalizeDouble к правильному виду, иначе Bid!=ВАША_ЦЕНА



А вот результаты по usdcad восхитили за последние 4 месяца.
Более ранние тоже неплохие, но больше у нуля прибыль гуляет.

P>S> спасибо прочитавшим.
P>P>S> Модератор, можешь закрыть тему :d

TesterGraph.gif

Изменено пользователем axwellweb
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

То есть здесь выбирается только одно значение из массива, это логично и понятно.
Подскажите как преобразовать этот цикл, чтобы он считал сумму разностей (High-Low) всех свечек в интервале Ind_Period ?

Простое решение (думаю лучше запускать на закрытии 0-го бара ) :
sumdif = 0;
for(int i=1; i
более сложных решений не буду рассматривать. Изменено пользователем 0ll
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


То есть здесь выбирается только одно значение из массива, это логично и понятно.
Подскажите как преобразовать этот цикл, чтобы он считал сумму разностей (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

Изменено пользователем lordsamven
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Подскажите, что нужно исправить для корректного отображения индикатора.


Тебе надо отрисовывать индикатор на каждой свече, вот в чем проблема:
Твой цикл проходит один раз, а надо его пересчитывать на каждой свечке, тогда будет отображение на истории.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


Подскажите, что нужно исправить для корректного отображения индикатора.


Тебе надо отрисовывать индикатор на каждой свече, вот в чем проблема:
Твой цикл проходит один раз, а надо его пересчитывать на каждой свечке, тогда будет отображение на истории.

А можно на примере для понимания где я что не так написал?
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

как-то так:
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
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

добрый день.
подскажите... написал соетника, на 4-знаке работает, а на 5-знаке нет.
Проблему нашел: Bid приходит 4-знак, хотя на графике 5-знак.
Расскажите почему так? и как с этим бороться? Можно как то Бид получить 5-значным?

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Добрый день!
Торгую а Альпари на счете нано евродол (4 знака), написал советника, на демосчете работает нормально, а на реале косячит, при открытии ордера, не всегда выставляет TP и SL, в журнале пишет [Off quotes], если руками начинаешь доводить до ума ордер сначала думает, а потом пишет НЕТ КОТИРОВОК и только раза с 4-го ставит TP и SL, обычно это бывает в районе 12 дня, вечером ордер выставляется корректно с TP и SL.
Читал на других форумах, эта ошибка встречается у Альпари часто, знающие люди советуют дописать в код условие, что бы запрос по функции модифи был не один раз, а несколько, пока не установятся TP и SL. Но конкретно ни кто не подсказал. Подскажите пожалуйста, может кто в теме. Заранее благодарен. Мой код выставления ордеров прилагаю.

код_открытия_ордеров.mq4

Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано


подскажите... написал соетника, на 4-знаке работает, а на 5-знаке нет.
Проблему нашел: Bid приходит 4-знак, хотя на графике 5-знак.
Расскажите почему так? и как с этим бороться? Можно как то Бид получить 5-значным?

ХЗ что ответить... где работает- в тестере или на счёте? Где не работает, котировки чьи?

Читал на других форумах, эта ошибка встречается у Альпари часто, знающие люди советуют дописать в код условие, что бы запрос по функции модифи был не один раз, а несколько, пока не установятся TP и SL.

Если OrderModify возвращает false, то нужно анализировать код ошибки. Есть всего несколько кодов, которые позволяют в цикле, через некий таймаут долбить сервер брокера повторными запросами на модификацию ордера. В том числе реквота. Вот коды ошибок - познавайте.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

Мой код выставления ордеров прилагаю.


А почему стопы не ставишь прямо во время выставления ордера? У меня просто складывается впечатление что ордер не находится из-за молниеносной реакции)) ну он ещё не открылся. а ты следом выставляешь уровни ордера который ещё не открылся...

Добавлено: 18-10-2017 14:31:46

Может я и не прав...
=D
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано

А почему стопы не ставишь прямо во время выставления ордера? У меня просто складывается впечатление что ордер не находится из-за молниеносной реакции)) ну он ещё не открылся. а ты следом выставляешь уровни ордера который ещё не открылся...
Добавлено: Сегодня в 05:31:46 pm
Может я и не прав...
=D


Добрый день! Так меня учили, что нужно сначала выставить ордер, а потом через функцию нормализе установить ТП и СЛ. TP = NormalizeDouble(Ask + TakeProfit*Point, Digits); SL = NormalizeDouble(Ask - StopLoss*Point, Digits); Сам ордер открывается, а ТП и СЛ не успевают. Хотя вечером, все работает, там и руками без проблем открывается и закрывается.
Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Специальное предложение


  • Рекомендуемые брокеры

  • ×
    ×
    • Создать...