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

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


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

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

Мне кажется паттерн "рельсы" должен не так выглядеть. Но вопрос сейчас не в этом. Вот у Вас функция Reils() возвращает 0,1 или -1. Допустим, у нас задача посчитать сколько раз эта функция вернет единицу


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

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

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

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

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

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

Перейти

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

Перейти

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

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


ТФ - от 30м и выше

Проблема вот в чем - в терминале 1045 на ноуте все вродь работает, но при переносе на другой комп с той же версией терминала вылазят 130е ошибки. Может дело в бидах-асках, не знаю. Рассмотрите плз, если есть время.

Идея для кода - сов ставит отложки на уровнях open&close предыдущей свечи (можно с отступом в пунктах) и временем удаления в случае не срабатывания.

Копия_day-h-2.mq4
day-h-2.set
day-h-2-2.set

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

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



Уважаемые спецы! Сделайте пожалуйста что бы у этого индюка работали буфера и если можно то прикрепите алерт или сообщение.(не обязательно) . Вот индик и скрин. При появлении паттерна заполнялся буфер. К сожалению сам не шарю в этом. Спасибо.



на историй хорошо отрабатывается, даже удивил.А что значит буфера работали, что он еще должен делать? И может советник кто то накидает, посмотрели бы что он на самом деле из себя представляет!

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

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


Уважаемые спецы! Сделайте пожалуйста что бы у этого индюка работали буфера и если можно то прикрепите алерт или сообщение.(не обязательно) . Вот индик и скрин. При появлении паттерна заполнялся буфер. К сожалению сам не шарю в этом. Спасибо.



Так индюк рисует как Малевич. Смысл?
Ссылка на сообщение
Поделиться на другие сайты

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



Уважаемые спецы! Сделайте пожалуйста что бы у этого индюка работали буфера и если можно то прикрепите алерт или сообщение.(не обязательно) . Вот индик и скрин. При появлении паттерна заполнялся буфер. К сожалению сам не шарю в этом. Спасибо.



Так индюк рисует как Малевич. Смысл?

И замечательно что рисует. Стереотипы страшная штука. Но дело даже не в этом. Дело в том что никто НЕ МОЖЕТ сделать аллерт. А это согласитесь уже другое "кино".
Ссылка на сообщение
Поделиться на другие сайты

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

Господа, программисты. А можно ли как-то сравнивать баланс, который был на предыдущей свече и на текущей. Допустим, запомнить баланс на счёте при закрытии часовой свечи, и при закрытии следующей свечи, сравнить его с предыдущим. Если разница

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

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

Дело в том что никто НЕ МОЖЕТ сделать аллерт. А это согласитесь уже другое "кино".



Не "никто НЕ МОЖЕТ", а не хочет - это разные вещи. Кино в том, что сигнал может появится на мгновение и пропасть, а алерт отработает, пользователь уже не наблюдает сигнала на графике или наоборот, спустя время, индюк нарисовал сигнал на истории и тут начинается: а почему был/не был сигнал? Что за фигню вы мне сделали и т.д. т.п. Отсюда вопрос: а прогеру этот гемор нужен? Если Вам так нужно - обратитесь в платную ветку.
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

А можно ли как-то сравнивать баланс, который был на предыдущей свече и на текущей. Допустим, запомнить баланс на счёте при закрытии часовой свечи, и при закрытии следующей свечи, сравнить его с предыдущим. Если разница


Можно, вот функция, возвращает true если баланс на новой свече уменьшился:

bool isBalansDown()
{
bool val = false;
static datetime new_Bar = 0;
static double balans = 0;
if ( new_Bar == 0 ) { new_Bar = Time[0]; balans = AccountBalance(); return(false); } // начальные значения
if ( new_Bar == Time[0]) return(false); //Если бар не закрыт - выход
if ( AccountBalance() - balans new_Bar = Time[0]; balans = AccountBalance();
return(val);
}

использовать на каждом тике так:

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

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

Подскажите функцию закрытия ордера по противоположному сигналу.К примеру : есть позиция Buy ,появился противоположный и открылся Sell,соответственно Buy закрылся.

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

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

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



Самый простой вариант


if(Signal == true){ // есть сигнал
Type = GetOrderOpenType(); //получаем тип открытого ордера с помощью функции
CloseAll(); //закрываем ордер или ордера (нужно прописать в функции)
// далее в зависимости от типа ордера, открываем новый
if(Type == OP_BUY){
sellticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red); }
if(Type == OP_SELL){
buyticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue); }
}
Изменено пользователем Alexandrkas
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Посмотрите, пожалуйста. Почему не работает множитель?
Мне всё равно каким был предыдущий ордер, следующий должен открыться с большим лотом.
extern int Lots = 1;
extern int Slip = 10;
extern int Magic = 123;
extern double Multiplier = 2.1;
extern bool UserReilsCandles = true;

int ticket;
double lastlot;

void OnTick()
{
lastlot = (FindLastLots(OP_SELL) || FindLastLots(OP_SELL));
lastlot = NormalizeDouble(lastlot*Multiplier, 2);
if (UserReilsCandles && Reils() == 1 && Fun_New_Bar() == true)
{

ticket = (OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slip, 0, 0, IntegerToString(5), Magic, 0, CLR_NONE));
if (ticket {
Print ("Ошибка открытия ордера на покупку");
}
}
if (UserReilsCandles && Reils() == -1 && Fun_New_Bar() == true)
{

ticket = (OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slip, 0, 0, IntegerToString(5), Magic, 0, CLR_NONE));
if (ticket {
Print ("Ошибка открытия ордера на продажу");
}
}
}
//+------------------------------------------------------------------+
int Reils()
{
double Close1 = iClose(Symbol(), 0, 1);
double Open1 = iOpen(Symbol(), 0, 1);
double Close2 = iClose(Symbol(), 0, 2);
double Open2 = iOpen(Symbol(), 0, 2);
if (Close1 Open2) return(-1);
if (Close1 > Open1 && Close2 return(0);
}
//+------------------------------------------------------------------+
bool Fun_New_Bar()// Ф-ия обнаружения нового бара
{
static datetime Prev_Time=0;// Время текущего бара
if(Prev_Time==0)//если предварительное время равно 0
{
Prev_Time=Time[0];//если предвар. время равно времени нулевого бара, то это первый запуск функции
return(false);//возвращаем ложь
}
if(Prev_Time!=Time[0])//если предвар. время не равно времени нулевого бара, то есть новый бар
{
Prev_Time=Time[0];//Поймался новый бар, присваиваем предв. времени время нового бара
return(true);//есть новый бар, возвращаем истину
}
return(false);
}
//+------------------------------------------------------------------+
double FindLastLots(int otype)
{
double oldlots = 0;
int oldticket;
for (int cnt = OrdersHistoryTotal()-1; cnt >= 0; cnt--)
{
if (OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY))
{
if(OrderMagicNumber() == Magic)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
ticket = oldticket;
oldlots = OrderLots();
}
}
}
}
return(oldlots);
}
//+------------------------------------------------------------------+

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

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

double FindLastLots(int otype)
{
double oldlots = 0;
int oldticket;
for (int cnt = OrdersHistoryTotal()-1; cnt >= 0; cnt--)
{
if (OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY))
{
if(OrderMagicNumber() == Magic)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
ticket = oldticket;
oldlots = OrderLots();
}
}
}
}
return(oldlots);
}


В этой функции не нужен параметр otype.
Измени заголовок функции на double FindLastLots()

lastlot = (FindLastLots(OP_SELL) || FindLastLots(OP_SELL));


В этом месте неправильное присваивание результата вызова функции.
Надо так lastlot = FindLastLots(); Это с учётом того, что ты изменишь заголов функции FindLastLots.
Ссылка на сообщение
Поделиться на другие сайты

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

Объясните, пожалуйста, что такое "ticket" ордера, и чем он отличается от "Magic". Заранее, спасибо. P. S. В учебнике не могу это найти.

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

Обучение языку MQL4 под MetaTrader 4 Опубликовано
sergej1968,
_https://docs.mql4.com/ru/trading/ordermagicnumber
_https://docs.mql4.com/ru/trading/orderticket
_https://docs.mql4.com/ru/trading/ordersend

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

OrderMagicNumber или "магик" это уникальное число, которое задает пользователь при открытии ордера, опять же командой OrderSend. У каждого советника должен быть свой магик. Он нужен, чтобы советник отличал свои ордера от чужих.

Посмотрите видеоуроки на сайте Павла, начните с первого http://tradelikeapro.ru/mql-nachalo/, очень многое прояснится. Изменено пользователем Sergey Forex
  • Лайк 3
Ссылка на сообщение
Поделиться на другие сайты

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

Привет! Всем известно , что в MT4 можно наложить один индикатор на другой, чтобы , к примеру, MA строилась на показаниях RSI . А как программно сконструировать такой "составной" индикатор ? Технические индикаторы типа iMA не дают возможности выбрать в качестве типа цены Previous Indicator Data ....

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

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


Привет! Всем известно , что в MT4 можно наложить один индикатор на другой, чтобы , к примеру, MA строилась на показаниях RSI . А как программно сконструировать такой "составной" индикатор ? Технические индикаторы типа iMA не дают возможности выбрать в качестве типа цены Previous Indicator Data ....



Заполняешь массив показаниями индикатора, по которому хочешь построить машку. И потом iMAOnArray().
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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

Как программно индикатор удалить с графика.например для советника
ExpertRemove(); //это помогает,а индикатор продолжает быть на графике.Код компилируется без ошибок.

//+------------------------------------------------------------------+
//| Size_bar.mq4 |
//| Copyright 2016, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
#property indicator_chart_window


//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{

double Size_bar_W;
Size_bar_W=iOpen(0,0,0)-iClose(0,0,0);
if (_Digits==5)
{
Alert("Size_bar Weekly pips=",OrderSymbol(), Size_bar_W *100000 );
ExpertRemove();
}else
{
Alert("Size_bar Weekly pips=",OrderSymbol(), Size_bar_W *1000 );//3 знака
ExpertRemove();
}
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---

//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}

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

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

Уважаемые программисты! Подскажите как сделать так, чтобы советник стоял на одном графике, а торговал (при наличии сигналов) на всех парах, открытых в обзоре рынка? Если можно кусок кода или подскажите где копать?

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

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


Уважаемые программисты! Подскажите как сделать так, чтобы советник стоял на одном графике, а торговал (при наличии сигналов) на всех парах, открытых в обзоре рынка? Если можно кусок кода или подскажите где копать?



Тут не может быть единого универсального решения. Получение сигналов со всех инструментов, их анализ, открытие сделок, сопровождение... и все это будет делаться одним экспертом? Боюсь это будет очень тяжелая конструкция. Особенно если еще в работе участвуют индикаторы. Если Вам просто нужно открыть ордер на инструменте, отличающемся от того, на котором запущен эксперт, то это умеет OrderSend(). Укажите просто название инструмента одним из аргументов функции. С помощью SymbolInfoDouble() можете получать цену по интересующему инструменту. iOpen(), iClose(), iHigh(), iLow() возвращают цены OHLC интересующего бара интересующего инструмента. Ну и т.д. Все от конкретных задач зависит.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте.
Устал тыкать ручками на сайте бинаров альпари.
Вопрос в том , что есть советник и есть сайт бинаров альпари.
Так вот как бы реализовать идею, советник дает сигнал покупку и сделка выходила на сайт бинаров?
Просто привык к альпе, но у них нет возможности бинарить в терминале.
Может туплю, но как говорится за спрос по голове не ударят))

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

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


Уважаемые программисты! Подскажите как сделать так, чтобы советник стоял на одном графике, а торговал (при наличии сигналов) на всех парах, открытых в обзоре рынка? Если можно кусок кода или подскажите где копать?


youtube.com
Валерій Вакуленко
9 Мультивалютная торговля.
с 5 минуты, скорость воспроизведения 1.5
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


Простая сова на отложках с бу


ТФ - от 30м и выше

Проблема вот в чем - в терминале 1045 на ноуте все вродь работает, но при переносе на другой комп с той же версией терминала вылазят 130е ошибки. Может дело в бидах-асках, не знаю. Рассмотрите плз, если есть время.

Идея для кода - сов ставит отложки на уровнях open&close предыдущей свечи (можно с отступом в пунктах) и временем удаления в случае не срабатывания.



Причем тут бид и аск. 130 ошибка это стоплос. вполне возможно что у вас на компе 5 знаков, а на ноуте 4 знака. При этом будет ошибка. У альпари на реале 5 знаков а на демо 4 знака. Изменено пользователем Pavel888
  • Лайк 2
Ссылка на сообщение
Поделиться на другие сайты

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


Здравствуйте.
Устал тыкать ручками на сайте бинаров альпари.
Вопрос в том , что есть советник и есть сайт бинаров альпари.
Так вот как бы реализовать идею, советник дает сигнал покупку и сделка выходила на сайт бинаров?
Просто привык к альпе, но у них нет возможности бинарить в терминале.
Может туплю, но как говорится за спрос по голове не ударят))



Боюсь, что Ваша идея выходит за рамки MQL.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


Простая сова на отложках с бу


ТФ - от 30м и выше

Проблема вот в чем - в терминале 1045 на ноуте все вродь работает, но при переносе на другой комп с той же версией терминала вылазят 130е ошибки. Может дело в бидах-асках, не знаю. Рассмотрите плз, если есть время.

Идея для кода - сов ставит отложки на уровнях open&close предыдущей свечи (можно с отступом в пунктах) и временем удаления в случае не срабатывания.



У Вас во входных настройках вот эти переменные:

extern double BULevelBS            = 0.001;
extern double TrailingStopBS = 0.005;

extern double BULevelSS = 0.001;
extern double TrailingStopSS = 0.005;

extern double BULevelBL = 0.001;
extern double TrailingStopBL = 0.005;

extern double BULevelSL = 0.001;
extern double TrailingStopSL = 0.005;


задаются типом double и уже приведены к пунктам. Зачем далее в коде Вы умножаете их значения на Point? Попробуйте перемножить, например, вот это:

if(OrderOpenPrice()>=(Ask+BULevelSL*Point)&&OrderOpenPrice()
У пятизначного брокера на EURUSD Point вернет 0.00001
А теперь посчитаем:
BULevelSL(0.001)*Point(0.00001)=0.00000001. Что это? Для чего?

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

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

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

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

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

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

Войти

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

Войти

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


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

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