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

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


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

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


Как установить индикатор HMA Color на часовой график, но при этом данные чтобы брались с 4-х часового графика?

Не знаю на чём индюк построен, но если на МА, то надо просто в 4 раза период увеличить и всё.


Индюк построен на основе МА. Период МА изменен с текущего графика на 4-х часовой. Количество баров в индикаторе рассчитывается на текущем графике. Как сделать, чтобы количество баров рассчитывались с 4-ч часового графика?
во вложении индюк

HMA_Color_4часа.mq4

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

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

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

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

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

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

Перейти

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

Перейти

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

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано
bzs в начале ф-ции трейлинга ставь: Print("Tral time = ", TimeToStr(TimeCurrent());

Crik1978 настраиваешь период индюка на Н4, например будет HMA_Period=32, переходишь на Н1 и в индюке меняешь HMA_Period=32*4=128. на этом всё - должно получиться.
Ссылка на сообщение
Поделиться на другие сайты

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

Проверьте пойдет такой вариант ?

Dron15 так лучше, но ещё есть ошибки.
1. Вычисляйте чистую цену БУ, без нормализации и трала. Вот почему здесь +? (ведь для бая и селл должно быть разное значение):
avgprice = NormalizeDouble(price/ order_lots + TrailingStop*Point, Digits);

2. Зачем Вы везде вставляете NormalizeDouble? - это абсолютно лишнее. Необходимость в этом есть только при передаче значения в функцию работы с ордерами.

3. Ф-ция OrderModify возвращает true при успешном выполнении, а у Вас наоборот?
Ссылка на сообщение
Поделиться на другие сайты

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

0ll не ругайся сильно потихоньку разберусь, а идея такая лос ставится только после того как цена достигнет средней цены + профит который я хочу получить и если цена ударила в лос то закрываем всю сеть , а если цена пошла дальше тралим. Нащет OrderModify щас посмотрю еще разок. Примеров просто мало правильных, приходиться додумывать и по сайтам смотреть кто как пишет , но все равно что то начинает проясняться. Еще не получается подципить трал в функцию старт , но давай с тралом разберемся а потом пойдем дальше.

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

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

Доброго времени суток,

Подскажите пожалуйста, как можно заставить советника работать с текстовым файлом (*.txt) в котором будет храниться история новостей...

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

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

Доброго времени суток.
Не знаю, правильно ли выбрал тему для своего вопроса, если нет - прошу извинить и ткнуть носом в подходящую.
А вопрос в следующем: попался мне советник, который я захотел чуток доработать в целях самообразования и изучения языка MQL - упорядочить описание вводных, манименеджмент прикрутить, научить открытые позиции после включения подхватывать. Вот когда пытался понять как реализовать последнее, наткнулся на такой блок в коде:

Спойлер


for (i=0;i {
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if (OrderMagicNumber()==magic_num &&
OrderSymbol()==Symbol() &&
OrderProfit() OrderCloseTime()>=iTime(NULL,PERIOD_D1,0) ) minus++;
}
}
for (i=0;i {
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderMagicNumber()==magic_num && OrderSymbol()==Symbol()) pos = OrderTicket();
}
}



Так вот, правильно ли я понимаю, что этот кусок кода и есть то самое искомое подхватывание и дальнейшее сопровождение открытых позиций советником?
Заранее спасибо за ответ и\или совет(ы).
Ссылка на сообщение
Поделиться на другие сайты

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


Доброго времени суток.
Не знаю, правильно ли выбрал тему для своего вопроса, если нет - прошу извинить и ткнуть носом в подходящую.
А вопрос в следующем: попался мне советник, который я захотел чуток доработать в целях самообразования и изучения языка MQL - упорядочить описание вводных, манименеджмент прикрутить, научить открытые позиции после включения подхватывать. Вот когда пытался понять как реализовать последнее, наткнулся на такой блок в коде:

Спойлер


for (i=0;i {
if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
{
if (OrderMagicNumber()==magic_num &&
OrderSymbol()==Symbol() &&
OrderProfit() OrderCloseTime()>=iTime(NULL,PERIOD_D1,0) ) minus++;
}
}
for (i=0;i {
if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if (OrderMagicNumber()==magic_num && OrderSymbol()==Symbol()) pos = OrderTicket();
}
}



Так вот, правильно ли я понимаю, что этот кусок кода и есть то самое искомое подхватывание и дальнейшее сопровождение открытых позиций советником?
Заранее спасибо за ответ и\или совет(ы).


Нет это скорее Мартингейл (увеличение следующей позиции если предыдущая была убыточной).
Ссылка на сообщение
Поделиться на другие сайты

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


Нет это скорее Мартингейл (увеличение следующей позиции если предыдущая была убыточной).



В тестере советник не увеличивал лот при минусовой сделке, да и в настройках множитель мартина не предусмотрен. Так что вопрос пока остается...

И появился еще такой вопрос: возможно ли написать сову, которая будет работать со свечами Heiken Ashi, учитывая наличие\отсутствие хвостов у свечей и их величину, а также фильтровать по показаниям индюков, не входящих в стандартный набор MT4? Изменено пользователем holodar
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
holodar по приведённому Вами коду нельзя сказать что это "и есть то самое искомое подхватывание"
В разных совах по разному... в своих я считаю количество ордеров, обновляю тикеты, обновляю уровни стопов. В вашем коде этого нет, но и не понятно что советнику требуется для нормальной работы после инициализации.
По поводу вопроса о возможности написать сову - Да, возможно.

tekashnik по работе с текстовыми файлами читайте справку раздел "Файловые операции". Читать, писать, создавать - всё, что угодно.

Dron15 прогресс в Вашей работе присутствует.
Ошибка в Этой конструкции (и подобной для Селл):
if(Bid - OrderOpenPrice() >= SL && SL != OrderStopLoss ()) SL = NormalizeDouble(avgprice + TrailingStop * Point, Digits);
1. при первом запуске чему равен SL ?
2. Bid - OrderOpenPrice() = (например) 0.002, а SL ? КАК это условие выполнится ? Скорее всего здесь нужен не SL, а TrailingStop...
3. Это условие начала работы трала, а где условие переноса трала ? Нужна ещё проверка: если дистанция от цены до СЛ > трал + шаг трала, то переносим стоп на дистанцию цена +- трал.
4. avgprice + TrailingStop * Point - не изменится со временем, пока новый ордер не откроете. Вместо avgprice надо использовать текущую цену. и для Бая нужно не +, а -
5. текущий уровень стопа считайте сразу, в блоке модификации ничего не досчитывайте, кстати там тоже ошибка.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

holodar это точно не подхватывание так-как считаются уже закрытые ордера.Среди которых ищутся убыточные.Да ещё и считаются!

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

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


holodar это точно не подхватывание так-как считаются уже закрытые ордера.Среди которых ищутся убыточные.Да ещё и считаются!



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

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

Теперь буду пробовать свои силы в написании функции подхватывания ордеров по Магику и Символу. Надеюсь, это возможно реализовать.

holodar суть "подхватывания" : нужно просто заполнить значениями глобальные переменные, используемые в советнике, иногда достаточно из Инита() запустить имеющуюся ф-цию пересчёта ордеров и всё. Удачи.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

0ll за листочек спасибо , помогает ) я думаю вы поняли о чем я. Исправил код по новому проверь пожалуйста.
Единственное что мне кажется надо Bid и Ask поменять местами , но может я и ошибаюсь.

исправил.txt

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Dron15 ошибка здесь:
if(OrderStopLoss() == (OrderOpenPrice() + NormalizeDouble(Bid - TrailingStop*Point,Digits )))
if(Bid - OrderStopLoss() 1. " == " работать не будет - цена изменится на 2 пипс и условие не сработает. Нужно неравенство.
2. здесь нужно отследить изменение цены на стоп+шаг. это делается проще (для Бая):
if (OrderStopLoss() > Bid - (TrailingStop + TrailingStep)*_Point)
{ //то переносим на уровень
SL = Bid - TrailingStop*_Point;
OrderModify(...
3. Это - if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic лучше делать непосредственно после for

Это всё - после этих исправлений будет (должно) работать... ;)
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

1. " == " работать не будет - цена изменится на 2 пипс и условие не сработает. Нужно неравенство.
тут видел что что то нетак , компилятор показывал но получилось что неразобрался.
2. здесь нужно отследить изменение цены на стоп+шаг. это делается проще (для Бая):
if (OrderStopLoss() > Bid - (TrailingStop + TrailingStep)*_Point)
тут хотел так написать но что то за сомневался.
3. Это - if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic лучше делать непосредственно после for
тут убрал перешет , раз сделал OrderModify(... для каждого типа , а получается он нужен ?

Щас немного освобожусь переделаю.


Добавлено: 20-06-2015 12:20:34

Вот вроде все подправил.

исправил.txt

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Dron15 некоторые вещи, которые кажутся мне естественными, Вы не понимаете...
1. Вы используете функциии OrderStopLoss() и другие вне цикла перебора ордеров ! Значения, возвращаемые этими функциями могут быть любыми, в том числе от закрытых ордеров или вообще 0. Короче - сначала цикл, потом всё остальное.
2. Чему равно это неравенство: OrderStopLoss() > Bid - OrderStopLoss() + TrailingStep*Point ?
я отвечу оно равно true по-любому. в любое время... а почему, знаете ?
3. И это, то-же самое: OrderStopLoss() != (OrderOpenPrice() + NormalizeDouble(Bid - TrailingStop*Point,Digits ))

Подсказка:
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if(!(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)) continue;
if (OrderType() != otype) continue;
if (OrderType() == OP_BUY)
{
if(OrderOpenPrice()>= Bid - TrailingStop || OrderStopLoss () == 0 )
{
if (OrderStopLoss() > Bid - (TrailingStop + TrailingStep)*_Point)
{
SL = Bid - TrailingStop*_Point;
OrderModify(...
}
}
}
Вот такая структура, только селл добавить...
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


Dron15 некоторые вещи, которые кажутся мне естественными, Вы не понимаете...
1. Вы используете функциии OrderStopLoss() и другие вне цикла перебора ордеров ! Значения, возвращаемые этими функциями могут быть любыми, в том числе от закрытых ордеров или вообще 0. Короче - сначала цикл, потом всё остальное.
2. Чему равно это неравенство: OrderStopLoss() > Bid - OrderStopLoss() + TrailingStep*Point ?
я отвечу оно равно true по-любому. в любое время... а почему, знаете ?
3. И это, то-же самое: OrderStopLoss() != (OrderOpenPrice() + NormalizeDouble(Bid - TrailingStop*Point,Digits ))

Подсказка:
for(int i = OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
if(!(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)) continue;
if (OrderType() != otype) continue;
if (OrderType() == OP_BUY)
{
if(OrderOpenPrice()>= Bid - TrailingStop || OrderStopLoss () == 0 )
{
if (OrderStopLoss() > Bid - (TrailingStop + TrailingStep)*_Point)
{
SL = Bid - TrailingStop*_Point;
OrderModify(...
}
}
}
Вот такая структура, только селл добавить...



И куда Вы с этим трейлингстопом придёте ,хотелось бы мне узнать?!
У Вас-же тут одни ОШИБКИ!!!
Вот с этим Вы дойдёте только до цены открытия if(OrderOpenPrice()>= Bid - TrailingStop || OrderStopLoss () == 0 ).
А вот с этим if (OrderStopLoss() > Bid - (TrailingStop + TrailingStep)*_Point) вообще только один раз дёрнитесь!!! Изменено пользователем Konstebl
Ссылка на сообщение
Поделиться на другие сайты

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


И куда Вы с этим трейлингстопом придёте ,хотелось бы мне узнать?!
У Вас-же тут одни ОШИБКИ!!!
Вот с этим Вы дойдёте только до цены открытия if(OrderOpenPrice()>= Bid - TrailingStop || OrderStopLoss () == 0 ).
А вот с этим if (OrderStopLoss() > Bid - (TrailingStop + TrailingStep)*_Point) вообще только один раз дёрнитесь!!!

Друг Konstebl - меньше эмоций, спасибо за внимательность, но можно было и указать ошибку.
Dron15 надо не >, a = Bid - TrailingStop , надо для Бая OrderOpenPrice() Bid - TrailingStop*_Point
и OrderStopLoss() Bid - (TrailingStop + TrailingStep)*_Point
Ссылка на сообщение
Поделиться на другие сайты

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

Не дали мне написать ответ для Oll . Только сел за комп и уже куча ответов. Я это к то му что у меня стаж в програмировании только первый месяц . Думаю что и вы не постигли все азы програмирования за месяц. Ну да ладно не это важно. За подсказку спасибо. Исправил на вотето

if(OrderStopLoss() != (OrderOpenPrice() + NormalizeDouble(Bid - TrailingStop*Point,Digits , мне это понятнее .
OrderStopLoss() > Bid - (TrailingStop + TrailingStep)*_Point а вот тут хотел спросить как может стоп лос быть больше цены он же вроде только по профиту работает. Сижу и думаю но не может быть так .

if(OrderOpenPrice()>= Bid - TrailingStop вот тут спасибо что то не подумал что стоп не надо равнять с ценой открытия и цена Bid должна быть больше щас сяду исправлять.

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

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


Не дали мне написать ответ для Oll . Только сел за комп и уже куча ответов. Я это к то му что у меня стаж в програмировании только первый месяц . Думаю что и вы не постигли все азы програмирования за месяц. Ну да ладно не это важно. За подсказку спасибо. Исправил на вотето

if(OrderStopLoss() != (OrderOpenPrice() + NormalizeDouble(Bid - TrailingStop*Point,Digits , мне это понятнее .
OrderStopLoss() > Bid - (TrailingStop + TrailingStep)*_Point а вот тут хотел спросить как может стоп лос быть больше цены он же вроде только по профиту работает. Сижу и думаю но не может быть так .

if(OrderOpenPrice()>= Bid - TrailingStop вот тут спасибо что то не подумал что стоп не надо равнять с ценой открытия и цена Bid должна быть больше щас сяду исправлять.


if(OrderStopLoss() !=(OrderOpenPrice() + NormalizeDouble(Bid - TrailingStop*Point,Digits)))
Лучше написать не !=,потому-что стоплосс будет ходить за ценой вверх и вниз,а просто ,,что-бы
вниз не опускался.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

Посмотрите уважаемые сенсеи что я там на поправлял . Функция начала оживать. Думаю теперь дело дошло до функции старт, если все нормально поправил. В тестере открывается 2 ордера и общий стоп и все , закрывается по стопу все ордера , но стоп не модифицируется он выставляется ниже 2 ордера как я понимаю по TrailingStop. И еще просьба вот такие вещи (Лучше написать не !=,потому-что стоплосс будет ходить за ценой вверх и вниз,а просто ,вниз не опускался.) говорите потому что они только с опытом приходят а я допустим и другие учащиеся не имеющие сразу возможности сов проверить в тестере поймут это только когда будет возможность увидеть работу советника в тестере. Спасибо за помощ.

переделал_2.txt

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Dron15 у Вас не работает из-за этой строчки:
if(OrderStopLoss() честно говоря уже пальцы болят одно и то-же писать, то -ли Вы не внимательны, то-ли ищите что-то... :-?
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Войти

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

Войти

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


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

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