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

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


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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
DmitriyFX
А стрелки на каком баре появляются? Быть может не на нулевом, тогда пробуй первый, второй, третий.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Перейти

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

Перейти

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

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


DmitriyFX
А стрелки на каком баре появляются? Быть может не на нулевом, тогда пробуй первый, второй, третий.


Пробовал 0 и 1. Появляется, поидее, на нулевом.
А всё, проблему решил. Оказалось, параметры не так ввёл. Изменено пользователем DmitriyFX
Ссылка на сообщение
Поделиться на другие сайты

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

Всем привет!!!
Давно уже посматриваю на страничку

Спойлер

macd-ichimoku.narod.ru

- ну и вот в праздничные дни появилось время для того чтобы попробовать самому написать сие чудо!!!
Начнем с того что каких либо знаний в программировании нет, ну кроме паскаль ++ в мохнатом 10 классе... Решил я значит сесть и попробовать прочитать справочник по MQL - но увидев там 4к страниц понял что лучше оперативно пользоваться справкой.... и решать проблемы поступательными движениями... Нашел видео-урок по внедрению уже готовых сторонних индикаторов в код светника... Но и тут оказалось не все так просто, уроки эти мягко сказать староваты.
Скачал 5й терминал от альпари, дабы функция тестирования советников и их оптимизации там более привлекательна чем на 4м, запустил метаэдитор и начал писать....
Что не новая закорючка - так компилятор ругается, вобщем добрался я до исполнения сделок и тут сел окончательно... то что было ранее представлено OP_BUY или OP_SELL уже не воспринимаются... ,но с этим я разобрался ORDER_TYPE_BUY. Вопрос встал очень резко с Ask и Bid - не подсвечиваются. Так же ругается на Volume и OrderSend.

В общем такие вот пирожки... Голова уже квадратная. Просьба сильно не осуждать, поскольку только-только в самом начале пути... Из справки узнал что встроенные индикаторы можно подключать уже зарезервированными словами типа iIchimoku. Там возвращается какой то хэндл.... (кароче лес дремучий)

Ну и приложение сего мучения....

Буду очень признателен если направите в нужное русло!!!

PS если кому то интересно с какого видео урока пробовал учиться писать -
Спойлер

youtube.com/watch?v=3texhdfseR8&list=PLn1zelyYPatNAVcYDuMSd1BlzhRd51aH7&index=15



Спойлер



//+------------------------------------------------------------------+
//| EA_MACD+Ichimoku.mq5 |
//| XIIIth |
//|
//+------------------------------------------------------------------+
#property copyright "XIIIth"
#property link
#property version "1.00"
// Параметры из индикатора Ichimoku
input int Tenkan_sen=9;
input int Kijun_sen=26;
input int Senkou_Span_B=52;
// Параметры из индикатора MACD
input int Fast_EMA_period=12;
input int Slow_EMA_period=26;
input int Signal_SMA_period=9;
// Нулевой уровень индикатора MACD
input int Level0=0;
// Параметры Тейк Профит и Стоп Лосс
input int TakeProfit=10;
input int StopLoss=10;
// Выставление лота при совершении сделки
input double Lot=0.1;
// Магический номер
input int Magic=12345;
// Ввод переменных значений индикатора MACD
double Histo_MACD0,Histo_MACD1;
// Ввод переменных значений индикатора Ichimoku
double Line_Tenkan,Line_Kijun;

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// Приводим значения пунктов к единичному виду
double tp,sl;
// Значение в старых пунктах для 4х значных брокеров
if (_Digits==2||_Digits==4) {tp=TakeProfit*_Point;sl=StopLoss*_Point;}
// Значение в новых пунктах для 5ти значных брокеров
if (_Digits==3||_Digits==5) {tp=TakeProfit*10*_Point;sl=StopLoss*10*_Point;}
// Переносим индикаторы в советник
/*
Здесь Histo_MACD0 и Histo_MACD1 - один и тот же бар в индикаторе MACD
Только Histo_MACD0 - значение индикатора на предпоследней закрытой свече (с индексом 2), а
Histo_MACD1 - значение индикатора на последней закрытой свече (с индексом 1)
*/
Histo_MACD0=iCustom(NULL,0,"MACD",Fast_EMA_period,Slow_EMA_period,Signal_SMA_period,0,2);
Histo_MACD1=iCustom(NULL,0,"MACD",Fast_EMA_period,Slow_EMA_period,Signal_SMA_period,0,1);
Line_Tenkan=iCustom(NULL,0,"Ichimoku",Tenkan_sen,Kijun_sen,Senkou_Span_B,0,1);
Line_Kijun=iCustom(NULL,0,"Ichimoku",Tenkan_sen,Kijun_sen,Senkou_Span_B,1,1);

/*
Тут перед выпослением условий должно выполниться еще одно что каждый постапаюший тик
относится к последней свече...
if (OrdersTotal()==0&&Volume [0]==1)
*/
if (OrdersTotal()==0&&Volume [0]==1)
{
if (Histo_MACD1>Level0&&Histo_MACD0Line_Kijun&&Line_Tenkan==Line_Kijun) {OrderSend(Symbol(),ORDER_TYPE_BUY,Lot,Ask,200,Ask-sl,Ask+tp,NULL,Magic,0,CLR_NONE)}
/*Сюда передаем символ инструмента, тип ордера, объем,цена покупки, проскальзывание,
стоп лосс, тейк профит, комментарий,магический номер, дата экспирации и цвет*/
if (Histo_MACD1Level0&&Line_Tenkan }
return(INIT_SUCCEEDED);
}





Извиняюсь что не в тему немного, но на сколько я понял что уже особой разницы нет в кодировании для 5й и 4й версии...
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый день, и с новым годом всех!
_____________
Помогите, начал писать советник по стрелочному индикатору, помогите подправить код, у меня почему то открывает сделки только на BUY, на SELL сделок нет, + открывает позиции как то не по правилам не там где стрелочки, по ходу от балды, помогите кто чем может! И Если не трудно добавить функцию закрытия позиции при появлении противоположной стрелки и открытия новой по направлению стрелки.)
Индикатор MA_Crossover_Signal
Эксперт Strelo123
Спасибо заранее

MA_Crossover_Signal.mq4
Strelo123.mq4

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
XIIIth Вам надо перенести код в функцию OnTick() в ОнИнит - только инициализация, т.е. расчёт пунктов и др. параметры счёта/символа. Объём надо узнавать для какого-нибудь бара в Вашем случае - Volume[0] == 1, так Вы узнаете, что пришёл новый бар, но это иногда глючит - лучше не задавать таких жёстких условий - бары будет пропускать.
МКЛ5 получше МКЛ4, но МТ5 распространён значительно хуже. Это всё-равно, что сесть на боллид F1, но при этом иметь возможность покататься только на спец. трассе...

baksik99 Пробуй

Strelo123.mq4

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
baksik99 Возьми лучше моего бота для проверки стрелочных индюков, а то в твоём чего-то лень разбираться.
Сам мой код посмотри - вроде правильно работает.

0ll_e_Check_Indi_1.mq4

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

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


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


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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
0ll Спасибо за ответ.
На сколько я понял метаквоты уже изменили язык в метатрейдере 4м, и максимально приблизили к 5му. Почему именно выбрал 5й терминал - в силу специфики прогонов советника в тестере появилось куча дополнительной информации в виде различных графиков, что визуально уже помогает подобрать определенные параметры для советника. только из-за этого.
Если уж не получится скомпилить в 4м то подправить то всегда можно :)
Ссылка на сообщение
Поделиться на другие сайты

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

Приветствую. Ребят помогите пожалуйста. Всю ночь не спал бился с метаэдитором, не осилил. Время уже почти обед, опускаются руки. Очень нужный индикатор, вот нашел его вчера. Индикатор строит горизонтальные линии по круглым ценам. Исправьте пожалуйста, что бы он строил до текущего бара, а не до конца графика.
p.s. всю ночь менял значения OBJ_HLINE на OBJ_TREND. писал Time[0]. Но упускаю наверное мелочь какую то. Помогите пожалуйста.


Добавлено: 04-01-2015 10:07:52

Не могу понять где в коде прописывать первую точку OBJ_TREND, сейчас одну точку прописал и получился штрих. как выровнять линии????

if (nm=="") nm=DoubleToStr(Time[0], 0);
if (p1 if (ObjectFind(nm) ObjectSet(nm, OBJPROP_RAY,0);

Setka.mq4

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

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

У Вас ошибка в этой строке:
double Max=iHigh(0,PERIOD_MN1,iHighest(NULL,PERIOD_MN1,MODE_HIGH,iBars(0,PERIOD_MN1),0));
поэтому и не работает. исправлю - выложу. позже

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

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

Спасибо Вам большое. Вы не могли бы потом объяснить мою ошибку. Хочу хоть немного научиться.

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

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

Привет всем!

Пишу сейчас советник, мучаюсь над логикой

С помощью статической переменной беру показания индикаторов и высчитываю уровни открытия ордеров раз в 4 часа

Спойлер

if (Hour() >= 00 && Hour() if (Hour() >= 04 && Hour() if (Hour() >= 08 && Hour() if (Hour() >= 12 && Hour() if (Hour() >= 16 && Hour() if (Hour() >= 20 ) time = 16;

static int flag;

static int newBar;
if (newBar != time)
{
newBar = time;
flag = 1;
}



и если
if (flag == 1)
{
(снимаем показания индикаторов и считаем уровни возможного открытия позиций)
}

Но так же мне нужно отслеживать положение цены относительно этих уровней на каждом тике (чтобы удалять отложки вовремя, например)

Сейчас код имеет такой вид:

double a,b;

if (a>b) deletesellstop();

if (flag == 1)
{(снимаем показания индикаторов и считаем уровни возможного открытия позиций)}

Вопрос такой: будут ли переменные a и b обнуляться при каждом тике, не сохраняя показаний индикатора, получаемых раз в 4 часа?

и если да, решит ли проблему приведение кода к такому виду:

if (flag == 1)
{double a = (вычисляем);
double b = (вычисляем);
}

if (a>b) deletesellstop();
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
oleguitar Если объявить переменные внутри { }, то и область их действия будет внутри скобок. Объявляй глобально или статик на уровне функции.
Вычисляй значения индюков внутри этого (а то у Вас вычисление Н4 какие-то сложные):
static datetime newBar;
if (newBar != iTime(NULL,PERIOD_H4,0))
{
newBar = iTime(NULL,PERIOD_H4,0);
a = (вычисляем);
b = (вычисляем);
}

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

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

Ошибка самая элементарная - символ не 0, а NULL.
Но я ещё много там поправил:
- перенес код в Инит - зачем все эти флаги для одноразовой отрисовки уровней? Но линии двигаться не будут с новым баром. если хочешь, чтоб на каждом баре двигались надо переделывать.
- удаление линий переделал. как было у Вас делать нельзя. (лично с моего графика стер линии, нанесенные мной вручную)
- теперь рисует не от 0 а от исторического минимума - меньше графических объектов - лучше для терминала.

Setka.mq4

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
oleguitar Уточняю ещё раз: если статик, то объявляем на уровне модуля!!!, а внутри if { вычисляем }
Читайте в справке "область видимости переменных".
Ссылка на сообщение
Поделиться на другие сайты

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


Вычисляй значения индюков внутри этого (а то у Вас вычисление Н4 какие-то сложные):
static datetime newBar;
if (newBar != iTime(NULL,PERIOD_H4,0))
{
newBar = iTime(NULL,PERIOD_H4,0);
a = (вычисляем);
b = (вычисляем);
}

В этом случае использовать параметры а и б можно в любом месте.



Так у Вас и цена будет высчитываться раз в 4 часа , а не на каждом тике,как нужно! Изменено пользователем Konstebl
Ссылка на сообщение
Поделиться на другие сайты

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

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


Добавлено: 04-01-2015 15:33:23

зачеркнул красными крестиками, то что мешает.


Добавлено: 04-01-2015 15:41:46

В первом посте исходник (мною не испорченный). как я понял там в коде OBJ_HLINE(не имеет привязки по времени) нужно заменить на OBJ_TREND тогда получим что нужны две точки для привязки. Одну точку я кое как менял, а вторую не понимаю как((
Когда менял получался курсив вместо горизонтальных линий. Но зато курсив до текущей свечи :)) :))
Изменено пользователем Strong-Tezis
Ссылка на сообщение
Поделиться на другие сайты

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

У меня метаедитор вер.1035. Всё компилируется и работает и линий справа не рисует. Кстати исправил ошибочку - перекачай.
Вы мной подправленный индюк скомпилировать не можете? (начал сомневаться - см скрин)
Держите компил билд МТ 765.

Setka.mq4
Setka.ex4
Test1.png

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

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


Так у Вас и цена будет высчитываться раз в 4 часа , а не на каждом тике,как нужно!

? не понял. поясните Вашу мысль, "цена" - это что? Бид/Аск?
Ссылка на сообщение
Поделиться на другие сайты

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

Спасибо Вам огромное за помощь и за то что всегда поддерживаете. Кстати мне пошло на пользу, что я сначала не разобрался)) Сделал сам, что хотел)) Оцените? (учтите я очень слаб в mql)
вот что правил\ if (ObjectFind(nm) ObjectSet(nm, OBJPROP_BACK, 1);
ObjectSet(nm, OBJPROP_RAY, 0);


Добавлено: 04-01-2015 17:23:35

Вот что получилось))

Setka.mq4

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

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



Но так же мне нужно отслеживать положение цены относительно этих уровней на каждом тике (чтобы удалять отложки вовремя, например)



Какую цену он имеет ввиду я не знаю.
Я предположил,что
a -- это значения индикаторов (раз в 4-е часа)
b -- это значение текущей цены (наверно Ask/Bid)
или нет? Изменено пользователем Konstebl
Ссылка на сообщение
Поделиться на другие сайты

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




Но так же мне нужно отслеживать положение цены относительно этих уровней на каждом тике (чтобы удалять отложки вовремя, например)



Какую цену он имеет ввиду я не знаю.
Я предположил,что
a -- это значения индикаторов (раз в 4-е часа)
b -- это значение текущей цены (наверно Ask/Bid)
или нет?


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

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

Значит я не въехал... Я думал, что а и б это значения индикатора (может на разных барах). Если из них что-то является ценой и нуждается в проверке на каждом тике, то, естественно, эту проверку надо выносить из блока if (Н4).

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

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

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

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

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

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

Войти

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

Войти

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


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

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