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

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


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

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


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

Пытался по уроку прикрутить к индикатору оповещение по ID к андроиду крутил вертел, не чего. Так же и с звуковым алертом. Если не трудно прикрутите я хоть увижу что и куда.
Заранее спасибо.


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

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

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

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

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

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

Перейти

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

Перейти

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

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

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


pavlovost Ну раз уж Вы учитесь, то будете сами исправлять.
1. Создайте функцию init() и в ней определите размер Вашего динамического массива.
2. Решите будет это массив обычный или тайм-серия (с обратным индексированием)
После этого Ваш цикл заработает, но вывод в коммент по одному значению - неправильно, т.к. в итоге на экране будет видно последнее. Нужно сделать вывод в одной строке все 5-значений. для этого создаётся новый цикл и в строковую переменную добавляются значения массива разделённые пробелами, а потом коммент.
Ещё надо создать функцию deinit() в которой очищать коммент после выгрузки совы: коммент = "";


Не очень понял, для чего создавать функцию init() и в ней определять размер массива? И как его определить, если размер массива - переменная (что вроде бы не допускается).
Также не понял, как вывести в строку результаты, ведь кол-во результатов - переменная (В, кол-во баров).
Ссылка на сообщение
Поделиться на другие сайты

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


Не очень понял, для чего создавать функцию init() и в ней определять размер массива? И как его определить, если размер массива - переменная (что вроде бы не допускается).
Также не понял, как вывести в строку результаты, ведь кол-во результатов - переменная (В, кол-во баров).


1. В Вашем коде массив вообще не имеет размерности и чтоб он узнал свою размерность нужно прочитать и сделать.
2. Я-ж написал "создаётся новый цикл". Имеется в виду цикл от 0 до В. внутри string sss += StringConcatenate("Max[",i,"]=",a,", ");. после цикла: коммент(sss);
Если на самом деле хотите писать программы (на любом языке) нужно больше читать справочной литературы - там всё написано.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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



Не очень понял, для чего создавать функцию init() и в ней определять размер массива? И как его определить, если размер массива - переменная (что вроде бы не допускается).
Также не понял, как вывести в строку результаты, ведь кол-во результатов - переменная (В, кол-во баров).


1. В Вашем коде массив вообще не имеет размерности и чтоб он узнал свою размерность нужно прочитать и сделать.
2. Я-ж написал "создаётся новый цикл". Имеется в виду цикл от 0 до В. внутри string sss += StringConcatenate("Max[",i,"]=",a,", ");. после цикла: коммент(sss);
Если на самом деле хотите писать программы (на любом языке) нужно больше читать справочной литературы - там всё написано.

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

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

Привет! Никак не могу разобраться как взять цену открытия (закрытия, хай, лоу) у конкретной свечи на графике. К примеру, мне нужна цена открытия седьмой по счету свечи на часовом графике, 27.11.2014 :d Можете подсказать как взять ее?

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

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


Привет! Никак не могу разобраться как взять цену открытия (закрытия, хай, лоу) у конкретной свечи на графике. К примеру, мне нужна цена открытия седьмой по счету свечи на часовом графике, 27.11.2014 :d Можете подсказать как взять ее?

Вообще Open[7]. Но это если считать от текущей свечи. Если нужна свеча именно 27.11.14 7-00, то по другому, например так:
Open[iBarShift(_Symbol,PERIOD_H1,D'2014.11.27'+7*3600)]
есть и другие варианты
Ссылка на сообщение
Поделиться на другие сайты

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



Привет! Никак не могу разобраться как взять цену открытия (закрытия, хай, лоу) у конкретной свечи на графике. К примеру, мне нужна цена открытия седьмой по счету свечи на часовом графике, 27.11.2014 :d Можете подсказать как взять ее?

Вообще Open[7]. Но это если считать от текущей свечи. Если нужна свеча именно 27.11.14 7-00, то по другому, например так:
Open[iBarShift(_Symbol,PERIOD_H1,D'2014.11.27'+7*3600)]
есть и другие варианты


Класс! Большое спасибо! Не знал о существовании iBarShift()

Добавлено: 29-11-2014 23:20:33

Что ж, новая загвоздка возникла, наверняка где-то о ней повествуют, но не смог найти >:dПодскажите, пожалуйста, как из блока (в данном случае for()), вытащить значение переменной k, что бы использовать ее значение, полученное в for() и дальше?

for (shift; shift >= 23; shift -= 24)
{
Arr1[k] = iClose (Symbol(), 0, shift);
k++;
}
Изменено пользователем Chelentano
Ссылка на сообщение
Поделиться на другие сайты

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


Подскажите, пожалуйста, как из блока (в данном случае for()), вытащить значение переменной k, что бы использовать ее значение, полученное в for() и дальше?

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

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



Подскажите, пожалуйста, как из блока (в данном случае for()), вытащить значение переменной k, что бы использовать ее значение, полученное в for() и дальше?

Ваш код вообще работать не будет. Лучше словами опишите что хотите сделать.
Можно из цикла вызвать внешнюю функцию и передать туда "к".


Да, дурацкий я пример привел. Вот другой, наверное, более правильный)

for (int k=0; k {
Array [k]=k*10;
}

Внимание вопрос: как мне использовать массив за пределами цикла? Если следовать вашему совету, вызвав внешнюю функцию в цикле, то ведь получится что его потом из этой функции никуда не перетащишь. Или я не понимаю чего-то?
Изменено пользователем Chelentano
Ссылка на сообщение
Поделиться на другие сайты

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

Oll Доброго времени,спасибо за вашу работу и проявленный интерес к этой системе.Посмотрел ваш индикатор по корзине USD сравнил с оригиналом значения индикатора практически не отличаются.Если писать советника самому с вашего индикатора,то по умолчанию у него прописана корзина USD,от сюда вопрос как взять показания индикатора по двум другим корзинам или все пары прописывать уже не посредственно в коде советника через функцию iCustom();

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

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


как взять показания индикатора по двум другим корзинам или все пары прописывать уже не посредственно в коде советника через функцию iCustom();

denis77515 по Кукловоду давайте общаться в его теме. В сове Вы можете прописывать и передавать в индюк любые корзины (для этого и писался), так-же не стоит в одну сову прописывать все 3 корзины, нужно делать одну и к сове 3 сета с разными корзинами. Если я все-таки возьмусь писать сову, то сделаю именно так.
Ссылка на сообщение
Поделиться на другие сайты

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

Привет всем!
Оффтоп маленький ;)
Можно ли на мониторинге Myfxbook удалить статистику? У меня счет просто есть, там сделки какие-то открывал по другой системе, а сейчас советник запускаю, и старые сделки не нужны.

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

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

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

Уважаемые коллеги, здравствуйте!

В блоке Trade like a pro, я наткнулся на торговую систему под названием "Devilfish". И решил собрать с неё робота.
ссылка: _http://tradelikeapro.ru/forex-octopus/

От себя добавил разделение позиции. Собственно, в этом и проблема.
цель: Вместо одной позиции объемом х, открывать 2 позиции с объемом 0,5х. Причем одна позиция должна быть короткой и открыться всего 1 раз за всё то время пока не закроется вторая(длинная).

В итоге короткие позиции открываются более 1 раза, либо длинная позиция не открывается, в некоторых случаях не включается трал по МА, хотя на мой взгляд все условия соблюдены, идеи по решению проблемы закончились((

Журнал выдает сообщения о неизвестных тикетах, пестрит об ордермодифи ерор 4108.
...
2014.12.05 23:18:18.890 2014.01.07 02:15 devilfish GBPUSD,H1: OrderModify error 4108
2014.12.05 23:18:18.890 2014.01.07 02:15 devilfish GBPUSD,H1: unknown ticket 3 for OrderModify function
...
2014.12.05 23:18:18.890 2014.01.07 02:15 devilfish GBPUSD,H1: OrderModify error 4108
2014.12.05 23:18:18.890 2014.01.07 02:15 devilfish GBPUSD,H1: unknown ticket 6 for OrderClose function
...

Помогите, пожалуйста!

Devilfish.rar
Devilfish_test0.jpg
Devilfish_test1.jpg
Devilfish.txt

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

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

Посмотрел Ваш код. Немудрено, что у Вас кончились идеи по его исправлению, у меня так вообще не возникло...
Вся проблема в том, что нет чёткого алгоритма работы программы и Вы, имхо, не до конца разобрались что такое тикет.
Вот этот кусок как иллюстрация:
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicSell && OrderTicket()==ticket4)
{
if(OrderType()==OP_SELL)
count++;
}
Вы хотите подсчитать сколько у Вас в системе ордеров с тикетом4? - ответ если селл, то, возможно, 1, а если бай, то по-любому = 0.
Мой совет: начните заново, с блок-схемы. Если тяжело скачайте готовую сову с похожими индюками и её модифицируйте.
Пишите здесь (текстом) алгоритм работы совы - что-за-чем, а мы дополним, исправим или посоветуем.

Совет: не делайте разные магики для селл и бай - нет необходимости.
По Вашему сова должна одновременно торговать в обе стороны или поочереди?

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

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

Торговая система построена на 3х ЕМА с разными периодами(напр. 3,13,55) и на 2х индикаторах тренда(octopus1, octopus2).
для входов используются пересечения скользящих разного периода, затем входы фильтруются 2-мя индикаторами.
Выход из позиции осуществляется тралом по медленной МА или по пересечению 2х быстрых(напр. ЕМА(3),ЕМА(13)) в тот период времени, когда Octopus2 поменяет свой сигнал на противоположный.
Теоретически, торговля в 2 стороны не возможна.

Попробую переписать убрав все лишняки


Добавлено: 06-12-2014 18:40:29

Примерно так.

Добавлено: 06-12-2014 18:48:29

Далее я хочу убрать "мясо" которое начинается во время флэтов. Предлагаю ввести ограничение "минимальный стоп-лосс"

Добавлено: 06-12-2014 19:45:09

Для этого нужно рассчитать величину стоп-лоса в пунктах.

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

предлагаю такую функцию:
int slbuy()
{
double slbuy1;
slbuy1 = NormalizeDouble(BarClose - "цена СЛ", Digits);
for (int q = 1; q {
slbuy1 = slbuy1 * 10;
return(slbuy1);
}
}

devilfishstock.mq4

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

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


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

:d
Прости за смех, код аккуратный - видно, что знакомы с программированием, но впечатление такое, что с Луны свалились и документации по МКЛ в глаза не видели.
double ddd = 1.02;
int iii = (int)ddd;
вот и всё преобразование (просто отбрасывается дробная часть), если надо округлить то читай здесь.
Теперь о коде: Вы проигнорировали мой совет о блок схеме, но теперь я знаю, что сова торгует поочереди (бай/селл) поэтому:
№ тикета и лот у Вас одно значение зачем две переменных? Нет переменной для хранения текущего направления торговли, текущего СЛ.
Блок схема:
Старт.
Проверяем текущее направление торговли (3 состояния: -1 нет, 0 бай, 1 селл. Только так!)
если -1: проверка сигналов на открытие
если есть: открываем
если 0 или 1: контроль (пересчёт) ордеров по направлению (на предмет, а вдруг закрылись по ТР или СЛ)
если закрылись: сброс направления -1, обнулить тикет, СЛ, выход
если на месте: контроль ТР и СЛ и расчёт нового значения СЛ по текущему направлению
если новый СЛ ближе старого минимум на 5 пипс, или текущий ТР и СЛ = 0 - модификация ордера по направлению
Конец.

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

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

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

3MACrossMACDTrendFollowerV2+bstopv1.1.mq4

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

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


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

Возьми теперь компилируется.

3MACrossMACDTrendFollowerV2+bstopv1.1.mq4

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

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

Добавил

if (MathAbs(ma3 - SL) > Slippage*Point)
{
SL = NormalizeDouble(ma3 - Slippage*Point, Digits);
OrderModify(OrderTicket(),OrderOpenPrice(), SL, OrderTakeProfit(),OrderExpiration(),Blue);
}

без него SL не двигает, но с ним в журнале
...
2014.12.08 18:55:44.187 2014.01.06 15:40 devilfish(1) GBPUSD,H1: OrderModify error 1
2014.12.08 18:55:44.187 2014.01.06 15:37 devilfish(1) GBPUSD,H1: OrderModify error 1
2014.12.08 18:55:44.187 2014.01.06 15:35 devilfish(1) GBPUSD,H1: OrderModify error 1
...
Я понимаю, что этого быть не должно, может *часть текста отсутствует* с ним?

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

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


Я понимаю, что этого быть не должно, может *часть текста отсутствует* с ним?

К какому брокеру МТ подключен? если не ЕЦН, то надо проверять на СтопЛевел (когда ма3 близко к цене дистанции недостаточно), пробуй вместо Слиппажа поставь 200*_Point (больше 200 вряд-ли будет)
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Войти

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

Войти

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


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

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