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

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


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

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

awals я просил файл, который Вы получаете с сервера, можно в виде текста. Мы же в нём будем данные искать

Понял.

MyStopLossJson_Test_EURUSD_60.txt

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

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

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

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

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

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

Перейти

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

Перейти

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

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

Всем привет! Будьте добры посмотрите пожалуйста на индикатор и подскажите или поправьте, почему у меня не получается данные по буферам получить.

HP_DIFF.ex4 Proverka 2.mq4

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

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

Здравствуйте. В советнике необходимо , чтоб ордера открывались только на открытии бара ( М15 ).

 

if( timepref==Time[0])return ;
   int timeprev=Time[0];

 maprice=iMA(0,0,MaPeriod,MaShift,MODE_EMA,PRICE_CLOSE,1);
  if(CountBuy()==0 && Bid>maprice )
   {
    ticket= OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue);

 

Открываются , почему то не только на открытии бара, но и в середине бара ( например в 10.07 ), если предыдущий ордер закрылся...

Что не так , не пойму.

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

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

Здравствуйте. В советнике необходимо , чтоб ордера открывались только на открытии бара ( М15 ).

 

if( timepref==Time[0])return ;
   int timeprev=Time[0];

 maprice=iMA(0,0,MaPeriod,MaShift,MODE_EMA,PRICE_CLOSE,1);
  if(CountBuy()==0 && Bid>maprice )
   {
    ticket= OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue);

 

Открываются , почему то не только на открытии бара, но и в середине бара ( например в 10.07 ), если предыдущий ордер закрылся...

Что не так , не пойму.

Данная переменная int timeprev; должна быть глобальной, т.е. находиться за пределами функции void OnTick() и тп.

Ну и конструкция должна быть немного иной.

if (timeprev != Time[0]) {  
    maprice=iMA(0,0,MaPeriod,MaShift,MODE_EMA,PRICE_CLOSE,1);
    if (CountBuy()==0 && Bid>maprice) {
        ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,0,0,"",Magic,0,Blue);
        timeprev = Time[0];
    }
}

 

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

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

awals , файл состоит из повторяющихся структур = {"time1":1562086800,"time2":1562090400,"price_sell":1.127,"price_buy":1.132,"sell_stop":2.5604,"buy_stop":2.5266}

разделённых ",". В MQL есть функция StringSplit, которая разделяет строку на подстроки и записывает в массив, разделяющим символом предлагаю сделать "{".

Функция вернёт размер массива, берём последнюю запись [n-1] и опять засовываем в StringSplit, только с разделителем ",".

Полученный массив по строчно анализируем и записываем в переменные.

Вот пример работы StringSplit:

string strArr[];

ValueCount = StringSplit( strURL, StringGetCharacter("{",0), strArr);

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

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

if( timepref==Time[0])return ;
   int timeprev=Time[0];

Если код скопирован из советника, то у Вас опечатка в имени переменной timepref(v)

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

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

awals , файл состоит из повторяющихся структур = {"time1":1562086800,"time2":1562090400,"price_sell":1.127,"price_buy":1.132,"sell_stop":2.5604,"buy_stop":2.5266}

разделённых ",". В MQL есть функция StringSplit, которая разделяет строку на подстроки и записывает в массив, разделяющим символом предлагаю сделать "{".

Функция вернёт размер массива, берём последнюю запись [n-1] и опять засовываем в StringSplit, только с разделителем ",".

Полученный массив по строчно анализируем и записываем в переменные.

Вот пример работы StringSplit:

string strArr[]; 

ValueCount = StringSplit( strURL, StringGetCharacter("{",0), strArr);

Спасибо, но ни черта не понял, первый массив получил, а как дальше так и не понял.
Как выбрать последнею запись, как последний массив записать в переменные.

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

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

Как выбрать последнею запись

 

18 часов назад, 0ll_ сказал:

 

Функция вернёт размер массива, берём последнюю запись [n-1]

считываем в переменную типа string значение последней записи 
string LastLine = strArr[n-1], 
где n- размер массива strArr.
и дальше

18 часов назад, 0ll_ сказал:

и опять засовываем в StringSplit, только с разделителем ",".

string strArr2[];

ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2);

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

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

 

считываем в переменную типа string значение последней записи 
string LastLine = strArr[n-1], 
где n- размер массива strArr.
и дальше

string strArr2[];

ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2);

Огромное спасибо, всё получилось и ещё вопрос, а как можно добиться чтобы не толка последняя записи была, а например последние 5 записей?

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

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

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

организуйте цикл, типа

for(int i=ArraySize(strArr)-6;i<ArraySize(strArr);i++)
{
 // здесь получаете значение из массива и обрабатываете как было раньше расписано
  string LastLine = strArr[i];
  int ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2);
}

 

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

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

организуйте цикл, типа


for(int i=ArraySize(strArr)-6;i<ArraySize(strArr);i++)
{
 // здесь получаете значение из массива и обрабатываете как было раньше расписано
  string LastLine = strArr[i];
  int ValueCount2 = StringSplit( LastLine, StringGetCharacter(",",0), strArr2);
}

 

Добрый день, подскажите если какие-нибудь путные Книги по обучению MQL4? Или может вы порекомендуете.

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

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

подскажите если какие-нибудь путные Книги по обучению MQL4?

Уровень-то у Вас не начальный - книг для продвинутых не встречал, в основном справкой пользуемся...

Если индикатор получился, может опубликуете на форуме? Думаю многим полезно будет.

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

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

Уровень-то у Вас не начальный - книг для продвинутых не встречал, в основном справкой пользуемся...

Если индикатор получился, может опубликуете на форуме? Думаю многим полезно будет.

Вот в этом и дело почему ищу Книгу, Уровень у меня начинающий это мой первый Индикатор, который пробую паписта.
А вот сам Индикатор ну или что получилось.не судите учусь.

StopLoss.mq4

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

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

Подскажите зеленому как правильно расписать цикл for() для следующей задачки:

if(allbuyprofit<-AccountBalance()*LockTrigger/100)OrderSend(Symbol(),OP_SELL,LockLotSell,Bid,3,sl,tp," ",MagicLockSell,0,Pink);

нужно открытие лока не только при достижении процента просадки LockTrigger, но и повторные при достижении любой кратной просадки (1, 2, 3, 4 и т.д.)*LockTrigger.

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

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

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

for(int i=0;i<OrdersHistoryTotal();i++)
{
 OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
 if(OrderSymbol()!=Symbol()||OrderType()>1)continue;
 name=OrderTicket();
 color col=SellColor;
 if(OrderType()==0)col=BuyColor;
 
 datetime a = OrderOpenTime();
 double b = OrderOpenPrice();
 datetime c = OrderCloseTime();
 double d = OrderClosePrice();
 datetime f;
 
 ObjectCreate(name+"T",OBJ_ARROW,0,a,b);
 ObjectSet(name+"T",OBJPROP_COLOR,col);         // - цвет
 ObjectSet(name+"T",OBJPROP_ARROWCODE,1);       // - стрелка вправо

 ObjectCreate(name+"F",OBJ_ARROW,0,c,d);
 ObjectSet(name+"F",OBJPROP_COLOR,col);         // - цвет
 ObjectSet(name+"F",OBJPROP_ARROWCODE,3);       // - стрелка влево
 
 y=NormalizeDouble( OrderProfit() + OrderCommission() + OrderSwap(), 2);
 f = c+5*PeriodSeconds(PERIOD_CURRENT);
 ObjectCreate(name+"L",OBJ_TEXT,0,f,(d+35*Point)); 
 ObjectSetText(name+"L",DoubleToString(y,2)+"$",10,"Tahoma",LabelColor);
 
 
       
 x=x+y;
}

 

HistoryOrders.mq4

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

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

нужно открытие лока не только при достижении процента просадки LockTrigger, но и повторные при достижении любой кратной просадки (1, 2, 3, 4 и т.д.)*LockTrigger

Прости, не понятно, объясни по-шагово откуда возникнет просадка х2 х3 ...  на залокированных ордерах?

В любом случае это решается не циклом, а формулой с коэффициентом кратности просадки int kfx = (int) MathFloor( AccountBalance() / allbuyprofit / ( LockTrigger / 100 ) );

потом на этот коэффициент умножаете лот локирующего ордера или дистанцию ТП - я не знаю как Вы торгуете и как будете лок раскрывать...

 

NightTraider по идее приведённый Вами код должен показать все закрытые ордера, в том числе ручные и открытые скриптом - в нём нет фильтрации по магику.

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

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

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


for(int i=0;i<OrdersHistoryTotal();i++)
{
 OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
 if(OrderSymbol()!=Symbol()||OrderType()>1)continue;
 name=OrderTicket();
 color col=SellColor;
 if(OrderType()==0)col=BuyColor;
 
 datetime a = OrderOpenTime();
 double b = OrderOpenPrice();
 datetime c = OrderCloseTime();
 double d = OrderClosePrice();
 datetime f;
 
 ObjectCreate(name+"T",OBJ_ARROW,0,a,b);
 ObjectSet(name+"T",OBJPROP_COLOR,col);         // - цвет
 ObjectSet(name+"T",OBJPROP_ARROWCODE,1);       // - стрелка вправо

 ObjectCreate(name+"F",OBJ_ARROW,0,c,d);
 ObjectSet(name+"F",OBJPROP_COLOR,col);         // - цвет
 ObjectSet(name+"F",OBJPROP_ARROWCODE,3);       // - стрелка влево
 
 y=NormalizeDouble( OrderProfit() + OrderCommission() + OrderSwap(), 2);
 f = c+5*PeriodSeconds(PERIOD_CURRENT);
 ObjectCreate(name+"L",OBJ_TEXT,0,f,(d+35*Point)); 
 ObjectSetText(name+"L",DoubleToString(y,2)+"$",10,"Tahoma",LabelColor);
 
 
       
 x=x+y;
}

 

HistoryOrders.mq4 6 \u043a\u0411 · 0 загрузок

Вот

Order_Indikator.mq4

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

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

Прости, не понятно, объясни по-шагово откуда возникнет просадка х2 х3 ...  на залокированных ордерах?

В любом случае это решается не циклом, а формулой с коэффициентом кратности просадки int kfx = (int) MathFloor( AccountBalance() / allbuyprofit / ( LockTrigger / 100 ) );

потом на этот коэффициент умножаете лот локирующего ордера или дистанцию ТП - я не знаю как Вы торгуете и как будете лок раскрывать...

Локирование частичное, поэтому дальнейший рост просадки возможен. Не понял, зачем лот умножать на коэффициент (с расчетом лотности как раз нет проблем).

int kfx = (int) MathFloor( AccountBalance() / allbuyprofit / ( LockTrigger / 100 ) ) выдаст абракадабру. Если имелась в виду именно кратность просадки тригеру, то правильнее MathFloor( allbuyprofit / AccountBalance() / ( LockTrigger / 100 ) )

Как в дальнейшем использовать kfx, чтобы открытие локов было однократным для каждого значения kfx (до тех пор, пока локирующий ордер, соответствующий этой кратности, не закрыт)?

Пока что все попытки приводят к хаотичному открытию ордеров.

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

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

Локирование частичное, поэтому дальнейший рост просадки возможен

Самый простой вариант это создать глобальную переменную (лучше на уровне терминала) kfz = 1;

и внести в Вашу формулу изменения:

if( allbuyprofit< -AccountBalance() *LockTrigger *kfz /100)
{ OrderSend(Symbol(),OP_SELL,LockLotSell,Bid,3,sl,tp," ",MagicLockSell,0,Pink);  kfz++; }

После закрытия лока ( ну или слива ;) ) не забыть присвоить kfz = 1;

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

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

Оказалось ошибка тикета из-за которой он беспорядочно открывал ордера.

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

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

Ребята, привет!


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

 

Спасибо!

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

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

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

Спасибо!

Ссылка на онлайн и оффлайн версии курса курса

Здравствуйте, дорогой подписчик ! 

Посмотреть видеокурс "Форекс для чайников" вы можете двумя способами:

 

1) Онлайн версия

Доступна по ссылке:

http://tlap.com/wppage/videokurs-foreks-dlya-chaynikov/

 

А еще на сайте есть раздел посвященный Урокам по MQL, переходим к последней странице и от туда изучаем.

http://tlap.com/category/uroki-po-mql/

 

2) Оффлайн версия

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

 

Вот ваша ссылка на скачивание архива с видеокурсом  "Форекс для Чайников":
https://hb.bizmrg.com/tlap-files/courses/Chainik2018.rar

 

Также вы можете скачать этот курс с торрент-трекера:
https://rutracker.net/forum/viewtopic.php?t=4126559

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

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

Ссылка на онлайн и оффлайн версии курса курса

Здравствуйте, дорогой подписчик ! 

Посмотреть видеокурс "Форекс для чайников" вы можете двумя способами:

 

1) Онлайн версия

Доступна по ссылке:

http://tlap.com/wppage/videokurs-foreks-dlya-chaynikov/

 

А еще на сайте есть раздел посвященный Урокам по MQL, переходим к последней странице и от туда изучаем.

http://tlap.com/category/uroki-po-mql/

 

2) Оффлайн версия

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

 

Вот ваша ссылка на скачивание архива с видеокурсом  "Форекс для Чайников":
https://hb.bizmrg.com/tlap-files/courses/Chainik2018.rar

 

Также вы можете скачать этот курс с торрент-трекера:
https://rutracker.net/forum/viewtopic.php?t=4126559

Нужен курс по программированию.
Нашел на другом источнике.
Спасибо!

Еще вопрос, подскажите пожалуйста, сколько потребуется времени (в часах, примерно) чтобы освоить программирование в объеме:
открытие и сопровождение советником сетки ордеров по сигналам торговой системы, учитывающей ATR и показатели выхода новостей по новостному календарю? 

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

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

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

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

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

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

Войти

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

Войти

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


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

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