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

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


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

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



Сделал вместо == Теперь открывает только Sell и не при смене цвета,а один за другим.

Вы ранее писали : "А у меня гистограмма" - это означает, что индюк в подвале (отдельном окне под графиком) значение например = 45
Вдумайтесь: КАК можно сравнивать Ask > 45 ??? Поэтому у Вас всегда Селл потому что Bid Ранее я писал КАК нужно сравнивать. Ведь значением буфера будут либо пусто (Empty_Value), либо некая цифра (например 45), поэтому нужно писать:
if (мой_индюк_буф0 != Empty_Value && ... ) и
if (мой_индюк_буф1 != Empty_Value && ... ). Понятно?


ВОТ ОГРОМЕННОЕ СПАСИБО!!! бум пробовать.
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Перейти

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

Перейти

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

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

Здраствуйте всем,подскажите как правильно записать строчку условия что бы советник закрывал сделки от процента баланса, я написал вот так :
extern double Percent_Risk = 5.0;

Close_loss=NormalizeDouble(OrderProfit()-AccountBalance()*100/Percent_Risk,2);
if(Close_loss) {Close_Orders();}
Получается что при открытии самым минимальным лотом,советник тут же закрывает все.

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

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


Здраствуйте всем,подскажите как правильно записать строчку условия что бы советник закрывал сделки от процента баланса, я написал вот так :
extern double Percent_Risk = 5.0;

Close_loss=NormalizeDouble(OrderProfit()-AccountBalance()*100/Percent_Risk,2);
if(Close_loss) {Close_Orders();}
Получается что при открытии самым минимальным лотом,советник тут же закрывает все.

Да уж...
Рассмотрим простой пример:
Баланс 100$, Профит ордеров = -6$. Теперь смотрим на Вашу формулу:
Close_loss= -6 - 100 * 100 / 5 = -6 - 2000 = -2006
if (-2006) - что Вам даёт?

Мой вариант:
bool Close_loss = false;
Close_loss= AccountBalance()/100*Percent_Risk + OrderProfit() if(Close_loss) {Close_Orders();}
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Спасибо за критику но я пробовал записать условие таким образом
Close_loss=NormalizeDouble(OrderProfit()-AccountBalance()*100/Percent_Risk,2); if(Close_loss && OrderProfit Close_loss=NormalizeDouble(OrderProfit()-AccountBalance()/Percent_Risk *100,2); if(Close_loss && OrderProfit

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

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


Close_loss=NormalizeDouble(OrderProfit()-AccountBalance()*100/Percent_Risk,2); if(Close_loss && OrderProfit

Вы такое сами придумываете или копируете откуда-нибудь? (просто интересно)
Как можно double (Close_loss=NormalizeDouble) без логической операции в if() засунуть?
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый день .
3 урок .
Пишет такие предупреждения в тестере :
return value of 'OrderModify' should be checked
return value of 'OrderClose' should be checked
return value of 'OrderSelect' should be checked

Подскажите что не так .

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

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

Эти функции возвращают значение true/false - справилась/несправилась
Поэтому хочет чтоб Вы поинтересовались и похвалили ;)
Можно вызвать так: bool res = OrderClose(...);

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

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

Доброго времени суток
Есть два вопроса, подскажите
1. Может ли элемент массива содержать структуру. Например, есть структура из 3 элементов (тикет , объем и прибыль выбранного ордера). Может ли массив состоять из элементов, каждый из которых содержит в себе такую структуру?
2. Если да, можно ли сортировать массив с помощью функции ArraySort по элементам структур (например расположить все элементы массива в порядке возрастания прибыли)?
Если можно приведите пример

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

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


Есть два вопроса, подскажите
1. Может ли элемент массива содержать структуру?
2. Если да, можно ли сортировать массив с помощью функции ArraySort?
Если можно приведите пример

Если Вас интересуют такие вопросы - значит Вы не новичок в MQL-программировании => можете самостоятельно забацать такой массивчик и попробовать отсортировать.
Моё имхо (не проверял!): массив структур возможен (только вот не знаю: если структура содержит строки - то возможны варианты), а вот сортировка, да ещё и по конкретному полю структуры - нет.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый день . У меня опять несколько вопросов .
1) индикатор iMA .
ma_shift - Сдвиг индикатора относительно ценового графика.
Я так понимаю , что если поставить значение 0 , то сдвига не будет ?

2) Для того чтобы проверить изменила МА направление движения надо написать код ?

МА1 = double iMA(symbol, 0, 10, 0, MODE_SMA, PRICE_CLOSE, 1);
МА2 = double iMA(symbol, 0, 10, 0, MODE_SMA, PRICE_CLOSE, 2);
if МА1
И если, допустим, МА будет больше 2х значений, можно это описать в цикле или нужно выполнять сравнение каждый раз ?
Если можно написать в цикле то примерно как это будет выглядеть .
Так же если вместо MODE_SMA , PRICE_CLOSE написать значение 0 , то программа это поймет ?
И можно ли эти переменные модифицировать ?

3) И как сделать так , чтобы кидаешь сову на один ТФ , а часть индикаторов берет значения с другого ?
Насколько я понимаю что в условиях индикатора в значении "период" указываем значение подходящего нам ТФ . например PERIOD_H4 , а сова на Н1 .

Или эта информация есть в дальнейших уроках ?

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

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


1) индикатор iMA .ma_shift - Сдвиг индикатора относительно ценового графика.
Я так понимаю , что если поставить значение 0 , то сдвига не будет ?

Да.
Цитата

2) Для того чтобы проверить изменила МА направление движения надо написать код ?

Да.
Цитата


МА1 = double iMA(symbol, 0, 10, 0, MODE_SMA, PRICE_CLOSE, 1);
МА2 = double iMA(symbol, 0, 10, 0, MODE_SMA, PRICE_CLOSE, 2);
if МА1

Этим Вы определите направление МА на последних барах. Смена направления смотрится на минимум 3 барах
Цитата

И если, допустим, МА будет больше 2х значений, можно это описать в цикле или нужно выполнять сравнение каждый раз ?

Первую часть фразы не понял. Нужно сравнивать не в цикле - зачем?, а по закрытии текущего 0-бара
Цитата


Так же если вместо MODE_SMA , PRICE_CLOSE написать значение 0 , то программа это поймет ? И можно ли эти переменные модифицировать ?

Это не переменные а именованные константы и у каждой есть своё значение смотри здесь
Цитата

3) И как сделать так , чтобы кидаешь сову на один ТФ , а часть индикаторов берет значения с другого ?

В коде совы вызываете индикатор с другого ТФ - если сделаете аккуратно - проблем нет.
Ссылка на сообщение
Поделиться на другие сайты

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

По прочтению этой темы, а так же просмотру уроков Сергея xbms (за, что Вам и благодарность) я написал своего первого советника. Советник написан на основе MACD. В общем не сложный, но тем не менее показывает (показывал бы) некоторую прибыльность, беда в том, что он не всегда открывает и что хуже не всегда закрывает ордера. Примерно из десяти открытых ордеров один не закрывается не смотря на то, что условия для закрытия ордера наступили. Аналогично не всегда открывает ордера, хотя все условия для открытия ордера есть. Я конечно могу ставить стоп лосс и он предусмотрен, но для получения статистики, при скольких пунктов в минусе будет срабатывать советник на закрытие я стоп лосс отодвинул заведомо дальше возможного срабатывания.
Не много о советнике. Ордер на покупку или на продажу открывается сразу как совпадут движения цены на нескольких тайм фреймах. На каждую пару баров свой индикатор (Они все MACD только переименованные) Советник был установлен на 23 парах, потом уменьшил количество пар да шести и всё равно уже однажды ордер не был открыт.
Вот и вопрос от чего не закрываются ордера и как с этим бороться?
И второй вопрос на скольких валютных парах можно устанавливать советник, что бы они не мешали друг другу?
И сразу третий вопрос сколько терминалов можно одновременно установить и запустить на компьютере, что бы они не конфликтовали?
Заранее спасибо.

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Вячеслав_57
Сова не открывает/не закрывает ордера - прогоните в тестере в визуал мод. только придётся вручную установить индюк с аналогичными параметрами. Вопросы могут отпасть.
По поводу загрузки терминала: Мт4 - однопоточный, т.е. все индюки и совы выполняются последовательно друг за другом после прихода тика. т.е. на спокойном рынке я думаю проблем не будет, а вот на новостях тики будет пропускать. Поэтому Вам никто не подскажет - сами решайте (мы ж не знаем насколько Ваши совы наворочены, да и производительность Ваших компов для нас загадка).
Ссылка на сообщение
Поделиться на другие сайты

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

Всем привет!

Есть такая проблема...

Объявляю переменную
MqlRates mRates[];

Далее в коде заполняю и обращаюсь к первому элементу
RefreshRates();
CopyRates(s,PERIOD,0,1,mRates);
Price=NormalizeDouble(mRates[0].open,digits);

Всегда при первом запуске! эксперта появляется ошибка "array out of range" и указатель на mRates[0]
В сети нашёл такое объяснение - "Да, динамические массивы надо явно распределять перед использованием."
Подскажите, пжлст, как это сделать.


Добавлено: 10-07-2014 11:01:46


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


1. У брокеров существует ограничение по количеству открытых ордеров, в т.ч. и отложенных. Обычно не больше 200 шт.
Смотрите какую ошибку выдаёт эксперт.
2. Мне не совсем понятно зачем устанавливать несколько советников? Скорее всего совы конфликтуют между собой. В терминале предусмотрен всего один поток для связи с сервером и если он занят каким нибудь экспертом или скриптом, то другой получает ошибку. Чтобы проверить занят ли поток используйте IsTradeAllowed().
Лучше пусть один эксперт торгует всеми парами...
3. Точно сказать не могу, но у меня 6 работаю круглосуточно. Изменено пользователем pagatr
Ссылка на сообщение
Поделиться на другие сайты

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

Вопроса больше нет)
Если кому интересно как синхронизировать терминалы, я нашел 3 способа:

1)Файлы
2)Pipe каналы
3)Memory Mapped Files

Я не силен в программировании, поэтому не знал как можно это сделать(синхронизацию терминалов).

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

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


Добрый день .
3 урок .
Пишет такие предупреждения в тестере :
return value of 'OrderModify' should be checked
return value of 'OrderClose' should be checked
return value of 'OrderSelect' should be checked

Подскажите что не так .



Возвращают булевые значения проверь короче:
if(OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,Blue)){            

Print("OK");
}else
Print("NO");

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

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

Привет всем!!! Подскажите пожалуйста, Как программно, изменить обьем лота каждую неделю! Например каждый понедельник - увеличение лота на 0.1

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

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


Привет всем!!! Подскажите пожалуйста, Как программно, изменить обьем лота каждую неделю! Например каждый понедельник - увеличение лота на 0.1



А чё там сложного проверь на день недели
int  DayOfWeek();


0-воскресенье 1,2,3..... Загляни в документы и всё станет ясно!
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

ТИПА -
if (DayOfWeek()==1)
Lot=Lot+0.1;
???
Но надо ведь что бы сова запоминал обьем последнего лота и плюсовал после закрытия ордера!

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

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


ТИПА -
if (DayOfWeek()==1)
Lot=Lot+0.1;
???
Но надо ведь что бы сова запоминал обьем последнего лота и плюсовал после закрытия ордера!



Сделай 2 переменные lot и fixLot fixLot выведи как эхтерн и её увеличивай! А потом просто приравнивай к lot
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте!
Я чуть чуть не в тему, есть ли версия курсов для Андроида, хотел на даче посмотреть, а то дома текучка заедает?
Спасибо Юра.

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

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

Здравствуйте, Сергей! Огромное спасибо за Ваш труд по созданию обучающих уроков.
Напишите пожалуйста урок как переписать советник из МТ4 в МТ5. Очень нужно для увеличения скорости оптимизации.
Спасибо!

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

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

Столкнулся с необъяснимым (мной) явлением - на Н4 советник работает прекрасно, как задумано открывает ордера, как задумано закрывает и трейлинг стоп работает, даже какие то пункты зарабатывает, мало только. Тестирую на меньшем тайм фрейме график идет устойчиво вниз с небольшими отклонениями вверх и тестер не оптимизирует параметры, соответствующие разделы пусты. И при этом выдаёт ошибку: 2014.07.24 17:59:12.880 TestGenerator: unmatched data error (volume limit 814 at 2014.07.22 06:00 exceeded). Гугл переводчик говорит "Бесподобная ошибка". Анализ сделок показывает там где нужно было Buy советник делает Sell и наоборот. С чем это может быть связано, как объяснить, на Н1 всё работает прекрасно? О советнике: третий урок + трейлинг стоп, индикаторы MA и SSRC, совсем простенький я только учусь. На всякий случай если кто нибудь заинтересуется прикладываю советник.

И сразу второй вопрос: Как сделать, что бы алерт сигналил определённое количество раз, два, три пять, но не более чем задано?
Заранее благодарю.


TrailingStop.mq4

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

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

Привет ВСЕМ!!!
Вопрос прогерам!
Сначала о сове:
Советник при определенных настройках, сам меняет свой Magic, в процессе работы.
Все работает как надо, но есть проблема!
В начале новой недели или при каких то сбоях в связи, он возвращается к первоначальному Magic, который прописан в настройках.
Как сделать, например так что бы советник скидывал последние настройки во внешний файл, и подгружал при необходимости.
При сбоях и в начале новой недели?
Ну или при открытии терминала, в котором он же уже работал и выставил ордера! Например при отключении электроэнергии в сети!!!

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

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

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

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

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

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

Войти

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

Войти

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


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

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