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

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


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

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

Oll , спасибо за помощь!!! Но тестировать все равно не возможно, даже, за прошлую неделю - тормозит ужасно! Только, вот, почему-то, другие советники хорошо тестируются, при любых условиях... ~x(

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

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

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

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

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

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

Перейти

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

Перейти

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

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

Убрал все лишние переменные типа "string" из индикаторов, ошибка пропала
Вот только ордера не открываются все равно

Цитата

Вы определили 2 буфера:
//---- 2 индикаторных буффера использованы для счёта
SetIndexBuffer(0, buf_1); // 0
SetIndexBuffer(1, buf_2); // 1
Вы их и читаете на 1-баре


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

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

Вот это не совсем понял...

Вы спросили: "А я хоть правильно проверяю буфер индикатора? Больше нуля он должен быть, как я понимаю..." - я ответил: правильно - 2 буфера №0 и №1.
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Sany2912, будьте более внимательный при написании советников. Во первых в строках 57-62 не стоит использовать функцию iCustom лучше сразу взять функции iBand и iStohastic, во вторых если что то зависает то либо много математических расчетов, либо косяк в цикле. В вашем случае 99 и 110 строки, Нарушена логика работы с оператором for. Строки должны выглядеть for (int q = OrdersTotal()-1; q>=0; q--).
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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



Действительно в уроке Сергей (xbms) в конце упомянул что необходимо в условия добавить ещё индикатор , например RSI. Чтоб убедиться что цена двинулась от границ канала TMA и одновременно из зон перекупленности или перепроданности индикатора RSI. Вот строка кода с условиями как добавить RSI в неё ??? if (Bid >= PriceHight && CountSell() == 0) Где указать что будут использоваться оба индикатора???

Вам нужно описать РСИ: rsi = iRSI(NULL,0,RSIPeriod,PRICE_CLOSE,1); и в условие на вход дописать:
if (Bid >= PriceHight && rci && CountSell() == 0) ...
Вместо 70 можно писать RSI_Up и вывести его во внешние настройки (вместе с RSI_Down)

Добрый день и спасибо огромное Вам 0ll . По аналогии могу вписать в код советника и "СТОХАСТИК" ???
так же объявив внешние
extern int stohastic_period=14;
extern int stohastic_Up=80;
extern int stohastic_Down=20;
нужен ли ? double StochasticBuffer[];
объявляется стохастик так ??? stohastic=iStochastic(NULL,0,stohastic_period,3,3,MODE_SMA,0,MODE_MAIN,shift);
и в условия вставить так ??? if (Bid >= PriceHight && stohastic && CountSell() == 0)
Ссылка на сообщение
Поделиться на другие сайты

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


нужен ли ? double StochasticBuffer[];
объявляется стохастик так ??? stohastic=iStochastic(NULL,0,stohastic_period,3,3,MODE_SMA,0,MODE_MAIN,shift);
и в условия вставить так ??? if (Bid >= PriceHight && stohastic && CountSell() == 0)

Зачем Вам StochasticBuffer[]? - где Вы это нашли?
про объявление стохастика лучше смотрите справку.
условия примерно правильно - я-ж не знаю как Вы хотите стоха использовать...
Ссылка на сообщение
Поделиться на другие сайты

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

Знающие помогите, как сделать так чтобы этот бот открывал только один ордер на 1 сигнал.
Шас он так работает....допустим сигнал на сел....он открывает ордер на сел при достижении ТП или СЛ он опять открывает на сел....как сделать чтоб он ждал сигнал на бай...а не лепил дальше сеЛ!?
Думаю понятно объяснил)))

e-parabolic-2.0.mq4

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

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




условия примерно правильно - я-ж не знаю как Вы хотите стоха использовать...

Спасибо огромное Вам 0ll за ответ, это в продолжение разговора о советнике которого в уроке №3 Сергей (xbms) преподавал. Работа в канале ТМА, и в подтверждении входа дополнительно убедиться что цена двинулась от границ канала TMA и одновременно из зон перекупленности или перепроданности стохастик . Но не базовый, а планирую реализовать с ОБЯЗАТЕЛЬНЫМ УСЛОВИЕМ, пересечениями зелёной и красной между собой, линий стохастика.Если подскажите как реализовать в коде буду признателен. Для наглядности пересечения отметил на приложенном фото.

Добавлено: 03-04-2015 09:30:19





условия примерно правильно - я-ж не знаю как Вы хотите стоха использовать...

Спасибо огромное Вам 0ll за ответ, это в продолжение разговора о советнике которого в уроке №3 Сергей (xbms) преподавал. Работа в канале ТМА, и в подтверждении входа дополнительно убедиться что цена двинулась от границ канала TMA и одновременно из зон перекупленности или перепроданности стохастик . Но не базовый, а планирую реализовать с ОБЯЗАТЕЛЬНЫМ УСЛОВИЕМ, пересечениями зелёной и красной между собой, линий стохастика.Если подскажите как реализовать в коде буду признателен. Для наглядности пересечения отметил на приложенном фото.

При компиляции под новым билдом, кода советника из №3 урока, выходят ошибки
'Sumbol' - function not defined
implicit conversion from 'number' to 'string'
'i' - undeclared identifier
'Sumbol' - function not defined
implicit conversion from 'number' to 'string'
'Sumbol' - function not defined
implicit conversion from 'number' to 'string'
4 error(s), 3 warning(s)
Код советника прилагаю, что я упустил?

_ЛИНИЙ_СТОХАСТИКА.JPG
test_3.mq4

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

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

Помогите пожалуйста разобраться - как работает OrderSend ?

if(OrdersTotal()==0)
{
if(!Vkl_TP_SL)
{
if(Fast_MA_2Slow_MA_1)
{
if(!OrderSend(Symbol(),OP_BUY,Lots,Ask,30,0,0,NULL,Magic,0,clrBlue))
Print("Ошибка окрытия BUY: ",GetLastError());
}
if(Fast_MA_2>Slow_MA_2&&Fast_MA_1 {
if(!OrderSend(Symbol(),OP_SELL,Lots,Bid,30,0,0,NULL,Magic,0,clrRed))
Print("Ошибка окрытия SELL: ",GetLastError());
}
}

Не пойму применения "отрицания ! ".
Во первых int OrderSend(), и еще " логическое отрицание (!) применимо только к булевым переменным".
Запутался. в упор не понимаю. Везде " Ошибка открытия... "
Но этот код работает - проверял на тестере.

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
formula булева переменная имеет значение int (4 байта) Цитата из справочной системы:
Цитата

Необходимо отметить, что в логических выражениях допустимо использовать вместо типа bool другие целые или вещественные типы или выражения этих типов, компилятор не выдаст ошибки. В таком случае значение ноль будет интерпретировано как false, а все остальные значения как true


это значит, что когда ордер успешно размещён МТ возвращает № тикета > 0 - это true, НО в случае ошибки (в реальной работе, а не в тестере) будет возвращен -1, т.е. тоже true, ибо только 0 - false. В приведённом примере обработки ошибки по сути нет - вывод сообщения не считается, по этому всё работает, при серьёзном подходе к обработке ошибок открытия так делать нельзя!
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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



Вопрос: достаточно ли такого указания переменной? Для Ask варианта также modify1 определять или уже нужно modify2?Тоже касается и переменных OrderSelect, OrderDelete, OrderClose, OrderSend ...

Молодец, сам разобрался! Достаточно одной переменной на все функции, возвращающие true/false.

Низкий поклон Вам 0ll за доброту.И за пояснения. В коде осталось если ещё ошибки return value of 'OrderModify' should be checked , прописывая bool modify1= Выходит ошибка что уже объявлена 'modify1' - variable already defined ,если ничего не прописать то ошибки не исчезнут при компиляции
Ссылка на сообщение
Поделиться на другие сайты

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


В коде осталось если ещё ошибки return value of 'OrderModify' should be checked , прописывая bool modify1= Выходит ошибка что уже объявлена 'modify1' - variable already defined ,если ничего не прописать то ошибки не исчезнут при компиляции

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

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



В коде осталось если ещё ошибки return value of 'OrderModify' should be checked , прописывая bool modify1= Выходит ошибка что уже объявлена 'modify1' - variable already defined ,если ничего не прописать то ошибки не исчезнут при компиляции

Не понял... это вопрос? если всё-таки вопрос, то modify1 можно объявлять один раз, а потом пользоваться без объявления (если объявлена глобально).

Похоже не правильно объявил потому что остались предупреждения после компиляции. И ошибки 'HighesBuffer' - invalid array access
'LowesBuffer' - invalid array access
что исправить? если есть приведите пример кода
для наглядности ,пожалуйста.

глобальная_переменная2.JPG

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Гриня Массивы объявлены как динамические (безразмерные) которые перед употреблением нужно инициализировать и определить размерность (видимо это не сделано).
По поводу замечаний о проверке возвращаемого значения ф-циями ОрдерМодифи и ОрдерКлоуз - в чём проблема? Вы же объявили переменную modifi1, ну и присваивайте ей значения, возвращаемые этими функциями.
Ссылка на сообщение
Поделиться на другие сайты

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


Гриня Массивы объявлены как динамические (безразмерные) которые перед употреблением нужно инициализировать и определить размерность (видимо это не сделано).
По поводу замечаний о проверке возвращаемого значения ф-циями ОрдерМодифи и ОрдерКлоуз - в чём проблема? Вы же объявили переменную modifi1, ну и присваивайте ей значения, возвращаемые этими функциями.


Здравствуйте 0ll . Спасибо за пояснения! Достаточно ли, после объявления глобальной, такого решения ??? modify1=OrderModify(ticket2, OrderOpenPrice(), SL, TP, 0);
Я чтоб не путаться в следующий раз попрошу уточнения какие варианты наиболее грамотное решение?
Существуют решения следующие:
bool select1=OrderSelect..........
bool delete1=OrderDelete..........
bool close1=OrderClose..........
bool modify1=OrderModify..........
int send1=OrderSend..........
bool OrdSellMod = OrderModify(ticket,OrderOpenPrice(),SLSell,0,0);
bool mod=OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0);
bool sel=OrderSelect(tic,SELECT_BY_TICKET);
также Вы советуете bool res = OrderModify())


Добавлено: 06-04-2015 08:39:43

Домашнее задание по уроку №3 работа в канале по индикатору ТМА. Присоединяюсь к сообщениям от ar7319 и Deymos что советник пропускает входы в сделку при наличии условий !!! Недочёты :
1)Почему-то открывает только одну сделку. При закрытии ордера по TP, SL, или у противоположной границы -- далее тишина. Не входит в противоположную сторону при наличии условий Например у верхней границы сов поставил SELL. Но цена ушла вверх и сработал SL. Все, ордеров нет, цена выше PriceHigh канала, т.е. условия для открытия нового SELL. За сутки всего 8 сделок на 5-ти мин. остальные пропустил как "СЛЕПОЙ"
Фото прилагаю.
Способы лечения: частота проверок условий входа в сделку, слишком простой код условий, блок кода для отслеживания приближения цены к верхней или нижней границе канала. Возможно нужно во внешние переменные вывести и указать параметр в процентах. Приближение к границам канала.
Что ВЫ бы применили на практике ??? Чтоб он начал торговать по хорошему.

123.JPG

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
Гриня Вы очень напряжены. если Вы никак не используете возвращаемое значение от ф-ций типа ОрдерМодифи, то можете вообще ничего не присваивать - компилятор выдаст предупреждение, но сова будет работать. По поводу Вашего списка вариантов - используйте любой. Я иногда и таким пользуюсь:
if (!OrderSelect(no, SELECT_BY_POS, MODE_TRADES)) continue;

По поводу пропуска сделок. Я ранее писал, что xbms оставил в коде простенькие ошибки - для самостоятельного поиска. Так же неоднократно писал о перерисовке ТМА на глубину 2*Полупериода. Ставьте на тот-же график индикатор КС с тем-же периодом (он не рисует) и смотрите на истории где был канал ТМА (примерно) если-бы не перерисовался и была-ли там сделка.
Ссылка на сообщение
Поделиться на другие сайты

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

Как написать функцию которая считает количество баров с момент открытия ордера. ордер единственные.
Например:

поступил сигнал
открыли ордер
через N баров ордер закрыли. (N - внешняя переменная)

как написать функцию возвращающую количество баров с момента открытия ордера. (не дней, если на Д1 графике) а именно баров истории (т.к. есть выходные и неторговые дни)

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
fintech самое простое - узнать номер бара (= количество) по дате открытия, например
int barcount = iBarShift(NULL,мой_PERIOD,OrderOpenTime());
Ссылка на сообщение
Поделиться на другие сайты

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

Попробую, но тогда нужно какую-то функцию, которая будет определять OrderOpenTime() для открытого ордера (он будет единственный открытый для данного Magic) и возвращать значение OrderOpenTime() для подстановки в данную функцию, приведённую вами. как ее лучше написать ?

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

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

Тут вариантов ещё больше.
Можно при открытии ордера запоминать дату/время
или выбрать ордер по магику и тогда ОрдерОпенТайм будет работать.

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

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


Здравствуйте! Подскажите пожалуйста как сделать ограничение на количество открываемых ордеров (например, в серии не более 10 шт.)??? (это из урока №4)



Не знаю как в уроке сказано, а так, в настройках указать параметр:

extern int MaxOrders = 10;

затем:

if (Ваше условие на открытие ордера)
{
if (MaxOrders>OrdersTotal())
{
ваше действие
}
}
Ссылка на сообщение
Поделиться на другие сайты

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


Так же неоднократно писал о перерисовке ТМА на глубину 2*Полупериода. Ставьте на тот-же график индикатор КС с тем-же периодом (он не рисует) и смотрите на истории где был канал ТМА (примерно) если-бы не перерисовался и была-ли там сделка.


Доброго вечера 0ll , пусть ТМА рисует не корректно,но как объяснить сделки по ценам которые там не гуляли !!! Если судить по тестированию нашего советника из урока №3.
20 мая 2013 две сделки, а на графике цена на много выше,мы не могли войти там в сделку. фото приложил)))
Второй момент сделка №1 и №2 закрылась по цене 1,29417 и 1,29864, а хай этого дня вообще не поднимался выше 1,29006. Фото приложил , архив котировок брокера Фибо групп. Понимаю что это всего лишь видеоролик где xbms учит нас программированию,но цены несуществующие :-?


Добавлено: 07-04-2015 17:11:55

Не нарушается ли логика в последовательности действий ???
Если в коде указанны блок продаж Sell , потом блок покупок Buy . Потом блоки закрытия. В фото приведённом постом выше, мы одновременно находились в сделке и Buy и Sell по Евро Доллару.

Урок_№3_44.46_МИНУТ_.jpg
КОТИРОВКИ.JPG
test3.3.mq4

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

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

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

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

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

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

Войти

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

Войти

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


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

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