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

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


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

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

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

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

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

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

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

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

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

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

Перейти

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

Перейти

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

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

Здравствуйте! Подскажите пожалуйста неопытному как правильно использовать функцию iMAOnArray() в советнике для получения средних значений индикатора на последней закрывшейся свече,

extern string a = "WPR";
extern int    period_indicatora = 8;
extern int    period_usredneniy = 15;
extern int    metod_usredneniy  = 3; //значения 0,1,2,3
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  { 
    double h=ABC();
      Comment("h="+DoubleToString(h));       
  }
//+------------------------------------------------------------------+
 double ABC()
 {
   double sz[];
   double ss,wpr;

     for(int i=0; i<period_usredneniy; i++)
     {
      wpr=iWPR(NULL,0,period_indicatora,i+1);
      sz[i]=wpr;
     }
      ss=iMAOnArray(sz,0,period_usredneniy,0,metod_usredneniy,0);
      
     return(ss);
  }

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

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

Ребят, а можно ли получить имена файлов в каталоге? Такое вообще возможно на mql4 ?

Прошу прощения за то, что долбился в глаза. Нашел.

https://docs.mql4.com/ru/files/filefindfirst

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

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

Подскажите пожалуйста неопытному как правильно использовать функцию iMAOnArray()

А что, переменная ss , получает не то, что ожидается?

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

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

usver73  спасибо что откликнулись, написал функцию и для проверки вывел данные на экран , при запуске тестера в журнале пишет массив вне диапазона. то есть расчет не производится.

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

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

при запуске тестера в журнале пишет массив вне диапазона

Если это весь код, то правильно пишет.

Вы нигде не устанавливаете размер массива sz.

double sz[]; объявите на глобальном уровне
В double ABC() добавьте
ArrayInitialize(sz, 0.0);
В OnInit добавьте 

ArrayResize(sz, period_usredneniy);

p.s.
В OnTick() вызов Print(ABC()); нужно завернуть в NewBar(), чтобы расчеты делались на на каждом тике, а при поступлении нового бара

 

 

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

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

usver73 Спасибо,с этим разобрался, но появился новый вопрос, как программируется Moving Average( с применением  к First 

Indicators Data) , а так же не понятно индикатор рассчитывает среднее значение за определенный период и рисуется на последней закрывшейся свече с определенным числовым значением, при этом это числовое значение не является расчетным средним.

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

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

как программируется Moving Average( с применением  к First 

Indicators Data)

Что значит "программируется"?
Вы же вызов у себя прописали. Если что-то не получилось, конкретизируйте.

8 часов назад, chww сказал:

при этом это числовое значение не является расчетным средним.

сильное заявление.
Если считаете не SMA, то имеет значение последовательность значений в передаваемом массиве.
Иными словами, массив sz нужно сделать AsSerias (см. справку iMAOnArray)

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

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

Вы же вызов у себя прописали. Если что-то не получилось, конкретизируйте.

Я хотел получить значения Moving Average наложенной на индикатор WPR с возможностью изменения метода усреднения, при запуске в тестере выдает на график какое то расчетное число.

EURUSDH1.png

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

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

при запуске в тестере выдает на график какое то расчетное число.

Проведите эксперимент:
перед вызовом iMaOnArray  сделайте принты входных параметров, в первую очередь массив sz. Можно прямо в цикле, где записываете значения WPR
Возьмите небольшой период усреднения, например, 5.
Метод усреднения -SMA.
Посчитайте среднее значение полученных принтов.
Сравните с тем, что выдает функция iMAOnArray

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

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

Проведите эксперимент:

Провел с методом SMA все сходится, а вот при смене метода, "MA" на графике не соответствует тому что выдает функция.

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

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

Иными словами, массив sz нужно сделать AsSerias (см. справку iMAOnArray

Сделали?

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

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

Всем доброго времени!

У меня есть код вот такой, очень простой:

Спойлер

   int BuyTotal = 0, SellTotal = 0;
   int i;
   
//Подсчитываем отдельно бай и селл ордеры
   for(i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES))
        {
        if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
          {
         if(OrderType()==OP_BUY)
            BuyTotal++;
         if(OrderType()==OP_SELL)
            SellTotal++;
          }    
        }
     }         

      if(SellTotal<1)
        {
 ..........
        }   
     
     if(BuyTotal<1)
       {
 .........
       }

Может ли сие означать торговлю одновременно в обе стороны??? Именно одновременно, а не ждать когда одни ордера на бай допустим закроются и только в этом случае откроются на селл. Нужно чтоб открывались на бай и селл одновременно, но не открываются почему-то, подозрение на малое проскальзывание, которое поставил.

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

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

подозрение на малое проскальзывание, которое поставил

Должно работать в обе стороны.

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

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

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

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

Такой вопрос, если ставить одного и того же советника на разные пары на одном счёте, то что при этом должно быть разным у каждой пары??? Магик - это точно, если делаем выборку, что ещё? У меня большие сомнения по поводу функции OrdersTotal(), эта функция смотрит вообще на всё как я понял, значение пар ей не важно, берутся в расчёт все ордера на данном счету.

Что ещё должно быть разным? Не хочется делать мультивалютник и впихивать в него название пар, по коду получается много повторов, могу запутаться)

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

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

то что при этом должно быть разным у каждой пары??? Магик

Не поверишь-название пары, оно же Symbol() :)

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

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

Подскажите, пожалуйста, что нужно добавить или изменить:
Когда индикатор берет значения Current или младших ТФ - линии и текст отображаются ок. А когда из старших ТФ, то текст дублируется на каждом баре. Т.е. если в настройках указан ТФ = H1, а у нас на графике М30, то текст дублируется дважды, когда М15 = 4 раза..


if(price1_0<price_a1&&DistPoint<=price1_4/Point)
{
if(ObjectFind(0,"OOO_LEVEL_UP"+(string)time)!=0)
{
TrendCreate(0,"OOO_LEVEL_UP"+(string)time,0,time,price_abc,time+_Period*60*LineBars,price_abc,
ColorLe1,StyleLe1,WidthLe1,false,false,false,false,true,0);
TextCreate(0,"OOO_tLEVEL_UP"+(string)time,0,time,price_abc,
"LEVEL_UP ("+DoubleToStr(price_abc,Digits)+") ",ColorLe1,ANCHOR_LEFT_LOWER);
}
}

1H.PNG

M30.PNG

M15.PNG

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

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

текст дублируется дважды

Скорее всего приведенный кусок кода вызывается раз в свечу текущего ТФ графика.

Далее вы пытаетесь найти объект, но делаете странную проверку на 0.

Напишите 

if(ObjrctFinnd(.....)<0)

TrendCreate()

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

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

Скорее всего приведенный кусок кода вызывается раз в свечу текущего ТФ графика.

Далее вы пытаетесь найти объект, но делаете странную проверку на 0.

Напишите 

if(ObjrctFinnd(.....)<0)

TrendCreate()

К сожалению, проблема осталась прежней.

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

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

тогда нужен весь код, точнее, куски кода, где происходит вызов функций рисования

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

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

тогда нужен весь код, точнее, куски кода, где происходит вызов функций рисования

Спасибо, что откликнулись!
прикрепил файл

etc.mq4

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

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

прикрепил файл

у Вас МТФ индикатор (почему-то я подумал, что речь шла о советнике- невнимательно прочел изначальный вопрос).
Проблема в вычислении limit- Вам необходимо учитывать разницу между Period() и TimeFrame1.
Переделывать Ваш код некогда, посмотрите чужие МТФ индикаторы

multi.period.ma22.mq4 mtf_bollinderbands.mq4

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

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

Всем доброго времени!

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

Возможно ее надо сделать как функцию.

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

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

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

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

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

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

Войти

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

Войти

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


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

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