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

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


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

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

Здравствуйте, подскажите люди добрые как подсчитать убыточные ордера, идущие подряд. А при прибыльном, счет обнулялся бы. Что то изобрел, но не хватает ...


int LossOrders()
{
int oldticket;
ticket = 0;

for (i = OrdersHistoryTotal() - 1; i >= 0; i--)
{
if (OrderSelect (i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
ticket = oldticket;
if(OrderProfit() {
orderloss++;
}else orderloss=0;
}
}
}
}
return(orderloss);
}

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

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

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

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

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

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

Перейти

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

Перейти

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

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

Здраствуйте. Кто может, помогите разобраться с проблемой. Это касается одно из уроков по MQL.
Не открывается стоп-ордер на покупку. Если задавать вместо Bid конкретное значение, то все огонь!


void OnTick()
{
pipstop = NormalizeDouble(Bid + 10 * Point, 5);
SL = NormalizeDouble(pipstop - 20 * Point, 5);
TP = NormalizeDouble(pipstop + 30 * Point, 5);
ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.01, pipstop, 3, SL, TP, "", 12345, 0, Yellow);
if (ticket }

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

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


Здраствуйте. Кто может, помогите разобраться с проблемой. Это касается одно из уроков по MQL.
Не открывается стоп-ордер на покупку. Если задавать вместо Bid конкретное значение, то все огонь!


void OnTick()
{
pipstop = NormalizeDouble(Bid + 10 * Point, 5);
SL = NormalizeDouble(pipstop - 20 * Point, 5);
TP = NormalizeDouble(pipstop + 30 * Point, 5);
ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.01, pipstop, 3, SL, TP, "", 12345, 0, Yellow);
if (ticket }


Все будет нормально, не переживай!
Ссылка на сообщение
Поделиться на другие сайты

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


Здраствуйте. Кто может, помогите разобраться с проблемой. Это касается одно из уроков по MQL.
Не открывается стоп-ордер на покупку....



Здравствуйте, сколько у вас в цене знаков после запятой, если 5, то FREEZELEVEL не дает выставить отложенный ордер.
Ссылка на сообщение
Поделиться на другие сайты

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



Здраствуйте. Кто может, помогите разобраться с проблемой. Это касается одно из уроков по MQL.
Не открывается стоп-ордер на покупку. Если задавать вместо Bid конкретное значение, то все огонь!


void OnTick()
{
pipstop = NormalizeDouble(Bid + 10 * Point, 5);
SL = NormalizeDouble(pipstop - 20 * Point, 5);
TP = NormalizeDouble(pipstop + 30 * Point, 5);
ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.01, pipstop, 3, SL, TP, "", 12345, 0, Yellow);
if (ticket }


Все будет нормально, не переживай!

И в мыслях не было! ;)



Здраствуйте. Кто может, помогите разобраться с проблемой. Это касается одно из уроков по MQL.
Не открывается стоп-ордер на покупку....



Здравствуйте, сколько у вас в цене знаков после запятой, если 5, то FREEZELEVEL не дает выставить отложенный ордер.

Да, 5 знаков. Если поставить вместо Bid точное число, ,например, такое как 1.43502, то ордер открывается.
Ссылка на сообщение
Поделиться на другие сайты

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

iPerevalov, сделайте как в приложении. Buy открывается по Ask, у вас BuyStop выставляется по неверной цене, т.е. ниже Ask. Получается (Bid + 10 * Point) OrderSend.mq4

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

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


iPerevalov, сделайте как в приложении. Buy открывается по Ask, у вас BuyStop выставляется по неверной цене, т.е. ниже Ask. Получается (Bid + 10 * Point)


Глупая ошибка. Спасибо. Сменил Bid на Ask!
Ссылка на сообщение
Поделиться на другие сайты

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

Здравствуйте. По возможности помогите разобраться с частичным закрытием ордеров. Попробовал сам написать код программы.
Первую половину лота необходимо закрыть на главной линии Боллинжера. Вторую - на верхней. Я думал, что это можно реализовать двумя условиями.
В первом условии при вызове функции OrderClose() в параметре количество лотов записал OrderLots() / 2. А во втором условии оставил вызов функции OrderClose().
Компилятор не ругается, но Журнал показывает сообщение: "Ошибка закрытия 1 ордера на покупку". Дело в этом OrderLots() / 2. Так как когда я явно пытался указать значение лота, например, 0.01, то в Журанле уже не было сообщений.

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

// первое условие с центральной линией Боллинжера
if (Bid >= Bonds_Main && CountBuy() > 0)
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderMagicNumber() == MAGIC && OrderType() == OP_BUY)
if(!OrderClose(OrderTicket(), OrderLots() / 2, Bid, SLIPPAGE, Black))
Print("Ошибка закрытия 1 ордера на покупку");
}
}
}
// второе условие с верхней линией Боллинжера
if (Bid >= Bonds_Upper && CountBuy() > 0)
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderMagicNumber() == MAGIC && OrderType() == OP_BUY)
if(!OrderClose(OrderTicket(), OrderLots(), Bid, SLIPPAGE, Black))
Print("Ошибка закрытия 2 ордера на покупку");
}
}
}

Bonds_Main - значение центральной линии Боллинжера,
Bonds_Upper - значение вверхней линия Боллинжера,
CountBuy() - функция, возвращающая количество ордеров на покупку.

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

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


Здравствуйте. По возможности помогите разобраться с частичным закрытием ордеров. ...



Я знаю в чем проблема, но, пожалуй, не скажу. Сделаю лучше, подскажу как поступать в таких случаях. Просто принтуйте в журнал значения переменных, результаты функций и вычислений.
Например, так
Print("Ошибка закрытия 1 ордера на покупку", OrderLots() / 2);
и сравнивайте с тем, что должно быть.
  • Лайк 1
Ссылка на сообщение
Поделиться на другие сайты

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



Здравствуйте. По возможности помогите разобраться с частичным закрытием ордеров. ...



Я знаю в чем проблема, но, пожалуй, не скажу. Сделаю лучше, подскажу как поступать в таких случаях. Просто принтуйте в журнал значения переменных, результаты функций и вычислений.
Например, так
Print("Ошибка закрытия 1 ордера на покупку", OrderLots() / 2);
и сравнивайте с тем, что должно быть.


Попробовал по вашему совету провести вывод лота. Действительно, ошибка в дроблении. На выходе получается 0.0050000. Написал вывод сообщения о выводе лота выбранного ордера и выводит 0.0100000.
Подумал, вначале что дело в нулях. Но это не так (проверил =) ).

Спасибо вам за помощь. Я понял свою ошибку. Дело в двух проверках. >:d:dДобавил дополнительное условие в первой проверке, для того чтобы не происходило закрытие ордера в нем.
if(Bid >= Bonds_Main && CountBuy() > 0)
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderLots() == LOTS)
{
if(OrderMagicNumber() == MAGIC && OrderType() == OP_BUY)
if(!OrderClose(OrderTicket(), OrderLots() / 2, Bid, SLIPPAGE, Black))
Print("Ошибка закрытия ордера на покупку " + DoubleToStr(OrderLots()));
}
} Изменено пользователем iPerevalov
Ссылка на сообщение
Поделиться на другие сайты

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

Добрый день!
Можно ли запилить индикатор что бы показывал следующую инфу:
- Количество бычих свечей (зеленый цвет для удобства)
- Количество медвежих свечей (красный цвет для удобства)
- Количество бычих пунктов (зеленый цвет для удобства)
- Количество медвежих пунктов (красный цвет для удобства),
Ну и соответсвенно общий вид 12 б/8 м, 55п/40п ну что -то типо этого.По у же закрытым свечам
Есть идея, но отработку проверял только на небольшом временном периоде(т.к на калькуляторе не реал считать постоянно)
Выложу потом стратегию в разделе стратегий с эти индикатором, если его сварганят.
П.С Ну и конечно же цена вопроса??

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

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

Mario_uka, добрый день! Я могу сделать такой индикатор. Цена вопроса - отзыв о качестве обслуживания.
Как рассчитывать количество пунктов: от открытия до закрытия свечи или от максимума до минимума?

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

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

Ok! Индикатор отображает нужную вам информацию в левом верхнем углу, подробности на скрине. В пунктах для 5-ти знаков от максимума до минимума. Если будет нужно от открытия до закрытия свечи, пишите.
Настройки индикатора:

BarsPeriod = 300;  // Количество баров для подсчета

BarsCounter.ex4
USDCHFH4.png

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

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

Можешь подкорректировать- нужно по цене открытия и закрытия+ отображение по 4-х знаку, а то много цифр))))
Ну и респект \M/ \M/ \M/ за оперативность.
Где отзыв написать?


Добавлено: 29-08-2016 11:24:23

И еще вопрос можно ли сделать как в этом индюке, тут ранге период можно выбрать на графике двумя вертикальными чертами

VP-Range-v6.ex4
VP-Range-v6.mq4

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

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


Можешь подкорректировать- нужно по цене открытия и закрытия+ отображение по 4-х знаку, а то много цифр))))
...


Сделал.

BarsCounter_v2.ex4

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

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

Спасибо все норм!!!)))Будь другом запили еще вертикальные линии(чтобы двигать можно было для нужного периода) не понятно за какой период он считает, допустим ставлю 119 свечей, если сложить с угла получается 116. я так понял там где типа доджи он за свечу не берет.

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

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

Добавь просто линии периода, которые можно двигать для выбора нужного(при появлении новой свечи нужно перебивать кол-во считаемых свечей-линиями проще было бы), а по отображению все норм)

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

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

Сделал линии, расчет ведется между линиями, доджи не считаются.
Настройки индикатора:

BarsPeriod = 100;      // Количество баров для подсчета
InpColor = clrRed; // Цвет линий
InpStyle = STYLE_DASH; // Стиль линий
InpWidth = 1; // Толщина линий
InpBack = true; // Линии на заднем плане
InpSelection = true; // Выделить для перемещений
InpHidden = true; // Скрыт в списке объектов
InpZOrder = 0; // Приоритет на нажатие мышью


Удачных торгов!

AUDUSDH12.png
BarsCounter_v2.ex4

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

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

Спасибо! На выходных примерно выложу стратегию, ну и конечно не забуду упомянуть твой вклад l-) в этот индюк)))) Еще раз спасибо :d

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

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

Здравствуйте! Выполняя задание по 5 уроку MQL4, столкнулся в с проблемой.
Задание: написать трейлинг-стоп по Parabolic SAR.
Пятый день не могу понять свою ошибку. В журнале пишет: OrderModify error 1 (то есть "Нет ошибки, но результат неизвестен").
Мог бы кто-нибудь помочь разобраться с заданием?

test5SAR.mq4

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

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


Здравствуйте! Выполняя задание по 5 уроку MQL4, столкнулся в с проблемой.
Задание: написать трейлинг-стоп по Parabolic SAR.
Пятый день не могу понять свою ошибку. В журнале пишет: OrderModify error 1 (то есть "Нет ошибки, но результат неизвестен").
Мог бы кто-нибудь помочь разобраться с заданием?


Добрый день! Принтуйте SAR и OrderStopLoss(), посмотрите у них разное количество знаков после запятой, поэтому проверка SAR > OrderStopLoss() дает true и осуществляется модификация ордера по той же цене.
Лекарство: SAR = NormalizeDouble(iSAR(Symbol(), 0, 0.02, 0.2, 1), _Digits);
Удачи!
Ссылка на сообщение
Поделиться на другие сайты

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

Привет всем! Прошу помощи.
Помогите написать код для советника, который будет определять ближайшую цену, заканчивающуюся на: 00, 25,50,75. (Либо для пятизнака: 000,250,500,750.)
Например, имеем цену закрытия свечи, 1.11348. Ближайшая верхняя цена, по условиям, 1.11500, а нижняя 1.11250. Надо найти значения этих цен.
Попытался сделать так. Тестер зависает.
double Level_quaternary()
{
double CloseBar = iClose( Symbol(),TFclose,1 ), Step = 25(250 для пятизнака)
for (double i=CloseBar; i {
string a = DoubleToString(i,Digits); //переводим цену в текст.
string b = StringSubstr(a,4,ff); //находим значение окончания
if (b == "250") //если равен 250,500,750,000. то возвращаем значение этой цены.
Soprotivlenie = i;
}
return(Soprotivlenie);
}

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

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

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

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

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

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

Войти

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

Войти

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


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

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