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

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


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

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

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

Всё-таки проще при изменении баланса на Х% менять не сработавшие отложки на расчётные.

Добавлено: 29-05-2017 05:50:14

В тестере не торгует и ошибок не пишет. Это нормально?

Это нормальная рабочая ситуация :) - надо доводить до ума. Используйте Print(), с помощью его выводите в лог значения индикаторов и пр. - надо выяснить почему не срабатывают условия открытия ордеров.

novikov433 программирование это близко к искусству, у всех начинается по разному, как будет проще для Вас - никто не знает. Если есть желание и свободное время - смотрите уроки и делайте домашние задания. Конструктором можно делать только очень простые алгоритмы, сложные не работают, а разобраться в коде после конструктора очень не просто...
Для написания советника нужен чёткий алгоритм - когда открывать сделки, когда закрывать, в том числе когда начинать пирамидинг, когда заканчивать/закрывать и начинать усреднение. Алгоритм надо выписывать на бумаге и пробовать его на демо и когда будет понимание - начинать программировать. Изменено пользователем 0ll
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Перейти

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

Перейти

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

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

ну вот например, надо сделать, что бы по этому индюки открывались сделки на покупку на продажу, как при входе, так и при выходе из зон осцилятора 20 и 80 + стоп . как вобще понять, что надо добавить в параметры? или тут ситуация полностью идентична например канальным индюкам на графике, тоесть надо непосредственно в самом индюке посмотреть как там реализована канальная состовляющая, и просто написать по ней входы и выходы + стопы?
_http://fxpics.ru/image/5Mh6J

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
novikov433 вопрос не понял, о каких параметрах идёт речь? если параметрах индикатора, то вероятно есть какой-нибудь Period, который надо в тестере оптимизировать, или те-же уровни 20/80 их тоже надо оптимизировать - может более эффективно 19/81?
Сам индюк смотреть не надо, просто в советнике будет 2 переменных double, в одной текущее значение индюка на 1 свече, во второй предыдущее значение ( на 2 свече ). По закрытию свечи обновляете переменные и потом сравниваете новые значения с уровнями:
if ( val1 > 80 && val2 Вот собственно и всё. Начнёте делать, появится опыт и станет проще.
Ссылка на сообщение
Поделиться на другие сайты

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

Это нормальная рабочая ситуация - надо доводить до ума. Используйте Print(), с помощью его выводите в лог значения индикаторов и пр. - надо выяснить почему не срабатывают условия открытия ордеров.


Спасибо за ответ. Сегодня запустил в реале - отрабатывает нормально. Видимо, в тестере Метатрейдера такие штуки с разными таймфреймами не проходят)
И сразу вопрос: как прописать в коде торговлю ботом с одного графика на всех инструментах в обзоре? Таких тонкостей не знаю пока, к сожалению... Изменено пользователем well72
Ссылка на сообщение
Поделиться на другие сайты

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

как прописать в коде торговлю ботом с одного графика на всех инструментах в обзоре?

Надо получить список инструментов в обзоре, сформировать массив инструментов (например), запустить для каждого инструмента индикаторы, и в цикле проверять их значения, открывать ордера и т.д. Это сложный вариант, тики приходят с разной скоростью, обработка будет занимать значительное время (конечно зависит от эффективности алгоритма). На мой взгляд проще открыть несколько инструментов и загрузить индивидуально сову. Тем более возможны разные настройки для каждого инструмента...
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый день!
Чем дальше - тем больше вопросов)
Итак, возникла ситуация: стрелки в момент появления имеют значение, не равное 0. Уже со следующего бара значение становится 0. Мне по алгоритму нужно значение последней стрелки не сразу, а спустя какое-то время. Как это можно сделать?

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

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


Свежий урок:
http://tradelikeapro.ru/mql4-konvertiruem-tikovyi-potok/

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

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



Свежий урок:
http://tradelikeapro.ru/mql4-konvertiruem-tikovyi-potok/

приветствую )может все таки отдельную ветку по этим урокам возможно сделать? так как для меня это одна из наиболее актуальных тем для изучения в принципе она будет нужна для всех)

А чем рубрика на сайте не устраивает ?
http://tradelikeapro.ru/category/uroki-po-mql/
Все в одном месте, изучайте на здоровье.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

стрелки в момент появления имеют значение, не равное 0. Уже со следующего бара значение становится 0

Так и должно быть. Есть 2 решения:
1. Записывать в переменную последнее не 0 значение буфера: if ( buf > 0 ) valBuf = buf;
2. Искать последнее значение > 0 в цикле от 1 бара до Х - но это плохое решение.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Друзья, помогите советом начинающему программисту на MQL4.
Написал код, который должен определять максимальную цену Open баров за последние n баров, но советник почему-то считает максимальную цену Open всех баров на графике.
void OnTick()
{
for (int i = 1; i {
double High_Open = iOpen(Symbol(), PERIOD_H1, i);
if (High_Open >= Current_High)
{
Current_High = High_Open;
Print (Current_High);
}
}
}

Где ошибка?
Спасибо

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

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

А из хелпа пример не подойдет?

double val;
//--- расчет минимального значения цены на 10 последовательных барах
//--- с индекса 10 по индекс 19 включительно на текущем графике
int val_index=iLowest(NULL,0,MODE_LOW,10,10);
if(val_index!=-1) val=Low[val_index];
else PrintFormat("Ошибка вызова iLowest. Код ошибки=%d",GetLastError());



double val;//--- расчет максимального значения цены на 20 последовательных барах
//--- с индекса 4 по индекс 23 включительно на текущем графике
int val_index=iHighest(NULL,0,MODE_HIGH,20,4);
if(val_index!=-1) val=High[val_index];

else PrintFormat("Ошибка вызова iHighest. Код ошибки=%d",GetLastError());



Упс, немного не о том...
А BarTotal у Вас как переменная?

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

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

Написал код, который должен определять максимальную цену Open баров за последние n баров, но советник почему-то считает максимальную цену Open всех баров на графике.

Какой диапазон записан в BarTotal - там и ищет. Print (Current_High) вынесите из цикла.
А вообще лучше использовать пример usver73 только поменяйте MODE_HIGH на MODE_OPEN
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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



А BarTotal у Вас как переменная?

Попробовал у себя- работает...



Да. BarTotal как переменная,
вот весь код:

extern int BarTotal = 2;

double Current_High = -999;
//+------------------------------------------------------------------+

int OnInit()
{

return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
{

}
//+------------------------------------------------------------------+
void OnTick()
{
for (int i = 1; i {
double High_Open = iOpen(Symbol(), PERIOD_H1, i);
if (High_Open >= Current_High)
{
Current_High = High_Open;
Print (Current_High);
}
}
}
//+------------------------------------------------------------------+


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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
ivan100096 я так понял остались вопросы, пробуйте так:

extern int BarTotal = 2;
double Current_High = -999;

void OnTick()
{
int val_index = iHighest ( NULL, PERIOD_H1, MODE_OPEN, BarTotal, 1 );
if ( val_index == -1 ) return;
Current_High = Open[ val_index ];
Print (Current_High);
}

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

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


Добавлено: 01-06-2017 18:22:49


ivan100096 я так понял остались вопросы, пробуйте так:



Разобрался)
Всем спасибо большое)

Добавлено: 02-06-2017 08:14:42

и опять я:)
Написал функцию, которая позволяет открыть не более n ордеров за 1 день.
сейчас функция сливает депозит - т. е. ордера открываются на каждом тике.

Где я опять налажал?)

int OrderMax = 3; // максимальное количество ордеров, которые можно открыть в течении 1 дня.
void OpenOrders()
{
for (int i = 1; i {
if (DayOfWeek() == i)
{
int count_max = 0;
if (count_max {
for(int cn = OrdersTotal()-1; cn>=0; cn--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderType() == OP_BUY)
count_max++;
}
}
}
}
} Изменено пользователем ivan100096
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
ivan100096 зачем Вам считать открытые ордера, тем более Вы не используете проверку по времени их открытия? У меня ощущение, что Вы начинаете писать не представляя себе точного алгоритма.
В общем то что написано - в мусор.
Алгоритм такой:
есть переменная с текущим днём недели наш_день
если наш_день != текущий день - пишем новый день, обнуляем счётчик ордеров
там где идёт открытие ордера -
если счётчик
это всё! пара переменных и никаких циклов.

Если надо определять количество ордеров открытых сегодня при перезапуске совы, то это надо делать в цикле по истории ордеров, счёт если дата открытия > дата_сегодня_00:00
Но я думаю Вам пока рано думать о возможной переинициализации советника...
Изменено пользователем 0ll
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте. Посмотрел видео как торговать сеткой ордеров 3х годичной давности, там для всех ордеров устанавливали тейк профит путем вычисления средней цены покупки плюс размер заданного тейк профита, и таким образом выходит что для некоторых ордеров тейк профит устанавливался ниже цены покупки, разве это возможно? Или я чего то не понял?

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

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

Здравствуйте. Посмотрел видео как торговать сеткой ордеров 3х годичной давности, там для всех ордеров устанавливали тейк профит путем вычисления средней цены покупки плюс размер заданного тейк профита, и таким образом выходит что для некоторых ордеров тейк профит устанавливался ниже цены покупки, разве это возможно? Или я чего то не понял?


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

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

взялся за изучение mql , но понимаю что надо вобще изначально знать и понимать логику программы в зависимости от задачи. Подскажите пожалуйста, если все пишут что язык mql это просто разветвление от C# , стоит ли начать именно с с него? как вы сами понимаете нормальных уроков тупо нет на тему mql , какие то были попытки у нас на форуме, но честно говоря какая то лажа, толком не объясняется как и что, а тупо на обезьянье повторение делается расчет.
нет толком вобще ничего. пару уроков по пользовательскому индикатору - понял только шапку, и там где digits для 5 и 4 знаков... дальше всё... тупо тупик. кто может поподробнее вдуплить, зачем вобще нужны пользовательские функции и зачем столько всего нужно писать в коде... как вобще понять что брать из чужого кода , а что надо самому писать при создании совы. например мне надо пирамидинг там, усреднение, мартин... трал..... НЕ БУДУ ЖЕ Я ЗАНОГО ИЗОБРЕТАТЬ ВЕЛОСИПЕД, ЕСЛИ ЭТО ВСЁ ЯВЛЯЕТСЯ ТУПО СТАНДАРТНЫМ ДЕЙСТВИЕМ

Вобще, как этой базой кодов пользоваться, для базовых операций с открытиями ордеров и лотностью?

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

опять же никаких космический действий проектировать не надо, логика у меня ЖЕЛЕЗНАЯ. я вобще непробиваем в этом плане.
на форуме mql5 не кто учить не хочет, потому что там их хлеб. да вобще все так говорят типо ай я яй КАК ВСЁ СЛОЖНО, А САМИ УЖЕ ЧУЖИТЕ НАРАБОТКИ ЗА 5 СЕК МЕНЯЮТ МЕСТАМИ И ПРОСТО ЗАПУДРИВАЮТ МОЗГИ

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

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

Здравствуйте.
Помогите поправить советник. Нужно чтобы закрывал не все ордера на всех парах, а только на какой нажимаю закрыть!
И ещё первый ордер нормально ставит стоп, а на следующие не ставит...
Посмотрите пожалуйста.

..mq4

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

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

Пробуй. Только со СЛ "следующих ордеров" не стал разбираться - там сова писанная несколькими людьми, несколько блоков отвечающих за установку/контроль СЛ, видимо дописывали и переписывали...

Торг_панель.mq4

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
novikov433 у Вас какое-то неправильное отношение к теме...
Начинайте изучать с чего хотите, можете с русского - а то понять тяжело.
Даже "Обезьянье" повторение - мать ученья. Тем более не совсем и повторение - там ошибки кое-где внесены специально.
Писать надо сову всю, нет никаких стандартных действий, можно брать куски кода, но надо знать какие и для какой цели.
Есть стандартные функции языка MQL - они в справочнике.

Через год занятий придёт понимание.
Никто Вас бесплатно учить не будет, ни здесь, ни там не богодельня.

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

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

спасибо) да в принципе всё само должно дойти, нужно просто впитать в мозги нужную инфу, а дальше процесс пойет

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

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

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

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

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

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

Войти

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

Войти

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


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

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