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

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


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

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

Сергей ,будьте добры провести урок по написанию советника ( индикатора) "Экономический календарь " , я знаю готовые эксперты есть , но хочется самому писать такие штуки , которые строят календари и т.п. сайт желательно использовать investig.com или в связке несколько сайтов и кто первый обновит данные , те данные советник и покажет - главное скорость в получении информации . Чтобы в терминале были все нужные графы :

Календарь.png

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

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

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

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

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

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

Перейти

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

Перейти

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

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

Возник вопрос касаемо библиотек, мне надо, чтобы функции библиотеки использовали внешние (редактируемые перед запуском) переменные, в интернете видел, что достаточно в самой библиотеке продублировать необходимые extern/input переменные, но тогда во время работы программы они не подменяются переменными из основной программы, править каждую функцию как-то не очень хочется передавая кучу лишних параметров, особенно ели extern подразумевает под собой изменения в ходе выполнения.

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
SVS696 может не понял вопрос...
У меня во внешней библиотеке функции ММ и относящиеся к ним input переменные. библиотека подключается к сове - происходит тупо копирование кода библиотеки в то место совы, где была объявлена библиотека. Т.е. input переменные из библиотеки Вы можете увидеть среди переменных совы, если туда вставите вызов типа: #include <_mm.mqh>
Кстати в сове переменные из библиотеки доступны как свои.
Ссылка на сообщение
Поделиться на другие сайты

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


SVS696 может не понял вопрос...
У меня во внешней библиотеке функции ММ и относящиеся к ним input переменные. библиотека подключается к сове - происходит тупо копирование кода библиотеки в то место совы, где была объявлена библиотека. Т.е. input переменные из библиотеки Вы можете увидеть среди переменных совы, если туда вставите вызов типа: #include <_mm.mqh>
Кстати в сове переменные из библиотеки доступны как свои.


mqh же только заголовочный файл? Не, я знаю, что можно тупо туда код запихнуть, но это не совсем то.

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

Добавлено: 07-11-2017 17:27:32

если попытаться внешние переменные вставить внутри
#import "lib.ex4"
СЮДА Т.Е. вставить
#import

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

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

Значит не правильно понял...
1. Вы хотите создать общие переменные для библиотеки и совы?
2. Вы хотите непременно подключать компилированную библиотеку, а не компилированную не хотите?
Если сейчас правильно понял, то не знаю чем помочь.
Если это Ваша библиотека, то подключите её не компилированную и радуйтесь общим глобальным переменным - вообще не вижу препятствий.

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

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

Ребят открыл счет в альпари , и в терминале , при сделках стали выводиться комментарии типо таких 1[0] . Советники ни какие не висят , а счет стал комментироваться , что за ерунда , не отслеживает ли или не копирует ли сделки брокер ? хрень какая то ...

комменты.png

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

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

Здравствуйте! Подскажите что не правильно в этом блоке (он проводит только один цикл )

int GetProfitLoss()// Количество последних убыточных ордеров
{
int Loss = 0;
int N=30;
datetime lastCloseTime = 0;
int cnt = OrdersHistoryTotal();
for(int i = cnt-N; i {
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && lastCloseTime {
lastCloseTime = OrderCloseTime();
}
if (OrderProfit()
if(OrderProfit()>0) break;

}

return(Loss);
}

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

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


Подскажите что не правильно в этом блоке (он проводит только один цикл )


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

int GetProfitLoss()// Количество последних убыточных ордеров
{
int Loss = 0;
int N=30;
int cnt = OrdersHistoryTotal();
for(int i = cnt-N; i {
if (!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) continue;
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderProfit() }
return(Loss);
}
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

1. Да я считаю ордера на всех парах и магиках.

Спасибо за ваш ответ. Не подскажете как сделать чтобы он считал количество последних убыточных ордеров, после профитных, а не N количество.

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

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

Так начните цикл с конца - с последнего закрытого, тогда Вы правильно написали условие if(OrderProfit()>0) break;
т.е.:
int cnt = OrdersHistoryTotal();
for ( int i = cnt-1; i >= 0; i-- )

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

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

Сделал, только снова что то не так :-s

int GetProfitLoss()// Убыток по закрытым ордерам (количество последних убыточных ордеров)
{
int Loss = 0;
int cnt = OrdersHistoryTotal();
for( int i = cnt-1; i {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId)
{
if (OrderProfit()
if(OrderProfit()>0) break;
}
}
}
return(Loss);
}

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

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

Вы писали, что считаете ордера на всех парах и магиках, а зачем тогда проверка?
Это условие напишите так: if ( OrderProfit() В остальном замечаний нет - будет работать.

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

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

Всё спасибо большое. В общем как то так, пришлось условие немного подкорректировать ( i >= 0, а не i
int GetProfitLoss()// Убыток по закрытым ордерам (количество последних убыточных ордеров)
{
int Loss = 0;
int cnt = OrdersHistoryTotal();
for( int i = cnt-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId)
{
if (OrderProfit() }
}
}
return(Loss);
}

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

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

Здравствуйте трейдеры! Помогите решить проблему с автоматизацией стратегии. Суть заключается в том, что бы входить в сделку лишь на первой свече пользовательского индикатора "Xo" (Скрин прилагаю).
В данном советнике отображена функция входя в сделку на зеленых свечах и на продажу при красных (постоянное открытие). Однако мне нужно что бы вход был лишь по первой свече данного индикатора. Как обыграть эту задачу, просто ума не приложу ~x( ~x( ~x( Буду рад любой помощи. Заранее Спасибо.

Xo.mq4
Советник.mq4
Безымянный.png

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

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

Как обыграть эту задачу, просто ума не приложу

У индикатора 2 буфера - зелёный и красный. Условие на покупку:
if ( red_buf[2] == 0 && green_buf[1] >=1 ) open_buy(); // переменные и функции вымышленные (на всякий)
[2] - номер бара на котором брать значение индюка.
Ссылка на сообщение
Поделиться на другие сайты

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

Извините, но я не совсем понял... После взятия значений индикатора, я пишу условие на наличие баров одного из цветов и присваиваю им массив (т.е. номер бара)... Это так должно выглядеть? (если да, то по какой причине возникает ошибка array required?)

//+------------------------------------------------------------------+
green_buf = iCustom (NULL,0,"Xo", KirPER , 0, 0);
red_buf = iCustom (NULL,0,"Xo", KirPER , 1, 0);
//+------------------------------------------------------------------+ Сделка на продажу
if (red_buf[1] >= 1 && green_buf[2] == 0 )
{
if (CountSell() == 0 && DoTrades == TRUE) //+ Проверка наличия ордеров в рынке
{
if (OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, sl_s, tp_s, comment, Magic, 0, clrRed) {
Print ("Ошибка открытия ордер на продажу");
}
}
}
//+------------------------------------------------------------------+ Сделка на покупку
if (red_buf[2] == 0 && green_buf[1] >=1)
{
if (CountBuy ()==0 && DoTrades == TRUE) //+ Проверка наличия ордеров в рынке
{
if (OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, sl_b, tp_b, comment, Magic, 0, clrBlue) {
Print ("Ошибка открытия ордер на покупку");
}
}
}
//+------------------------------------------------------------------+

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Александр_F всё немного сложнее. iCustom возвращает значение индикатора на запрашиваемом баре, нам нужно знать 4 значения: зелёный на 1 и 2 баре и красный на 1 и 2 баре. Как их получить, есть несколько способов, самый доступный для понимания, но затратный с точки зрения ресурсов компа:
red_buf1 = iCustom (NULL,0,"Xo", KirPER , 1, 1);
red_buf2 = iCustom (NULL,0,"Xo", KirPER , 1, 2);
green_buf1 = iCustom (NULL,0,"Xo", KirPER , 0, 1);
green_buf2 = iCustom (NULL,0,"Xo", KirPER , 0, 2);
и далее без массивов - if (red_buf1 >= 1 && green_buf2 == 0 )
я не советую использовать значение индюка на 0 баре, ибо там может быть хаос.
если индюк перерисовывает, то входы, в итоге, будут не соответствовать картинке.
Ссылка на сообщение
Поделиться на другие сайты

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

0ll, Спасибо за ваш ответ. Однако данная функция не решила проблему. Сделки стали открываться на третьей свече сигналов индикатора и в дальнейшем советник продолжает серию открытия ордеров (Скрин прилагаю)

//+------------------------------------------------------------------+
red_buf1 = iCustom (NULL,0,"Xo", KirPER , 1, 1);
red_buf2 = iCustom (NULL,0,"Xo", KirPER , 1, 2);
green_buf1 = iCustom (NULL,0,"Xo", KirPER , 0, 1);
green_buf2 = iCustom (NULL,0,"Xo", KirPER , 0, 2);
//+------------------------------------------------------------------+ Сделка на продажу
if (red_buf1 {
if (CountSell() == 0 && DoTrades == TRUE)
{
if (OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, sl_s, tp_s, comment, Magic, 0, clrRed) {
Print ("Ошибка открытия ордер на продажу");
}
}
}
//+------------------------------------------------------------------+ Сделка на покупку
if (red_buf2 == 0 && green_buf1 >= 1)
{
if (CountBuy ()==0 && DoTrades == TRUE)
{
if (OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, sl_b, tp_b, comment, Magic, 0, clrBlue) {
Print ("Ошибка открытия ордер на покупку");
}
}
}
//+------------------------------------------------------------------+

Безымянный.png

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

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

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

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

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

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

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

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

Не знаю поможет ли точно:

можно попробовать на каждом баре писать значения индюка в bool
shift_red_1 =
shift_red_2 =
shift_green_1 =
shuft_green_2 =
if(shift_red_1==true&&shift_red_2==true){...}

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Александр_F трудно стаказать что-то, надо изучать код. По своему опыту скажу, индюки показывающие направление торговли сами по себе бесполезны, их потолок - фильтрация сделок по другим сигналам. имхо.
Ссылка на сообщение
Поделиться на другие сайты

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

0ll, так то да, пользы в них очень мало. Но если их использовать в торговле бинарными опционами, где прибыль зависит от положения цены выше или ниже точки открытия. Такие советники могут быть очень полезны. Скажем в рамках 2-3 баров. П.э. я просто хотел поэкспериментировать с данными индикаторами. А уже потом перевести данный код в торговлю на БО (там всего горстка отличий)

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

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

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

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

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

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

Войти

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

Войти

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


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

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