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

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


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

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

Пробуйте. Только что-то не верится насчёт перерисовки... - на каждом тике вызывает сам-себя раз 300. Будет рисовать и вешать терем.

TMA_Fair.mq4
TMA_Fair.ex4

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

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

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

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

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

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

Перейти

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

Перейти

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

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

Как зделать приоритет на нажатие кнопки? Если на заднем плане есть обьект, то он обязательно вылезет при нажатий на кнопку?


сам код

  string S_button_2="Trade";
void F_Button_2()
{
ObjectCreate ("S_Buttom_2", OBJ_BUTTON, 0, 0, 0);
ObjectSetText("S_Buttom_2", S_button_2, 12, "LimeGreen11", clrBlack);
//ObjectSetInteger (0,"S_Buttom_2", OBJPROP_ZORDER, 10);
//ObjectSet ("S_Buttom_2", OBJPROP_BORDER_COLOR, clrBlack);
ObjectSet ("S_Buttom_2", OBJPROP_FONTSIZE, 12);
ObjectSet ("S_Buttom_2", OBJPROP_BGCOLOR, clrGold);
ObjectSet ("S_Buttom_2", OBJPROP_COLOR, clrBlack);
ObjectSet ("S_Buttom_2", OBJPROP_CORNER, 2);
ObjectSet ("S_Buttom_2", OBJPROP_STATE, state_2);
ObjectSet ("S_Buttom_2", OBJPROP_BACK, false);
ObjectSet ("S_Buttom_2" ,OBJPROP_XSIZE, 50);
ObjectSet ("S_Buttom_2", OBJPROP_YSIZE, 20);
ObjectSet ("S_Buttom_2", OBJPROP_XDISTANCE, 365);
ObjectSet ("S_Buttom_2", OBJPROP_YDISTANCE, 22);
//if(ObjectFind(0,"S_Buttom")==false)Print("Ошибка создание S_Buttom, код ошибки = ",GetLastError());
}
Ссылка на сообщение
Поделиться на другие сайты

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

Как зделать приоритет на нажатие кнопки?


ObjectSetInteger свойство OBJPROP_ZORDER:
Приоритет графического объекта на получение события нажатия мышки на графике (CHARTEVENT_CLICK). По умолчанию при создании значение выставляется равным нулю, но при необходимости можно повысить приоритет. При наложении объектов друг на друга событие CHARTEVENT_CLICK получит только один объект, чей приоритет выше остальных.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

Всем привет, у меня вопрос к программистам, написал советник, сам не профи а только изучаю. Советник торгует по машке, ради интереса вставил в него условие на противоположный ордер если будет просадка. Вроде все работает, проверял каждую строчку, а теперь наткнулся на то чего вообще не могу понять. Как бы нет никакой ошибки при компиляции но задуманное почему-то не работает. А работать должно так: противоположный ордер набирает профит и выключается при условии, на сумму заработанного профита отключаются первые ордера которые в просадке, ну и т.д. Но вот именно этот момент не работает, вычислил откуда идет как бы конфликт: если отключить функцию IfOrderYetOpen, то начинает все работать, но при этом открываются несколько противоположных ордеров что не желательно, и ещё возможен какой-то логический конфликт этой функции с функцией ClosePosBySizeProfit.
Помогите пож-та разобраться)

test_ma.mq4

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

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

Смысл не понятен, если заменить на другое слово, так должно быть?


Всем привет, у меня вопрос к программистам, написал советник, сам не профи а только изучаю. Советник торгует по машке, ради интереса вставил в него условие на противоположный ордер если будет просадка. Вроде все работает, проверял каждую строчку, а теперь наткнулся на то чего вообще не могу понять. Как бы нет никакой ошибки при компиляции но задуманное почему-то не работает. А работать должно так: противоположный ордер набирает профит и ЗАКРЫВАЕТСЯ при условии, на сумму заработанного профита ЗАКРЫВАЮТСЯ первые ордера которые в просадке, ну и т.д. Но вот именно этот момент не работает, вычислил откуда идет как бы конфликт: если отключить функцию IfOrderYetOpen, то начинает все работать, но при этом открываются несколько противоположных ордеров что не желательно, и ещё возможен какой-то логический конфликт этой функции с функцией ClosePosBySizeProfit.



Уважаемые комрады, вот строчка ведь неправильная же у товарища for(int i=OrdersTotal()-1; i>=0; i--), он последний ордер не учитывает, помоему нужно без -1 ?
Изменено пользователем vitek01
Ссылка на сообщение
Поделиться на другие сайты

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

Уважаемые комрады, вот строчка ведь неправильная же у товарища for(int i=OrdersTotal()-1; i>=0; i--), он последний ордер не учитывает, помоему нужно без -1 ?



Да нет, все правильно. Выбор ордеров по позиции (SELECT_BY_POS) в списке всех открытых ордеров начинается с нуля. Таким образом, если OrdersTotal() вернул десять, то нумерация ордеров в списке будет идти от нуля до 9.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Мой вопрос вообще неразрешимый?

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

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


Мой вопрос вообще неразрешимый?

теоретически разрешимый, но практически интереса у публики не вызвал. Для начинающих - очень сложно, а для профи - скучно, ибо тупик там.

А я не собирался вводить в тупик, мой вопрос был технического характера, в процессе обучения пробовал менять условия и все получалось до этого момента, поэтому и попросил помощи. Это просто программный код в котором где-то что-то сломалось. Возможно он не принесет никакой выгоды, но мы же тут учимся и хотим все подняться на следующую ступеньку, так вот поэтому и хотелось бы знать где я споткнулся. Кто-то если поможет исправить ошибку, то я буду знать как это сделать и возможно этот советник уйдет в архив, а я получу опыт. Иначе зачем мы все здесь?!
Ссылка на сообщение
Поделиться на другие сайты

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

Кто-то если поможет исправить ошибку, то я буду знать как это сделать и возможно этот советник уйдет в архив, а я получу опыт. Иначе зачем мы все здесь?!

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

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

Подскажите, пожалуйста, что в этой строке не так?
datetime VL = ObjectGet("name",OBJPROP_TIME);
Хочу присвоить переменной координату времени расположения объекта.
Спасибо!

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

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


Подскажите, пожалуйста, что в этой строке не так?
datetime VL = ObjectGet("name",OBJPROP_TIME);
Хочу присвоить переменной координату времени расположения объекта.
Спасибо!



"ObjectGet

Возвращает значение указанного свойства объекта.



double ObjectGet( "
прям в справке написано.
Приведите значение к datetime.
Изменено пользователем djnet
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Здравствуйте, коллеги.

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

Спойлер

Просадка (Эквити минус балланс) отображается в комментарии.
Если просадка ещё опустилась - новое значение заменяет старое, и будет отображаться, пока не опуститься ещё ниже. и т.д.

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

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

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

в функции OnTick() :
static double MaxDD = 0;
if ( MaxDD это всё.
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

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

вместо a=b; такую запись: a=(b);. или вместо a=OrderLots(); a=(OrderLots());. В чём разница?

Единственное место, где нужно побольше скобочек это #define, подробнее в справке. Но в Вашем примере - разницы нет.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Подскажите, как в коде прописать так, чтобы ордера открывались только при открытии бара, а в безубыток ордера можно было бы перевести в любое время?

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

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

Подскажите, как в коде прописать так, чтобы ордера открывались только при открытии бара, а в безубыток ордера можно было бы перевести в любое время?

Например так:
OnTick(){

if ( OrderProfit() >= 0 ) SL2BU(); // переводим в БУ
if ( isNewBar() ) checkSignal(); // проверяем условия открытия
}
Ордер должен быть активен, функцию isNewBar() можно найти и здесь в теме и в инете.

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

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

всем привет! друзья помогите с решением как облегчить тяжелый советник.
заранее о оговорюсь что он использует расчеты нескольких индикаторов.
есть варианты того что бы могло помочь:
1. совместить все индикаторы в один?
2. переместить все расчеты в сову? но, хотя как я слышал от этого только хуже.
3.я использую 5-ти знак. может заставить расчеты считать по 4-му знаку?
пс. сам терминал облегчен. это, спасибо если что не интересует.
Ссылка на сообщение
Поделиться на другие сайты

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

Универсальное решение- считывать показания индикаторов 1 раз в свечу.
Все остальное перечисленное , ИМХО, не поможет .(помещать код индикатора в свечу говорят поможет, но на сколько...)

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

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

2. переместить все расчеты в сову? но, хотя как я слышал от этого только хуже.

Зависит от того что и как переносить - возьмём машку: в советнике Вы используете 2 значения на 2 и на 1 баре, а в индикаторе хранятся 1000 значений машки - есть смысл перенести расчёт в сову.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

в советнике Вы используете 2 значения на 2 и на 1 баре, а в индикаторе хранятся 1000 значений машки - есть смысл перенести расчёт в сову.


0ll, хранение в индикаторе 1000 значений разве влияет на производительность? Память- да, отъедает... Но расчет первой тысячи, как правило, в OnInit происходит...
Или нет?
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Войти

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

Войти

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


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

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