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

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


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

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

t>>=1 - бинарный сдвиг вправо на 1 бит. В десятичном виде это будет как целочисленное деление на 2.
|= - побитовое "или".

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

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

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

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

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

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

Перейти

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

Перейти

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

Перейти
Обучение языку MQL4 под MetaTrader 4 Опубликовано
geugene читайте:
Справочник MQL4 / Основы языка / Операции и выражения / Побитовые операции

Сочетание "|=" мне вообще непонятно.

Это означает: присвоить переменной period результат побитового "ИЛИ" переменных period и t

ПС: расшифровать смысл данного цикла без остального кода нельзя. Побитовые операции очень эффективны, если знать как ими пользоваться.

Добавлено: 21-12-2018 11:02:34

t>>=1 - бинарный сдвиг вправо на 1 бит. В десятичном виде это будет как целочисленное деление на 2.

Ну раз уж взялись объяснять, то приведите пример, распишите как это работает на битовом уровне - многим будет интересно.
Ссылка на сообщение
Поделиться на другие сайты

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


t>>=1 - бинарный сдвиг вправо на 1 бит. В десятичном виде это будет как целочисленное деление на 2.
|= - побитовое "или".



Ок, на что их заменить для адеватных операторов?
t = t/2;
??
Ссылка на сообщение
Поделиться на другие сайты

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

Бинарный сдвиг вправо.
Предположим, t=75 , в двоичной системе выглядит, как
1001011
Сдвиг вправо сдвигает вправо все биты на 1, последний бит справа пропадает, а освободившийся бит слева заполняется нулём.
0100101
В десятичной системе это 37.
Число 74 выглядит в двоичной системе как 1001010, и после сдвига вправо получится тоже 0100101 (37). Т.е., так как последний значащий бит пропадает, то чётное и следующее за ним нечётное число после сдвига дают одно и то же значение.

Побитовое "ИЛИ".
Допустим, t = 10, в двоичном виде будет, как 1010, а period = 19, в двоичном виде будет, как 10011. Добавим недостающие нули слева к 1010, чтобы получилось одинаковое количество цифр. Получается:
01010
10011

Побитовое "ИЛИ" - к каждой паре битов применяется логическое "ИЛИ" - то есть, если хотя бы один из операндов равен 1, то результат равен 1, иначе результат равен 0.
Получается:
11011
Что в десятичной системе равно 27.

В общем, понять, что делает данный цикл, без остальной части кода - нельзя. Предполагаю, что period будет равен 2[sup]n-1[/sup]-1, где n - кол-во значащих бит в изначальном значении t.

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

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

Народ, кто подскажет как ограничить рисование до одной стрелки при выполнении условия? Рисует стрелки на каждом баре, если условие выполняется.

int OnCalculate(......)
{
for (i = 0; i {
MABuffer1 = iMA(NULL, 0, PeriodMA1, 0, MODE_EMA, PRICE_CLOSE, i);
MABuffer2 = iMA(NULL, 0, PeriodMA2, 0, MODE_EMA, PRICE_CLOSE, i);
MABuffer3 = iMA(NULL, 0, PeriodMA3, 0, MODE_EMA, PRICE_CLOSE, i);
MABuffer4 = iMA(NULL, 0, PeriodMA4, 0, MODE_EMA, PRICE_CLOSE, i);

if (MABuffer1 > MABuffer2 && MABuffer2 > MABuffer3 && MABuffer3 > MABuffer4 && iClose(NULL,0,i) > MABuffer4)
{
ArrowUP = High + 5 * Point;
}
}

return(rates_total);
}

Смотрел рзные стрелочные индикаторы, и там похожий код, но рисует одну стрелку после привыполнении условия.

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

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

Смотрел рзные стрелочные индикаторы, и там похожий код, но рисует одну стрелку после привыполнении условия.

видимо похож, но не совсем...
функция OnCalculate запускается на каждом тике, а далее цикл по всем барам, т.е. Ваш индикатор на каждом тике пересчитывает все бары - это не правильно.
Но не в этом причина рисования стрелки на каждом баре. Вам нужно строго контролировать последовательность сигналов, т.е. за UP должен следовать DOWN. Введите переменную last = 0(UP) или 1 (DOWN), Ваше условие UP дополните проверкой: && last == 1
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Ребяты , подскажите... Сигнал на открытие сделки появляется и исчезает внутри свечи( особенно на хвостах). При открытии новой свечи сигнал уже постоянный.
Как написать в сове , чтобы ордер открывался не внутри свечи, а на открытии новой свечи , когда сигнал уже постоянный.
Сдвиг (Shift) на одну свечу - это уже слишком далеко получается.

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

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

Как написать в сове , чтобы ордер открывался не внутри свечи, а на открытии новой свечи

Есть функция, которая сигналит на открытии свечи и есть сигнал индюка. У Вас сейчас условие открытия сделки if ( signal ) Open(...), а нужно: if ( isNewBar() && signal ) Open(...);

bool isNewBar()
{ static datetime newB;
if (newB == Time[0]) return(false); newB = Time[0]; return(true);
}
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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


Добавлено: 05-01-2019 10:23:11

Сама поняла свою ошибку ;) Исторические ордера нельзя отбирать по тикету. Изменено пользователем Larcher
Ссылка на сообщение
Поделиться на другие сайты

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

Исторические ордера нельзя отбирать по тикету.

Это не так. Любой ордер можно выбирать по тикету, после выбора можно посмотреть дату закрытия, если =0, то ордер не закрыт, если >0 - значит закрыт.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

Подскажите , как в коде МАшку вставить не на график цены , а в окно к Стохастику ? Вручную выбираю Применить к Previous Indicators Data , а в коде нет такого - там только применять к виду МА ( Open, Close )..

Заранее благодарен !

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

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

Подскажите , как в коде МАшку вставить не на график цены , а в окно к Стохастику ?

Нужно побарно сглаживать стохастик, формула экспоненциального сглаживания проста:
stohMA = ( stoh + stohMA[i-1] * (periodMA -1) ) / periodMA;
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Нужно побарно сглаживать стохастик, формула экспоненциального сглаживания проста:
stohMA = ( stoh + stohMA[i-1] * (periodMA -1) ) / periodMA;



Спасибо.. Но я так понял , что просто вставить МА в нижнее окно нельзя ? Ну допустим у меня там не стохастик , а RVI или ATR , и на них нужно наложить МА. Новая формула нужна , чтоб МА на них выводилась ?




Sorry , дошло до меня ! Стохастик ведь и есть две МА ... Нужно просто одну выводить со своими параметрами в нижнее окно ! Изменено пользователем batmanuyga
Ссылка на сообщение
Поделиться на другие сайты

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

Доброго дня всем! Подскажите пожалуйста, кто знает, как сделать выпадающий список на графике. Вроде как нужно подключать Include а а какой и как не разобрался ~x(

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Kasatik готового решения для Вас нет - сложные интерфейсы ни кто не использует. Метаквоты сделали что-то, есть ListView и ComboBox - пробуйте.
Ссылка на сообщение
Поделиться на другие сайты

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

Kasatik готового решения для Вас нет - сложные интерфейсы ни кто не использует. Метаквоты сделали что-то, есть ListView и ComboBox - пробуйте.


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

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

Новый урок:
http://tradelikeapro.ru/mql4-grafik-ekviti-i-statistika/


очень полезный на мой взгляд урок. спасибо.
но все таки хотелось бы извлечь не "относительную" просадку а "максимальную".
по идее для этого надо из:
if(MaxBal != 0 && MinBal != 0 && MaxDrawdown MaxDrawdown = ((MaxBal - MinBal)/AccountBalance())*100;
}
записать как то так ":
if(MaxBal != 0 && MinBal != 0 && MaxDrawdown MaxDrawdown = (MaxBal - MinBal);
так выйдет или нет? Изменено пользователем Ar4i
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый вечер, друзья! Хотел узнать, есть ли уроки по графическим объектом ну, например, прямоугольники, стрелочки или кнопки, если создал кнопку и на нее нажал, чтоб она нарисовала новый объект прямоугольник или линии. Есть такие уроки.

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

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

в уроке "закономерности свечных паттернов" рисуем стрелочки, а в уроке "копировщик сделок для MT" было описание кнопки. дальше заглядывать в справку и экспериментировать.


Добавлено: 20-01-2019 16:22:54

вопрос про slippage в наших советниках. как он работает на реале при:
Market Execution(тип счета standart) и instant execution(ecn счетах).
то есть конкретизирую: вариант на Market эта настройка есть ограничительным фактором на отклонение или она на ecn до одного места?
и на оборот на счете standart, если задать скажем slippage=30; то будут ли реквоты до заданного отклонения?
и еще как наш slippage может взаимодействовать с настройкой функции в мт4: "установкой максимального отклонения цены". опять таки в двух вариантах счета? счета? Изменено пользователем Ar4i
Ссылка на сообщение
Поделиться на другие сайты

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

Всем добрый день. Созрел нубский вопрос: Как сделать оповещение о сделках например на почту?, но не стандартным методом, а внутри совы, что бы писала имя советника, параметры например, ну и погоду там, настроение и так далее. Может можно еще более продвинутые методы оповещения использовать, те же пуш уведомления (которые в стандартном исполнение весьма удобны, но малоинформативны если на счете торгует зоопарк советников). Вообщем прошу пнуть меня в нужном направлении :)) Спасибо.

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

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

Здравствуйте " содрал" код для перевода в безубыток, подскажите пожалуйста что с ним не так, почему не работает? Заранее спасибо!!!

Спойлер

if (BULevel!=0) BU();
//+------------------------------------------------------------------+
void BU()
{
for(int i=0; i {
if(OrderSelect(i, SELECT_BY_POS))
{
if(OrderType()==OP_BUY)
{
if(OrderOpenPrice()OrderStopLoss())
{
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Green);
}
}

if(OrderType() == OP_SELL)
{
if(OrderOpenPrice()>=(Ask+BULevel)&&OrderOpenPrice() {
OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice(),OrderTakeProfit(),0,Red);
}
}
}
}
}
//------------------------------------------------------------------+

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

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

BULevel в каких значениях задаётся? Сейчас он будет работать, если задавать в абсолютных значениях, т.е., 0.00001. Чтобы задавать в пунктах (т.е., 1), нужно умножать на _Point, т.е. Ask+BULevel*_Point (пример для "новых" пунктов).
А вообще, в условиях бы поменять местами переменные. Если Ask-BULevel изменяется, а OrderOpenPrice - нет, то было бы понятнее Ask-BULevel=OrderOpenPrice()+BULevel (для Buy). Вроде бы, в оригинале всё равно условия неправильные (даже без перестановки переменных).

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

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

Здравствуйте " содрал" код для перевода в безубыток, подскажите пожалуйста что с ним не так, почему не работает?

Не там содрали... Этот код не рабочий.
К посту machine добавлю ошибку выбора ордера, вот правильная запись: OrderSelect ( i, SELECT_BY_POS, MODE_TRADES );
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Войти

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

Войти

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


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

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