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

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


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

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

Поэтому я каждый ордер оборачиваю в класс и на каждом тике контролирую его состояние (есть ли он физически и не поменялись ли его параметры). При этом контролируется только ордера с которыми работает советник.


Простите, а каким образом Вы их контролируете? Не OrderSelect-ом?
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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

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

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

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

Перейти

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

Перейти

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

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

Здравствуйте! Пожалста, можно создать видеоурок на создание инфо панели для mql4? Заранее буду очень благодарен!!! ... И думаю не только я... ))

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

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


Основная ошибка начинающих в работе с ордерами - это тупо каждый раз искать его среди открытых по Magic, OrderSelect достаточно "дорогая" функция

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

Конечно встречалась и даже сам как-то реализовывал (редкий надо сказать зверь, да и не все ДЦ поддерживают).
Решается примерно так (общий смысл):

bool COrder::Closing(double mCloseLot=0.0){
if (cFlag>ORDER_MUST_CLOSE) return true;
cFlag=ORDER_MUST_CLOSE;
if (!OrderSelect(cTicket,SELECT_BY_TICKET)) return false;
if (OrderCloseTime()) {CheckPartialClose(); return true;}
if (!mCloseLot||mCloseLot>cLot) mCloseLot=cLot;
bool isPartial=NormalizeDouble(mCloseLot-cLot,cLotDigits)!=0.0;
if (!OrderClose(cTicket,mCloseLot,0.0,SHORT_MAX)) return false;
if (isPartial){
ReInitValues();
cFlag=ORDER_DEAL;}
else cFlag=ORDER_CLOSED;
return true;} Изменено пользователем ZloyZam
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

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


А что Вы от него ожидаете?
Что в нем не так ? :)
Ссылка на сообщение
Поделиться на другие сайты

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


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


А что Вы от него ожидаете?
Что в нем не так ? :)


Ошибки в тестере выдает (OrderModify error 1, OrderModify error 130) и закрывает как-то не так.


По плану было: Сначала выставляются отложенники байстоп и селлстоп на величину стопа(например 40п). Дальше, если цена открывается бай, выставляется новый байстоп и подтягивается селстоп. Ну и в обратную сторону также. Изменено пользователем nelenaby
Ссылка на сообщение
Поделиться на другие сайты

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

Ошибки в тестере выдает (OrderModify error 1, OrderModify error 130) и закрывает как-то не так.


Блин, в журнал не посмотрел :)
      else 
{ //если есть байстоп модифицируем
if (CountBuy()>=1)//и есть открытые бай
{
price_buystop = NormalizeDouble(price_buy+StopLoss*Point,Digits);
TP= NormalizeDouble(price_buystop + TakeProfit*Point,Digits);
SL= NormalizeDouble(price_buystop - StopLoss*Point,Digits);
bool res = OrderModify(OrderTicket(),price_buystop,SL,TP,0,Blue);
if(!res)
Print("Ошибка модификации ордера buystop1. Код ошибки=",GetLastError());
else
Print("ордер buystop1 успешно модифицирован.");
}

if (CountSell()>=1)//и есть открытые и селл
{
price_buystop = NormalizeDouble(price_sell+StopLoss*Point,Digits);
TP= NormalizeDouble(price_buystop + TakeProfit*Point,Digits);
SL= NormalizeDouble(price_buystop - StopLoss*Point,Digits);
bool res = OrderModify(OrderTicket(),price_buystop,SL,TP,0,Blue);
if(!res)
Print("Ошибка модификации ордера buystop2. Код ошибки=",GetLastError());
else
Print("ордер buystop2 успешно модифицирован.");
}
}

Я не нашел- где выбирается OrderTicket(), который Вы пытаетесь модифицировать...
И перед тем, как модифицировать ордер, нужно проверить- новые ТП/СЛ не совпадают с уже установленными ТП/СЛ ордера
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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



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


А что Вы от него ожидаете?
Что в нем не так ? :)


Ошибки в тестере выдает (OrderModify error 1, OrderModify error 130) и закрывает как-то не так.


По плану было: Сначала выставляются отложенники байстоп и селлстоп на величину стопа(например 40п). Дальше, если цена открывается бай, выставляется новый байстоп и подтягивается селстоп. Ну и в обратную сторону также.

Если судить по кодам ошибок, то:
1 - это когда вы даете команду на изменение ордера, но при этом все его параметры повторяете.
130 - неправильные стопы, сюда же относятся цены открытия отложек. Либо цена невалидна (например для buystop
Ссылка на сообщение
Поделиться на другие сайты

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

Вопрос - а в MT4 есть команды позволяющие выгружать данные в Эксель?
Было бы интересно выявлять характерные свойства Убыточных ордеров тех или иных советников.
Может есть урок на эту тему?

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

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

Вопрос - а в MT4 есть команды позволяющие выгружать данные в Эксель?

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

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

Вопрос - а в MT4 есть команды позволяющие выгружать данные в Эксель?


Читайте документацию и проблем не будет
https://www.metatrader4.com/ru/trading-platform/help/service/dde
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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


Вопрос - а в MT4 есть команды позволяющие выгружать данные в Эксель?
Было бы интересно выявлять характерные свойства Убыточных ордеров тех или иных советников.
Может есть урок на эту тему?


Если из робота организовывать, то примерно так
uint Save(string fFileName,int fTicket){
if (!OrderSelect(fTicket,SELECT_BY_TICKET)) return 0;
int hndl=FileOpen(fFileName,FILE_CSV|FILE_READ|FILE_WRITE);
if (hndl==INVALID_HANDLE) return 0;
FileSeek(hndl,0,SEEK_END);
uint res=FileWrite(hndl,
OrderSymbol(),
(string)OrderType(),
DoubleToString(OrderOpenPrice(),5),
DoubleToString(OrderStopLoss(),5),
DoubleToString(OrderTakeProfit(),5)
//Что хотите, еще
);
FileClose(hndl);
return res;}
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Подскажите, как можно выбрать программно определенный символ из списка?
Список символов, который расположен в тестере стратегий

terminal_Fgiboj6c1K.png

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

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


Подскажите, как можно выбрать программно определенный символ из списка?
Список символов, который расположен в тестере стратегий


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

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

Сочинил индикатор с таким алгоритмом он ставит стрелки.

diMA11=iMA(NULL,0,MA11,0,MODE_SMA,PRICE_CLOSE,i);

diADX0=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_PLUSDI,i);
diADX1=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_MINUSDI,i);
diADX2=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_MAIN,i);

diADX01=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_PLUSDI,i+1);
diADX11=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_MINUSDI,i+1);

diClose=iClose(NULL,0,i);
//купить
if(diADX0>diADX1 && diADX01Uroven && diClose>=diMA11) {BufUp=Low-ArrShift;pos=i;if(b);b=b+1;s=0;}}
//продать
if(diADX0diADX11 && diADX2>Uroven && diClose=High+ArrShift;pos=i;if(s);s=s+1;b=0;}}
=======================
Вопрос:
Как по вершинам +DI его заставить ставить скрелку?
Алгоритм такой:
Есть вершины 3,2,1.
Надо buy = 3>2 && 2Дальше я соображу как сделать полный алгоритм индикатора.
Мне нужно знать как правиьно прописать первую вторую и третью вершины.

Безымянный3.jpg

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

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


Сочинил индикатор с таким алгоритмом он ставит стрелки.

diMA11=iMA(NULL,0,MA11,0,MODE_SMA,PRICE_CLOSE,i);

diADX0=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_PLUSDI,i);
diADX1=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_MINUSDI,i);
diADX2=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_MAIN,i);

diADX01=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_PLUSDI,i+1);
diADX11=iADX(NULL,0,ADX13,PRICE_CLOSE,MODE_MINUSDI,i+1);

diClose=iClose(NULL,0,i);
//купить
if(diADX0>diADX1 && diADX01Uroven && diClose>=diMA11) {BufUp=Low-ArrShift;pos=i;if(b);b=b+1;s=0;}}
//продать
if(diADX0diADX11 && diADX2>Uroven && diClose=High+ArrShift;pos=i;if(s);s=s+1;b=0;}}
=======================
Вопрос:
Как по вершинам +DI его заставить ставить скрелку?
Алгоритм такой:
Есть вершины 3,2,1.
Надо buy = 3>2 && 2Дальше я соображу как сделать полный алгоритм индикатора.
Мне нужно знать как правиьно прописать первую вторую и третью вершины.


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

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

Добавь еще два буфера для стрелок


Я старый алгоритм уберу и пропишу новый.

Добавлено: 06-06-2019 16:56:54

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

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


Добавь еще два буфера для стрелок


Я старый алгоритм уберу и пропишу новый.

Добавлено: 06-06-2019 16:56:54

Мне нужно знать как правиьно прописать первую вторую и третью вершины.

Я думал у Вас с mql проблема, а Вы, оказывается, хотите, что бы Вам алгоритм написали, тогда Вам сюда:
https://www.mql5.com/ru/job
Ссылка на сообщение
Поделиться на другие сайты

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

Я думал у Вас с mql проблема, а Вы, оказывается, хотите, что бы Вам алгоритм написали, тогда Вам сюда:


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

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

Мне нужно знать как правиьно прописать первую вторую и третью вершины.

Если вершины находить умеете, то алгоритм следующий:
определяем глобальный массив вершин double V[3] = {0,0,0};
при нахождении новой вершины newV и newV > 0:
переписываем значения вершин V[2] = V[1]; V[1] = V[0]; V[0] = newV;
проверим заполненность массива if ( V[2] > 0 )
теперь можно анализировать вершины
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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

Доброго времени суток!
Вопрос такого плана. Можно ли сделать так, что бы советник видел линии, которые наносятся на график в MT4 вручную?

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

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


Доброго времени суток!
Вопрос такого плана. Можно ли сделать так, что бы советник видел линии, которые наносятся на график в MT4 вручную?


Работа с графическими объектами:
https://docs.mql4.com/ru/objects/

Чтобы советник нашел объект support_line на графике, нужна функция ObjectFind:
https://docs.mql4.com/ru/objects/objectfind

Пример:
if (ObjectFind(0, "support_line") >= 0) {/*если линия есть на графике*/} else {/*если линии на графике нет*/}
  • Лайк 4
Ссылка на сообщение
Поделиться на другие сайты

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

Доброго дня всем!! Возможно ли сделать "Генератор меджика" или добавлять +1 к номеру, на случай забывчивости менять номер на той же валютной паре , но с разным таймфреймом?

Есть такой код, но он не работает или в нем что то не так...  Он все равно ставит Меджик с одинаковым номером... Помогите разобраться или эта затея гибельна, не стоит того??

 файл прекреплен.

GenericMagic.mq4

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

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

Доброго дня всем!! Возможно ли сделать "Генератор меджика" или добавлять +1 к номеру, на случай забывчивости менять номер на той же валютной паре , но с разным таймфреймом?

Есть такой код, но он не работает или в нем что то не так...  Он все равно ставит Меджик с одинаковым номером... Помогите разобраться или эта затея гибельна, не стоит того??

Затея не гибельна, сделать можно, просто обычно советник, который работает на одной паре, но на разных ТФ имеет разные сет файлы в которых и указывается уникальный меджик. К меджику достаточно добавить №ТФ в минутах и всё.

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

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

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

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

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

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

Войти

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

Войти

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


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

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