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

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


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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
15 минут назад, diodio сказал:

Кто может поделиться кусочком грамотного кода, где увеличивается лот при увеличении эквити.

Изучи, там много вопросов может возникнуть
https://www.google.com/search?q=mql4+расчет+лота+site:www.mql5.com&newwindow=1&sxsrf=AOaemvJhwNygOxAnPotkv3VZ43S8pQ_ZrQ:1635932930130&sa=X&ved=2ahUKEwiGvrSJ9fvzAhXpwosKHXZwDzgQrQIoBHoECAUQBQ&biw=1420&bih=733&dpr=1.25

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

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

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

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

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

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

Перейти

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

Перейти

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

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

Доброго времени суток. 

 

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

 
Дано N свечей назад. Найти в них свечи размером >= X пунктов, запомнить их общее количество и размер каждого из них. Если текущая свеча после закрытия оказалась >= X пунктов, то сравнить её размер с общим кол-вом найденных свечей и вывести следующий результат - какое место она занимает по размеру среди всех найденных.
 
На мкл сайте затруднились выполнить, но указали на использование массивов. 
Ссылка на сообщение
Поделиться на другие сайты

Обучение языку MQL4 под MetaTrader 4 Опубликовано
11 часов назад, Capital Plus сказал:

но указали на использование массивов. 

тоже сначала подумал о массиве, потом увидел, что можно отказаться

extern int        CandleCount   = 10; // количество исторических свечей
extern int        CandleSize     = 10; // мин. размер свечи

//int      ArrCandle[];
datetime PrevBarTime;
MqlRates rate[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   //ArrayResize(ArrCandle, CandleCount);
   //ArrayInitialize(ArrCandle,0);
   return(INIT_SUCCEEDED);
}

void OnTick()
{
   int n = 0; // количество найденных свечей большого размера
   int SizeCandle1 = 0; //  размер последней свечи
   int k = 0; // количество свечей бОльшего размера, чем свеча 0
   
   if(PrevBarTime != iTime(Symbol(),PERIOD_CURRENT,0)) 
   {     
      PrevBarTime = iTime(Symbol(),PERIOD_CURRENT,0);
      //ArrayInitialize(ArrCandle,0);
      CopyRates(_Symbol,PERIOD_CURRENT,1,CandleCount,rate);  
      SizeCandle1 = (int)(MathAbs(rate[CandleCount-1].close - rate[CandleCount-1].open)/_Point);
      
      if(SizeCandle1 >= CandleSize)
      {
         for(int i=0; i < CandleCount; i++)
         {
            int size = (int)(MathAbs(rate[i].close - rate[i].open)/_Point);
            
            if( size >= CandleSize) 
            {
               //ArrCandle[n] = size;
               n++;
               if(size > SizeCandle1) k++;
            }
         }
         
         Print(TimeToString(TimeCurrent(),TIME_MINUTES)," , Last Candle ",SizeCandle1, 
                                                        " , Total big candle ",n,
                                                        " , Bigest candle ", k);
      } 
   }

 

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

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

тоже сначала подумал о массиве, потом увидел, что можно отказаться

extern int        CandleCount   = 10; // количество исторических свечей
extern int        CandleSize     = 10; // мин. размер свечи

//int      ArrCandle[];
datetime PrevBarTime;
MqlRates rate[];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   //ArrayResize(ArrCandle, CandleCount);
   //ArrayInitialize(ArrCandle,0);
   return(INIT_SUCCEEDED);
}

void OnTick()
{
   int n = 0; // количество найденных свечей большого размера
   int SizeCandle1 = 0; //  размер последней свечи
   int k = 0; // количество свечей бОльшего размера, чем свеча 0
   
   if(PrevBarTime != iTime(Symbol(),PERIOD_CURRENT,0)) 
   {     
      PrevBarTime = iTime(Symbol(),PERIOD_CURRENT,0);
      //ArrayInitialize(ArrCandle,0);
      CopyRates(_Symbol,PERIOD_CURRENT,1,CandleCount,rate);  
      SizeCandle1 = (int)(MathAbs(rate[CandleCount-1].close - rate[CandleCount-1].open)/_Point);
      
      if(SizeCandle1 >= CandleSize)
      {
         for(int i=0; i < CandleCount; i++)
         {
            int size = (int)(MathAbs(rate[i].close - rate[i].open)/_Point);
            
            if( size >= CandleSize) 
            {
               //ArrCandle[n] = size;
               n++;
               if(size > SizeCandle1) k++;
            }
         }
         
         Print(TimeToString(TimeCurrent(),TIME_MINUTES)," , Last Candle ",SizeCandle1, 
                                                        " , Total big candle ",n,
                                                        " , Bigest candle ", k);
      } 
   }

 

Как оперативно!
Еще и с комментариями. 
Спасибо большое, попробую разобраться

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

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

Доброго времени суток! Вопрос такой, не могу понять почему не закрываются позиции при противоположном сигнале индикатора. Беру сигнал на открытие с первого бара, если на нулевом появился сигнал, то на первом баре открывается позиция. Но вот закрытие не происходит при противоположном сигнале индикатора. Что делать? Если настроить снятие сигнала с нулевого бара, то возможно будет закрытие? Хотя открытие же происходит на первом баре после сигнала, значит и закрытие должно так работать?!

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
47 минут назад, diodio сказал:

Беру сигнал на открытие с первого бара, если на нулевом появился сигнал, то на первом баре открывается позиция.

Бред.
Сигнал ты можешь получить на открытии 0-го бара. После анализа 1-го.
И открыть позу можешь тоже только на 0-м (текущем) баре. Т.к. нумерация баров идет в обратном порядке, т.е. 0-й - это текущий, 1-й- это последний ЗАКРЫТЫЙ бар.

49 минут назад, diodio сказал:

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

ошибка в коде

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

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

Здравствуйте, подскажите как сделать что бы отключался первый трейлинг стоп при включении второго трейлинг стопа

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

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

Доброго времени суток.
Подскажите, пожалуйста, как можно посчитать тики или свечи за большое время? (год, например). 


Пробую через Close[], но индекс больше 5000 не дает. 

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
1 час назад, Capital Plus сказал:

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

Справка mql4: доступ к  свечам
https://docs.mql4.com/ru/series/copyrates
Справка mql5: доступ к тикам
https://www.mql5.com/ru/docs/series/copyticksrange
в mql4 такого нет

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

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

  Доброго времени суток! 

Подскажите пожалуйста код, который бы при наборе сетки лотов против тренда, открывал и по тренду увеличено в соотношении процента  

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

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

Подскажите пожалуйста код, который бы при наборе сетки лотов против тренда, открывал и по тренду увеличено в соотношении процента  

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

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

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

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

Мне для эксперимента, я многое перепробовал, не получается

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
7 минут назад, Lexa000 сказал:

Мне для эксперимента, я многое перепробовал, не получается

но ведь не получается что-то конкретное?
Логично задать "узкий" вопрос.
У локеров много всяких условий и чужой код не факт, что поможет.
Начните делать и по ходу пьесы задавайте вопросы

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
6 минут назад, usver73 сказал:

но ведь не получается что-то конкретное?
Логично задать "узкий" вопрос.
У локеров много всяких условий и чужой код не факт, что поможет.
Начните делать и по ходу пьесы задавайте вопросы

Здесь 130 ошибка, лок уже есть, но он не работает так как нужно. В определенное время начинает открывать в одном направлении

Locomotive v1.01 (72).mq4

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
24 минуты назад, Lexa000 сказал:

Здесь 130 ошибка

Смешно...
ошибка 130- "Неправильные стопы".
Останавливайте в этот момент тестер, разбирайтесь- что неправильно (как правило неверная цена ордера/СЛ/ТП).
добавьте после OrderSend() что-то типа:
if(ticket < 0) Print(GetLastError," ", " Bid ", Bid, " Ask", Ask, " SL", SL, " TP ", TP);  и т.д.
То же самое после OrderModify()
п.с. Советник не запускается без индикатора cannot open file '\\MQL4\indicators\MarketInsider_v1.2.ex4' [2]

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

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

Смешно...
ошибка 130- "Неправильные стопы".
Останавливайте в этот момент тестер, разбирайтесь- что неправильно (как правило неверная цена ордера/СЛ/ТП).
добавьте после OrderSend() что-то типа:
if(ticket < 0) Print(GetLastError," ", " Bid ", Bid, " Ask", Ask, " SL", SL, " TP ", TP);  и т.д.
То же самое после OrderModify()
п.с. Советник не запускается без индикатора cannot open file '\\MQL4\indicators\MarketInsider_v1.2.ex4' [2]

Спасибо за подсказку

 if (Ticket <= 0) { PnC(StringConcatenate("Открыт ордер ",Ticket),0); 

Здесь поменял знак и советник стал работать по другому

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

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

Приветствую всех!
Отдельный респект тем, кто помогает, жертвуя своим личным временем, отвечая на порой достаточно простые вопросы. 
С товарищем пишем помощника в виде дополнительного советника, для автоматизации некоторых ручных действий. Автоматизировали сдвиг тейк-профитов. Реализовали кнопки для принудительного закрытия ордеров вблизи ТП одной кнопкой и т. д.
Теперь есть следующая задача: 
Сначала ситуация: работает робот на 10 парах. Фактически свой робот со своими настройками на каждой паре.
Необходимо из Помощника одной кнопкой менять текущие параметры во всех 10-ти роботах.
Например снять галочки "разрешить советнику торговать". Другой кнопкой увеличить шаг между ордерами и т. д.
Вопрос: где хранятся текущие настройки (путь, названия файлов, или они хранятся в реестре) всех этих 10-ти советников, чтобы при помощи команд из помощника их суметь отредактировать?

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

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

Теперь есть следующая задача: 
Сначала ситуация: работает робот на 10 парах. Фактически свой робот со своими настройками на каждой паре.
Необходимо из Помощника одной кнопкой менять текущие параметры во всех 10-ти роботах.
Например снять галочки "разрешить советнику торговать". Другой кнопкой увеличить шаг между ордерами и т. д.
Вопрос: где хранятся текущие настройки (путь, названия файлов, или они хранятся в реестре) всех этих 10-ти советников, чтобы при помощи команд из помощника их суметь отредактировать?

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

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

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

Подскажите, пожалуйста, а можно как-то историю порезать? Когда загружаешь, то загружается лет за 20, а нужна года 2-3 назад... 

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
11 часов назад, Capital Plus сказал:

Подскажите, пожалуйста, а можно как-то историю порезать? Когда загружаешь, то загружается лет за 20, а нужна года 2-3 назад... 

Как загружаете? 

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

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

Как загружаете? 

Через архив котировок. Выбираю каждую нужную пару и жму загрузить

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
3 часа назад, Capital Plus сказал:

Через архив котировок. Выбираю каждую нужную пару и жму загрузить

Тогда выбрать не получится 

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
В 16.11.2021 в 00:21, ademen сказал:

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

Возможно вы неправильно меня поняли, поэтому и ответ получился слишком поверхностным.
Уточню. Мне нужно знать, где терминал хранит значения параметров каждого из 10-ти экземпляров советника (10 разных пар), чтобы я смог написать скрипт, который одним нажатием кнопки, меняет эти параметры. Во вложении сохранённые параметры советника одной из пар. Их, допустим 10. Значения параметров могут у всех пар отличаться. Где эти значения хранятся? Чтобы я мог скриптом, например, увеличить Divider c 20 до 40 у всех 10-ти пар (советников).

set01.JPG

 

 

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

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

Возможно вы неправильно меня поняли, поэтому и ответ получился слишком поверхностным.
Уточню. Мне нужно знать, где терминал хранит значения параметров каждого из 10-ти экземпляров советника (10 разных пар), чтобы я смог написать скрипт, который одним нажатием кнопки, меняет эти параметры. Во вложении сохранённые параметры советника одной из пар. Их, допустим 10. Значения параметров могут у всех пар отличаться. Где эти значения хранятся? Чтобы я мог скриптом, например, увеличить Divider c 20 до 40 у всех 10-ти пар (советников).

set01.JPG

То что вы показали на скрине - глобальные параметры советника, видимые только советникам.

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

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

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

То что вы показали на скрине - глобальные параметры советника, видимые только советникам.

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

Большое Спасибо за ответ!!! Немного более ясно становится. Т. е. глобальные параметры советника никаким образом из другого советника отредактировать нельзя? А команды, чтобы из одного советника выгрузить параметры другого в *.set-файл и потом загрузить отредактированные обратно, есть?

PS: доступа к коду торгующего советника нет. 

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

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

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

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

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

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

Войти

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

Войти

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


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

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